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.
- 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
|
+
[![Coverage Status](https://coveralls.io/repos/rex/server-gem/badge.png)](https://coveralls.io/r/rex/server-gem)
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/server.png)](http://badge.fury.io/rb/server)
|
6
|
+
[![Build Status](https://travis-ci.org/rex/server-gem.png?branch=master)](https://travis-ci.org/rex/server-gem)
|
7
|
+
[![Build Status](https://drone.io/github.com/rex/server-gem/status.png)](https://drone.io/github.com/rex/server-gem/latest)
|
8
|
+
[![Dependency Status](https://gemnasium.com/rex/server-gem.png)](https://gemnasium.com/rex/server-gem)
|
9
|
+
[![Code Climate](https://codeclimate.com/github/rex/server-gem.png)](https://codeclimate.com/github/rex/server-gem)
|
10
|
+
[![Codeship Status for rex/server-gem](https://www.codeship.io/projects/cadef7a0-80dc-0131-4ae6-76ce49ff457f/status?branch=master)](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
|