server 0.0.4 → 0.0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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