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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a91f424371e91a31c1d549cf6f082c49aa31abc8
|
4
|
+
data.tar.gz: e49d1753a6cedfa0dc1f5d2f49e5ddb7fa91c30d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7da0f4131c76811ea7ff0a773ac71855ec218a77aff09faea55a85e3a6d65b55e361371222cd50bc4a49a2bd532572ee27e1b2991704aa873fdbdfb68e5a39d
|
7
|
+
data.tar.gz: 600477a8c7f83e9d47866fa53a4e5078cb5f4046a9ff8e4b16c6dda2f1030f8495fed124333d19254e8347b626287e39b9752a4b7d926f61d7d1ab1115ef1433
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.document
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
# Add dependencies required to use your gem here.
|
4
|
+
# Example:
|
5
|
+
# gem "activesupport", ">= 2.3.5"
|
6
|
+
gem "thor", ">= 0.17.1" # http://whatisthor.com/
|
7
|
+
gem "highline", ">= 1.5.1" # https://github.com/JEG2/highline
|
8
|
+
gem "mustache", "~> 0.99.4" # https://github.com/defunkt/mustache
|
9
|
+
gem "terminal-table" # https://github.com/visionmedia/terminal-table
|
10
|
+
gem "ruby-progressbar" # https://github.com/jfelchner/ruby-progressbar
|
11
|
+
|
12
|
+
# gem "god" # http://godrb.com/ <<<<< Still not sure about this. Maybe I can make it work in this for something awesome.
|
13
|
+
|
14
|
+
# Add dependencies to develop your gem here.
|
15
|
+
# Include everything needed to run rake, tests, features, etc.
|
16
|
+
group :development do
|
17
|
+
gem 'coveralls'
|
18
|
+
gem "rake", "~> 10.0"
|
19
|
+
gem "shoulda", ">= 3.0"
|
20
|
+
gem "rdoc", ">= 4.0"
|
21
|
+
gem "bundler", "~> 1.0"
|
22
|
+
gem "jeweler", "~> 2.0.1"
|
23
|
+
gem "simplecov", ">= 0.8.0"
|
24
|
+
gem "ronn" # https://github.com/rtomayko/ronn
|
25
|
+
gem "fakefs" # https://github.com/defunkt/fakefs
|
26
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (4.0.3)
|
5
|
+
i18n (~> 0.6, >= 0.6.4)
|
6
|
+
minitest (~> 4.2)
|
7
|
+
multi_json (~> 1.3)
|
8
|
+
thread_safe (~> 0.1)
|
9
|
+
tzinfo (~> 0.3.37)
|
10
|
+
addressable (2.3.5)
|
11
|
+
atomic (1.1.14)
|
12
|
+
builder (3.2.2)
|
13
|
+
coveralls (0.7.0)
|
14
|
+
multi_json (~> 1.3)
|
15
|
+
rest-client
|
16
|
+
simplecov (>= 0.7)
|
17
|
+
term-ansicolor
|
18
|
+
thor
|
19
|
+
descendants_tracker (0.0.3)
|
20
|
+
docile (1.1.3)
|
21
|
+
fakefs (0.5.0)
|
22
|
+
faraday (0.9.0)
|
23
|
+
multipart-post (>= 1.2, < 3)
|
24
|
+
git (1.2.6)
|
25
|
+
github_api (0.11.3)
|
26
|
+
addressable (~> 2.3)
|
27
|
+
descendants_tracker (~> 0.0.1)
|
28
|
+
faraday (~> 0.8, < 0.10)
|
29
|
+
hashie (>= 1.2)
|
30
|
+
multi_json (>= 1.7.5, < 2.0)
|
31
|
+
nokogiri (~> 1.6.0)
|
32
|
+
oauth2
|
33
|
+
hashie (2.0.5)
|
34
|
+
highline (1.6.20)
|
35
|
+
hpricot (0.8.6)
|
36
|
+
i18n (0.6.9)
|
37
|
+
jeweler (2.0.1)
|
38
|
+
builder
|
39
|
+
bundler (>= 1.0)
|
40
|
+
git (>= 1.2.5)
|
41
|
+
github_api
|
42
|
+
highline (>= 1.6.15)
|
43
|
+
nokogiri (>= 1.5.10)
|
44
|
+
rake
|
45
|
+
rdoc
|
46
|
+
json (1.8.1)
|
47
|
+
jwt (0.1.11)
|
48
|
+
multi_json (>= 1.5)
|
49
|
+
mime-types (2.1)
|
50
|
+
mini_portile (0.5.2)
|
51
|
+
minitest (4.7.5)
|
52
|
+
multi_json (1.8.4)
|
53
|
+
multi_xml (0.5.5)
|
54
|
+
multipart-post (2.0.0)
|
55
|
+
mustache (0.99.5)
|
56
|
+
nokogiri (1.6.1)
|
57
|
+
mini_portile (~> 0.5.0)
|
58
|
+
oauth2 (0.9.3)
|
59
|
+
faraday (>= 0.8, < 0.10)
|
60
|
+
jwt (~> 0.1.8)
|
61
|
+
multi_json (~> 1.3)
|
62
|
+
multi_xml (~> 0.5)
|
63
|
+
rack (~> 1.2)
|
64
|
+
rack (1.5.2)
|
65
|
+
rake (10.1.1)
|
66
|
+
rdiscount (2.1.7)
|
67
|
+
rdoc (4.1.1)
|
68
|
+
json (~> 1.4)
|
69
|
+
rest-client (1.6.7)
|
70
|
+
mime-types (>= 1.16)
|
71
|
+
ronn (0.7.3)
|
72
|
+
hpricot (>= 0.8.2)
|
73
|
+
mustache (>= 0.7.0)
|
74
|
+
rdiscount (>= 1.5.8)
|
75
|
+
ruby-progressbar (1.4.1)
|
76
|
+
shoulda (3.5.0)
|
77
|
+
shoulda-context (~> 1.0, >= 1.0.1)
|
78
|
+
shoulda-matchers (>= 1.4.1, < 3.0)
|
79
|
+
shoulda-context (1.1.6)
|
80
|
+
shoulda-matchers (2.5.0)
|
81
|
+
activesupport (>= 3.0.0)
|
82
|
+
simplecov (0.8.2)
|
83
|
+
docile (~> 1.1.0)
|
84
|
+
multi_json
|
85
|
+
simplecov-html (~> 0.8.0)
|
86
|
+
simplecov-html (0.8.0)
|
87
|
+
term-ansicolor (1.3.0)
|
88
|
+
tins (~> 1.0)
|
89
|
+
terminal-table (1.4.5)
|
90
|
+
thor (0.18.1)
|
91
|
+
thread_safe (0.1.3)
|
92
|
+
atomic
|
93
|
+
tins (1.0.0)
|
94
|
+
tzinfo (0.3.38)
|
95
|
+
|
96
|
+
PLATFORMS
|
97
|
+
ruby
|
98
|
+
|
99
|
+
DEPENDENCIES
|
100
|
+
bundler (~> 1.0)
|
101
|
+
coveralls
|
102
|
+
fakefs
|
103
|
+
highline (>= 1.5.1)
|
104
|
+
jeweler (~> 2.0.1)
|
105
|
+
mustache (~> 0.99.4)
|
106
|
+
rake (~> 10.0)
|
107
|
+
rdoc (>= 4.0)
|
108
|
+
ronn
|
109
|
+
ruby-progressbar
|
110
|
+
shoulda (>= 3.0)
|
111
|
+
simplecov (>= 0.8.0)
|
112
|
+
terminal-table
|
113
|
+
thor (>= 0.17.1)
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2014 Pierce Moore
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,4 +1,15 @@
|
|
1
|
-
server-gem
|
1
|
+
server-gem
|
2
2
|
==========
|
3
3
|
|
4
|
+
[](https://coveralls.io/r/rex/server-gem)
|
5
|
+
[](http://badge.fury.io/rb/server)
|
6
|
+
[](https://travis-ci.org/rex/server-gem)
|
7
|
+
[](https://drone.io/github.com/rex/server-gem/latest)
|
8
|
+
[](https://gemnasium.com/rex/server-gem)
|
9
|
+
[](https://codeclimate.com/github/rex/server-gem)
|
10
|
+
[](https://www.codeship.io/projects/14664)
|
11
|
+
|
4
12
|
Manage servers in a really awesome way. Like a boss.
|
13
|
+
|
14
|
+
NOT FINISHED. NOT REALLY EVEN STARTED. WORK IN PROGRESS. DO NOT USE YET.
|
15
|
+
===
|
data/Rakefile
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
17
|
+
gem.name = "server"
|
18
|
+
gem.version = "0.0.4"
|
19
|
+
gem.homepage = "http://github.com/rex/server-gem"
|
20
|
+
gem.license = "MIT"
|
21
|
+
gem.summary = "Manage servers in a really awesome way. Like a boss. NOTE: This doesn't do much of anything yet. In a few days I should have a much more awesome feature set live."
|
22
|
+
gem.description = "PRE-ALPHA RELEASE! This gem is a work in progress that will soon allow for much easier management of servers and performance of various server administration tasks."
|
23
|
+
gem.email = "me@prex.io"
|
24
|
+
gem.authors = ["Pierce Moore"]
|
25
|
+
gem.required_ruby_version = '>= 1.9.3'
|
26
|
+
gem.require_paths = ["lib"]
|
27
|
+
# dependencies defined in Gemfile
|
28
|
+
end
|
29
|
+
Jeweler::RubygemsDotOrgTasks.new
|
30
|
+
|
31
|
+
require 'rake/testtask'
|
32
|
+
Rake::TestTask.new(:test) do |test|
|
33
|
+
test.libs << 'lib' << 'test'
|
34
|
+
test.pattern = 'test/**/test_*.rb'
|
35
|
+
test.verbose = true
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "Code coverage detail"
|
39
|
+
task :simplecov do
|
40
|
+
ENV['COVERAGE'] = "true"
|
41
|
+
Rake::Task['test'].execute
|
42
|
+
end
|
43
|
+
|
44
|
+
task :default => :test
|
45
|
+
|
46
|
+
require 'rdoc/task'
|
47
|
+
Rake::RDocTask.new do |rdoc|
|
48
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
49
|
+
|
50
|
+
rdoc.rdoc_dir = 'rdoc'
|
51
|
+
rdoc.title = "server #{version}"
|
52
|
+
rdoc.rdoc_files.include('README*')
|
53
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
54
|
+
end
|
data/bin/server
CHANGED
@@ -1,7 +1,23 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
# Update our load path to make loading internal files easier
|
4
|
+
libdir = File.expand_path('../lib/', File.dirname( __FILE__ ) )
|
5
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
6
|
+
|
7
|
+
require 'server/log' # Initialize our logs
|
8
|
+
$Log = Server::Log.new(STDOUT)
|
9
|
+
|
10
|
+
require 'server/signals' # Initialize our signal listeners
|
11
|
+
require 'server/step' # Our convenient step helper
|
12
|
+
|
13
|
+
$Log.debug("ARGV: #{ARGV}")
|
14
|
+
|
15
|
+
# $Log.debug("$LOAD_PATH > #{$LOAD_PATH}")
|
4
16
|
|
5
17
|
require 'server'
|
6
18
|
|
7
|
-
|
19
|
+
Server.init
|
20
|
+
|
21
|
+
require 'server/cli'
|
22
|
+
|
23
|
+
Server::CLI.start(ARGV)
|
data/lib/server/cli.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require 'highline/import'
|
5
|
+
# require 'server/installed'
|
6
|
+
# require 'server/conf'
|
7
|
+
# require 'server/sys'
|
8
|
+
# require 'server/workflows/web'
|
9
|
+
# require 'server/workflows/db'
|
10
|
+
require 'server/packages/nginx'
|
11
|
+
require 'server/packages/phpfpm'
|
12
|
+
|
13
|
+
module Server
|
14
|
+
|
15
|
+
class CLI < Thor
|
16
|
+
|
17
|
+
class_option :info, :type => :boolean, :aliases => "-v", :desc => "Enable info logging"
|
18
|
+
class_option :verbose, :type => :boolean, :aliases => "-vv", :desc => "Enable verbose logging"
|
19
|
+
class_option :quiet, :type => :boolean, :aliases => "-q", :desc => "Silence all non-error logging"
|
20
|
+
class_option :expanded, :type => :boolean, :aliases => "-e", :desc => "Make logging output more roomy and easy to read"
|
21
|
+
class_option :reset, :type => :boolean, :aliases => "--delete-config", :desc => "Performs a hard reset on the server config file"
|
22
|
+
|
23
|
+
no_commands do
|
24
|
+
def self.explain
|
25
|
+
$Log.info( "Server runtime path: #{Server.runtime_path}" )
|
26
|
+
$Log.info( "Server settings: #{Server.settings}" )
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "build", "Build a general server type"
|
31
|
+
def build
|
32
|
+
choose do |menu|
|
33
|
+
|
34
|
+
menu.prompt = "What type of server is this going to be?"
|
35
|
+
|
36
|
+
menu.choice(:web) { Workflows::Web.start! }
|
37
|
+
menu.choice(:db) { Workflows::Db.start! }
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "install", "Installs and configures packages"
|
43
|
+
def install
|
44
|
+
choose do |menu|
|
45
|
+
menu.prompt = "What package do you want to install?"
|
46
|
+
|
47
|
+
menu.choice(:nginx) { Server::Packages::Nginx.install! }
|
48
|
+
menu.choice(:phpfpm) { Server::Packages::PHPFPM.install! }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "configure", "Change the configuration of an existing package"
|
53
|
+
def configure
|
54
|
+
$Log.info( "Configuring" )
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "server", "Change general server/machine settings"
|
58
|
+
def server
|
59
|
+
$Log.info( "Server settings" )
|
60
|
+
end
|
61
|
+
|
62
|
+
desc "ssh", "Manage authorized SSH keys"
|
63
|
+
def ssh
|
64
|
+
$Log.info( "SSH keys" )
|
65
|
+
end
|
66
|
+
|
67
|
+
desc "stats", "View statistics for this machine"
|
68
|
+
def stats
|
69
|
+
$Log.info( "Machine stats" )
|
70
|
+
end
|
71
|
+
|
72
|
+
desc "info", "Displays information about this machine"
|
73
|
+
def info
|
74
|
+
$Log.info( "Nginx path: #{Conf::nginx_path}" )
|
75
|
+
$Log.info( "PHP-FPM path: #{Conf::phpfpm_path}" )
|
76
|
+
$Log.info( "Yum package manager available" ) if Installed::yum?
|
77
|
+
$Log.info( "Brew package manager available" ) if Installed::brew?
|
78
|
+
$Log.info( "PHP-FPM installed" ) if Installed::phpfpm?
|
79
|
+
$Log.info( "Nginx installed" ) if Installed::nginx?
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
def black; "\033[30m#{self}\033[0m" end
|
4
|
+
def red; "\033[31m#{self}\033[0m" end
|
5
|
+
def green; "\033[32m#{self}\033[0m" end
|
6
|
+
def brown; "\033[33m#{self}\033[0m" end
|
7
|
+
def blue; "\033[34m#{self}\033[0m" end
|
8
|
+
def magenta; "\033[35m#{self}\033[0m" end
|
9
|
+
def cyan; "\033[36m#{self}\033[0m" end
|
10
|
+
def gray; "\033[37m#{self}\033[0m" end
|
11
|
+
|
12
|
+
end
|
data/lib/server/conf.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'json'
|
6
|
+
require 'terminal-table'
|
7
|
+
|
8
|
+
module Server
|
9
|
+
|
10
|
+
class Conf
|
11
|
+
attr_reader :okay
|
12
|
+
attr_accessor :config
|
13
|
+
|
14
|
+
def initialize(opts)
|
15
|
+
configure! if ARGV.include?('--delete-config') || !paths[:config].exist?
|
16
|
+
|
17
|
+
# Check whether we're able to properly interact with the config
|
18
|
+
@okay = true
|
19
|
+
@okay = false if !paths[:sys_dir].writable?
|
20
|
+
@okay = false if !paths[:app_dir].writable?
|
21
|
+
@okay = false if !paths[:config].writable?
|
22
|
+
|
23
|
+
@okay ? $Log.info("Environment ready to configure") : $Log.error("Unable to configure environment")
|
24
|
+
|
25
|
+
check_permissions
|
26
|
+
|
27
|
+
# Now create necessary files
|
28
|
+
create! if !paths[:config].exist?
|
29
|
+
end
|
30
|
+
|
31
|
+
def paths
|
32
|
+
{
|
33
|
+
:config => Pathname.new(Server.config_path),
|
34
|
+
:sys_dir => Pathname.new(Server.sys_dir),
|
35
|
+
:app_dir => Pathname.new(Server.app_dir)
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def check_permissions
|
40
|
+
$Log.debug("Checking permissions for config module")
|
41
|
+
rows = []
|
42
|
+
paths.each do |name, path|
|
43
|
+
good = "✓".green
|
44
|
+
bad = "✖".red
|
45
|
+
exists = path.exist? ? good : bad
|
46
|
+
readable = path.readable? ? good : bad
|
47
|
+
writable = path.writable? ? good : bad
|
48
|
+
|
49
|
+
rows << [name, path, exists, readable, writable]
|
50
|
+
|
51
|
+
# msg = "#{name} (#{path}): "
|
52
|
+
# path.exist? ? msg = "#{msg}#{'exists ✓'.green}" : msg = "#{msg}#{'exists ✖'.red}"
|
53
|
+
# path.readable? ? msg = "#{msg}#{', readable ✓'.green}" : msg = "#{msg}#{', readable ✖'.red}"
|
54
|
+
# path.writable? ? msg = "#{msg}#{', writable ✓'.green}" : msg = "#{msg}#{', writable ✖'.red}"
|
55
|
+
# $Log.info(msg)
|
56
|
+
end
|
57
|
+
|
58
|
+
table = Terminal::Table.new :title => "File Permissions", :headings => ['name', 'path', 'exists?', 'readable?', 'writable?'], :alignment => :center, :rows => rows
|
59
|
+
puts table
|
60
|
+
end
|
61
|
+
|
62
|
+
def configure!
|
63
|
+
delete! if ARGV.include?('--delete-config')
|
64
|
+
|
65
|
+
$Log.info("Configuring file/folder paths")
|
66
|
+
|
67
|
+
Step.start("Making sys_dir writable")
|
68
|
+
FileUtils.chmod("u=wrx,go=rx", paths[:sys_dir]) if !paths[:sys_dir].exist?
|
69
|
+
Step.complete()
|
70
|
+
|
71
|
+
Step.start("Creating app_dir")
|
72
|
+
FileUtils.mkdir(paths[:app_dir], :mode => 0755) if !paths[:app_dir].exist?
|
73
|
+
Step.complete()
|
74
|
+
|
75
|
+
Step.start("Making app_dir writable")
|
76
|
+
FileUtils.chmod("u=wrx,go=rx", paths[:app_dir]) if !paths[:app_dir].writable?
|
77
|
+
Step.complete()
|
78
|
+
|
79
|
+
# Now let's see if the config file is blank. If so, it's the first
|
80
|
+
# run and we need to create and store it.
|
81
|
+
$Log.debug("Creating base JSON config if need be")
|
82
|
+
create! if !read
|
83
|
+
|
84
|
+
# $Log.debug("Config file: #{read}")
|
85
|
+
# $Log.debug("Raw config file: #{File.read(paths[:config])}")
|
86
|
+
|
87
|
+
return true
|
88
|
+
end
|
89
|
+
|
90
|
+
def read
|
91
|
+
|
92
|
+
$Log.debug("Parsing config file: #{paths[:config]}")
|
93
|
+
config = begin
|
94
|
+
if paths[:config].exist? && File.size?(paths[:config])
|
95
|
+
Logger.debug("File exists and has size: #{File.size?(paths[:config])}")
|
96
|
+
json = File.read(paths[:config])
|
97
|
+
JSON.parse(json) if json != ""
|
98
|
+
else
|
99
|
+
$Log.fatal("Can't read config.json... Did you break something?")
|
100
|
+
return false
|
101
|
+
end
|
102
|
+
rescue JSON::ParserError, TypeError => e
|
103
|
+
$Log.error("Could not parse config file: #{e.message}")
|
104
|
+
$Log.error(e.backtrace)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def write!(config)
|
109
|
+
# $Log.debug("Writing config: #{config}")
|
110
|
+
if !config.respond_to?("to_json")
|
111
|
+
$Log.error("Unable to convert configuration to JSON. Is the gem installed?")
|
112
|
+
return false
|
113
|
+
else
|
114
|
+
File.open(paths[:config], "w") do |f|
|
115
|
+
f.write(config.to_json)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def get(item)
|
121
|
+
#
|
122
|
+
end
|
123
|
+
|
124
|
+
def update(opts)
|
125
|
+
#
|
126
|
+
end
|
127
|
+
|
128
|
+
def create!
|
129
|
+
$Log.info("Creating server-gem config file")
|
130
|
+
config = {}
|
131
|
+
|
132
|
+
[:packages, :sys, :installed, :conf, :history, :info, :log, :signals, :vim, :ssh, :cron, :build].each do |key|
|
133
|
+
config[key] = {}
|
134
|
+
end
|
135
|
+
|
136
|
+
write!(config)
|
137
|
+
end
|
138
|
+
|
139
|
+
def delete!
|
140
|
+
Step.start("Deleting existing config: #{paths[:config]}")
|
141
|
+
FileUtils.rm(paths[:config]) if paths[:config].exist?
|
142
|
+
|
143
|
+
paths[:config].exist? ? Step.fail("Failed to delete config file") : Step.complete
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Server
|
2
|
+
|
3
|
+
class Installed
|
4
|
+
|
5
|
+
def self.yum?
|
6
|
+
`which yum` != ""
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.brew?
|
10
|
+
`which brew` != ""
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.nginx?
|
14
|
+
`which nginx` != ""
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.phpfpm?
|
18
|
+
`which php-fpm` != ""
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/lib/server/log.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'server/colorizer'
|
5
|
+
|
6
|
+
module Server
|
7
|
+
|
8
|
+
class Log
|
9
|
+
|
10
|
+
def initialize(output_stream)
|
11
|
+
@instance = Logger.new(output_stream)
|
12
|
+
|
13
|
+
format_date
|
14
|
+
set_prompts
|
15
|
+
return @instance
|
16
|
+
end
|
17
|
+
|
18
|
+
def format_date(format = '%Y-%m-%d %H:%M:%S')
|
19
|
+
@instance.datetime_format = format
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_prompts
|
23
|
+
@instance.formatter = proc do |severity, datetime, progname, msg|
|
24
|
+
case severity.downcase
|
25
|
+
when "debug"
|
26
|
+
prompt = "☰ ".blue
|
27
|
+
when "info"
|
28
|
+
prompt = "i ".green
|
29
|
+
when "warn"
|
30
|
+
prompt = "⚑ ".magenta
|
31
|
+
when "error"
|
32
|
+
prompt = "✖ ".red
|
33
|
+
when "fatal"
|
34
|
+
prompt = ":( ".red
|
35
|
+
else
|
36
|
+
prompt = "✓ ".blue
|
37
|
+
end
|
38
|
+
|
39
|
+
( ARGV.include? "-e" ) ? "#{prompt} #{datetime.strftime("%Y/%m/%d %H:%M:%S")} \n » #{msg.strip} \n\n" : "#{prompt} #{msg.strip} \n"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def debug(msg)
|
44
|
+
text = @instance.debug(msg)
|
45
|
+
puts "Debug text? #{text}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def info(msg)
|
49
|
+
@instance.info(msg)
|
50
|
+
end
|
51
|
+
|
52
|
+
def warn(msg)
|
53
|
+
@instance.warn(msg)
|
54
|
+
end
|
55
|
+
|
56
|
+
def error(msg)
|
57
|
+
@instance.error(msg)
|
58
|
+
end
|
59
|
+
|
60
|
+
def fatal(msg)
|
61
|
+
@instance.fatal(msg)
|
62
|
+
end
|
63
|
+
|
64
|
+
def add(severity, msg)
|
65
|
+
@instance.add(severity, msg)
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'mustache'
|
2
|
+
require 'server/packages/templates/nginx'
|
3
|
+
|
4
|
+
module Server
|
5
|
+
|
6
|
+
module Packages
|
7
|
+
|
8
|
+
class Nginx
|
9
|
+
|
10
|
+
attr_accessor :template
|
11
|
+
|
12
|
+
def self.init
|
13
|
+
@template = Server::Templates::Nginx.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.install!(opts = {})
|
17
|
+
self.init
|
18
|
+
|
19
|
+
$Log.info("Installing Nginx!")
|
20
|
+
self.render_config
|
21
|
+
self.write_config!
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.uninstall!(opts)
|
25
|
+
self.init
|
26
|
+
#
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.configure(opts)
|
30
|
+
self.init
|
31
|
+
#
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.render_config
|
35
|
+
Step.start("Rendering config")
|
36
|
+
@content = @template.render
|
37
|
+
Step.complete
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.write_config!
|
41
|
+
return $Log.warn("Compiled template was empty") if @content == ""
|
42
|
+
|
43
|
+
Step.start("Writing nginx template to #{Server.pkg_path}/nginx.conf")
|
44
|
+
File.open("#{Server.pkg_path}/nginx.conf", "w") do |f|
|
45
|
+
f.write(@content)
|
46
|
+
end
|
47
|
+
Step.complete
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|