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.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.document +5 -0
- data/.travis.yml +11 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +113 -0
- data/LICENSE.txt +20 -0
- data/README.md +12 -1
- data/Rakefile +54 -0
- data/bin/server +18 -2
- data/lib/server/cli.rb +84 -0
- data/lib/server/colorizer.rb +12 -0
- data/lib/server/conf.rb +148 -0
- data/lib/server/installed.rb +23 -0
- data/lib/server/log.rb +70 -0
- data/lib/server/packages/nginx.rb +54 -0
- data/lib/server/packages/phpfpm.rb +37 -0
- data/lib/server/packages/templates/nginx.rb +39 -0
- data/lib/server/packages/templates/raw/nginx.conf.template +7 -0
- data/lib/server/packages/templates/renderer.rb +21 -0
- data/lib/server/signals.rb +1 -0
- data/lib/server/step.rb +22 -0
- data/lib/server/sys.rb +40 -0
- data/lib/server/workflows/db.rb +20 -0
- data/lib/server/workflows/web.rb +21 -0
- data/lib/server.rb +30 -59
- data/test/helper.rb +49 -0
- data/test/loader.rb +14 -0
- data/test/test_logger.rb +38 -0
- data/test/test_server.rb +7 -0
- data/test/test_templates.rb +14 -0
- metadata +188 -26
- data/lib/classes/conf.rb +0 -15
- data/lib/classes/installed.rb +0 -19
- data/lib/classes/sys.rb +0 -11
- data/lib/packages/nginx.rb +0 -15
- data/lib/packages/phpfpm.rb +0 -15
- data/lib/packages/templates/nginx.conf.template +0 -0
- data/lib/workflows/db.rb +0 -16
- data/lib/workflows/web.rb +0 -18
- /data/lib/{packages/templates → server/packages/templates/raw}/haproxy.cfg.template +0 -0
- /data/lib/{packages/templates → server/packages/templates/raw}/memcached.conf.template +0 -0
- /data/lib/{packages/templates → server/packages/templates/raw}/php.ini.template +0 -0
- /data/lib/{packages/templates → server/packages/templates/raw}/phpfpm.conf.template +0 -0
- /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 @@
|
|
1
|
+
Signal.trap("INT") { exit 1 }
|
data/lib/server/step.rb
ADDED
@@ -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,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
|
-
|
2
|
-
|
3
|
-
require '
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
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'
|
data/test/test_logger.rb
ADDED
@@ -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
|
data/test/test_server.rb
ADDED
@@ -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
|