server 0.0.4 → 0.0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.document +5 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +26 -0
  6. data/Gemfile.lock +113 -0
  7. data/LICENSE.txt +20 -0
  8. data/README.md +12 -1
  9. data/Rakefile +54 -0
  10. data/bin/server +18 -2
  11. data/lib/server/cli.rb +84 -0
  12. data/lib/server/colorizer.rb +12 -0
  13. data/lib/server/conf.rb +148 -0
  14. data/lib/server/installed.rb +23 -0
  15. data/lib/server/log.rb +70 -0
  16. data/lib/server/packages/nginx.rb +54 -0
  17. data/lib/server/packages/phpfpm.rb +37 -0
  18. data/lib/server/packages/templates/nginx.rb +39 -0
  19. data/lib/server/packages/templates/raw/nginx.conf.template +7 -0
  20. data/lib/server/packages/templates/renderer.rb +21 -0
  21. data/lib/server/signals.rb +1 -0
  22. data/lib/server/step.rb +22 -0
  23. data/lib/server/sys.rb +40 -0
  24. data/lib/server/workflows/db.rb +20 -0
  25. data/lib/server/workflows/web.rb +21 -0
  26. data/lib/server.rb +30 -59
  27. data/test/helper.rb +49 -0
  28. data/test/loader.rb +14 -0
  29. data/test/test_logger.rb +38 -0
  30. data/test/test_server.rb +7 -0
  31. data/test/test_templates.rb +14 -0
  32. metadata +188 -26
  33. data/lib/classes/conf.rb +0 -15
  34. data/lib/classes/installed.rb +0 -19
  35. data/lib/classes/sys.rb +0 -11
  36. data/lib/packages/nginx.rb +0 -15
  37. data/lib/packages/phpfpm.rb +0 -15
  38. data/lib/packages/templates/nginx.conf.template +0 -0
  39. data/lib/workflows/db.rb +0 -16
  40. data/lib/workflows/web.rb +0 -18
  41. /data/lib/{packages/templates → server/packages/templates/raw}/haproxy.cfg.template +0 -0
  42. /data/lib/{packages/templates → server/packages/templates/raw}/memcached.conf.template +0 -0
  43. /data/lib/{packages/templates → server/packages/templates/raw}/php.ini.template +0 -0
  44. /data/lib/{packages/templates → server/packages/templates/raw}/phpfpm.conf.template +0 -0
  45. /data/lib/{packages/templates → server/packages/templates/raw}/redis.conf.template +0 -0
@@ -0,0 +1,37 @@
1
+ require 'mustache'
2
+
3
+ module Server
4
+
5
+ module Packages
6
+
7
+ class PackageAbstract
8
+
9
+ def initialize(opts)
10
+ #
11
+ end
12
+
13
+ def install!(opts)
14
+ #
15
+ end
16
+
17
+ def uninstall!(opts)
18
+ #
19
+ end
20
+
21
+ def configure(opts)
22
+ #
23
+ end
24
+
25
+ def render_config(opts)
26
+ #
27
+ end
28
+
29
+ def write_config!(opts)
30
+ #
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,39 @@
1
+ require 'mustache'
2
+
3
+ module Server
4
+
5
+ module Templates
6
+
7
+ class Nginx < Mustache
8
+
9
+ self.template_file = "#{Server.template_path}/nginx.conf.template"
10
+
11
+ def servers
12
+ [
13
+ {
14
+ :ip => '192.168.0.1',
15
+ :hostname => 'web01.prex.io',
16
+ :nickname => 'web-01'
17
+ },
18
+ {
19
+ :ip => '192.168.0.2',
20
+ :hostname => 'web02.prex.io',
21
+ :nickname => 'web-02'
22
+ },
23
+ {
24
+ :ip => '192.168.0.3',
25
+ :hostname => 'web03.prex.io',
26
+ :nickname => 'web-03'
27
+ }
28
+ ]
29
+ end
30
+
31
+ def name
32
+ "That One Guy"
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,7 @@
1
+ Nginx configuration file by {{name}}!
2
+
3
+ SERVERS:
4
+
5
+ {{#servers}}
6
+ IP Address: {{ip}}, Hostname: {{hostname}}, Nickname: {{nickname}}
7
+ {{/servers}}
@@ -0,0 +1,21 @@
1
+ require 'mustache'
2
+
3
+ module Server
4
+
5
+ module Templates
6
+
7
+ class Renderer
8
+
9
+ def self.template_path
10
+ File.expand_path('raw', __FILE__)
11
+ end
12
+
13
+ def self.render(opts)
14
+ #
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1 @@
1
+ Signal.trap("INT") { exit 1 }
@@ -0,0 +1,22 @@
1
+ class Step
2
+
3
+ def self.write!(text)
4
+ if $Log.info?
5
+ print text
6
+ end
7
+ end
8
+
9
+ def self.start(msg)
10
+ self.write!("#{"i ".green} #{msg}...")
11
+ end
12
+
13
+ def self.complete
14
+ self.write!("OK \n".green)
15
+ end
16
+
17
+ def self.fail(msg)
18
+ self.write!("FAIL \n".red)
19
+ $Log.error(msg)
20
+ end
21
+
22
+ end
data/lib/server/sys.rb ADDED
@@ -0,0 +1,40 @@
1
+ require 'rbconfig'
2
+ require 'pathname'
3
+
4
+ module Server
5
+
6
+ class Sys
7
+
8
+ def self.init
9
+ self.running_on_windows?
10
+ self.running_as_sudo?
11
+ self.sysdir_writable?
12
+ end
13
+
14
+ def self.running_on_windows?
15
+ if RbConfig::CONFIG['host_os'] =~ /mswin|windows|cygwin/i
16
+ $Log.fatal("This gem and its tools are currently useless for Windows users. Maybe someday...")
17
+ abort()
18
+ end
19
+ end
20
+
21
+ def self.running_as_sudo?
22
+ if( Process.euid == 0 )
23
+ $Log.fatal("Cowardly avoiding sudo. Re-run without sudo.")
24
+ abort()
25
+ end
26
+ end
27
+
28
+ def self.sysdir_writable?
29
+ sysdir = Pathname.new(Server.sys_dir)
30
+
31
+ $Log.info("#{sysdir} is writable") if sysdir.writable?
32
+ $Log.fatal("#{sysdir} is not writable!") if !sysdir.writable?
33
+ abort() if !sysdir.writable?
34
+
35
+ sysdir.writable?
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'highline/import'
4
+
5
+ module Server
6
+
7
+ module Workflows
8
+
9
+ class Db
10
+
11
+ def self.start!
12
+ puts "Starting DB workflow"
13
+
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'highline/import'
4
+
5
+ module Server
6
+ module Workflows
7
+
8
+ class Web
9
+
10
+ def self.start!
11
+ puts "Starting web workflow"
12
+
13
+ server_nickname = ask("What is the name of this server? ")
14
+ puts "Server nickname: #{server_nickname}"
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
data/lib/server.rb CHANGED
@@ -1,63 +1,34 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'thor'
4
- require 'highline/import'
5
- require_relative 'classes/installed'
6
- require_relative 'classes/conf'
7
- require_relative 'classes/sys'
8
- require_relative 'workflows/web'
9
- require_relative 'workflows/db'
10
-
11
- class Server < Thor
12
- include Workflows
13
-
14
- desc "build", "Build a general server type"
15
- def build
16
- choose do |menu|
17
-
18
- menu.prompt = "What type of server is this going to be?"
19
-
20
- menu.choice(:web) { Workflows::Web.start! }
21
- menu.choice(:db) { Workflows::Db.start! }
22
-
1
+ require 'server/sys'
2
+ require 'server/conf'
3
+ require 'pathname'
4
+
5
+ module Server
6
+
7
+ class << self
8
+
9
+ attr_accessor :settings, :config_path, :config
10
+ attr_reader :runtime_path, :sys_dir, :app_dir, :template_path, :pkg_path
11
+
12
+ def init
13
+ @settings = { :setting_one => "foo", :setting_two => "bar" }
14
+ @runtime_path = File.expand_path('..', File.dirname( __FILE__ ) )
15
+ @sys_dir = Pathname.new("/usr/local/etc")
16
+ @app_dir = Pathname.new("#{@sys_dir}/server-gem")
17
+ @config_path = Pathname.new("#{@app_dir}/config.json")
18
+ @template_path = File.expand_path('./server/packages/templates/raw', File.dirname(__FILE__) )
19
+ @pkg_path = File.expand_path('../pkg', File.dirname(__FILE__))
20
+
21
+ @config = Server::Conf.new({
22
+ :sys_dir => @sys_dir,
23
+ :app_dir => @app_dir,
24
+ :config_path => @config_path,
25
+ :settings => @settings,
26
+ :template_path => @template_path
27
+ })
28
+
29
+ Server::Sys.init
23
30
  end
24
- end
25
-
26
- desc "install", "Installs and configures packages"
27
- def install
28
- puts "Installing"
29
- end
30
31
 
31
- desc "configure", "Change the configuration of an existing package"
32
- def configure
33
- puts "Configuring"
34
32
  end
35
33
 
36
- desc "server", "Change general server/machine settings"
37
- def server
38
- puts "Server settings"
39
- end
40
-
41
- desc "ssh", "Manage authorized SSH keys"
42
- def ssh
43
- puts "SSH keys"
44
- end
45
-
46
- desc "stats", "View statistics for this machine"
47
- def stats
48
- puts "Machine stats"
49
- end
50
-
51
- desc "info", "Displays information about this machine"
52
- def info
53
- puts "Nginx path: #{Conf::nginx_path}"
54
- puts "PHP-FPM path: #{Conf::phpfpm_path}"
55
- puts "Yum package manager available" if Installed::yum?
56
- puts "Brew package manager available" if Installed::brew?
57
- puts "PHP-FPM installed" if Installed::phpfpm?
58
- puts "Nginx installed" if Installed::nginx?
59
- end
60
-
61
- end
62
-
63
- Server.start(ARGV)
34
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+ require 'rubygems'
4
+ require 'bundler'
5
+
6
+ Coveralls.wear!
7
+
8
+ begin
9
+ Bundler.setup(:default, :development)
10
+ rescue Bundler::BundlerError => e
11
+ $stderr.puts e.message
12
+ $stderr.puts "Run `bundle install` to install missing gems"
13
+ exit e.status_code
14
+ end
15
+
16
+ require 'test/unit'
17
+ require 'shoulda'
18
+
19
+ module SimpleCov::Configuration
20
+ def clean_filters
21
+ @filters = []
22
+ end
23
+ end
24
+
25
+ SimpleCov.configure do
26
+ clean_filters
27
+ load_profile 'test_frameworks'
28
+ end
29
+
30
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
31
+ SimpleCov::Formatter::HTMLFormatter,
32
+ Coveralls::SimpleCov::Formatter
33
+ ]
34
+
35
+ ENV["COVERAGE"] && SimpleCov.start do
36
+ add_filter "/.rvm/"
37
+ add_filter "/.rbenv/"
38
+ end
39
+
40
+
41
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
42
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
43
+ require 'server'
44
+
45
+ # Load all our application files to ensure that code coverage is accurate
46
+ require 'loader'
47
+
48
+ class Test::Unit::TestCase
49
+ end
data/test/loader.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'server/cli'
2
+ require 'server/colorizer'
3
+ require 'server/conf'
4
+ require 'server/installed'
5
+ require 'server/log'
6
+ require 'server/signals'
7
+ require 'server/step'
8
+ require 'server/sys'
9
+ require 'server/workflows/db'
10
+ require 'server/workflows/web'
11
+ require 'server/packages/nginx'
12
+ require 'server/packages/phpfpm'
13
+ require 'server/packages/templates/nginx'
14
+ require 'server/packages/templates/renderer'
@@ -0,0 +1,38 @@
1
+ require 'helper'
2
+ require 'server/log'
3
+
4
+ class TestLogger < Test::Unit::TestCase
5
+
6
+ context "Logger" do
7
+
8
+ setup do
9
+ @logger = Server::Log.new(StringIO.new)
10
+ end
11
+
12
+ should "log a debug message" do
13
+ @logger.debug("This is a debug message")
14
+ end
15
+
16
+ should "log an info message" do
17
+ @logger.info("This is an info message")
18
+ end
19
+
20
+ should "log a warning message" do
21
+ @logger.warn("This is a warning message")
22
+ end
23
+
24
+ should "log an error message" do
25
+ @logger.error("This is an error message")
26
+ end
27
+
28
+ should "log a fatal message" do
29
+ @logger.fatal("This is a fatal message")
30
+ end
31
+
32
+ should "log a message with an unknown severity" do
33
+ @logger.add(5, "This message has an unknown severity")
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestServer < Test::Unit::TestCase
4
+ should "run the test suite successfully" do
5
+ assert_equal 4, 2*2
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ require 'helper'
2
+ require 'server/packages/templates/renderer'
3
+
4
+ class TestTemplates < Test::Unit::TestCase
5
+
6
+ context "Templates" do
7
+
8
+ should "find the raw template path" do
9
+ assert Server::Templates::Renderer.template_path.is_a? String
10
+ end
11
+
12
+ end
13
+
14
+ end