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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 73f2ffd5286942a0faa91206e080e9188d285e2b
4
- data.tar.gz: 9167fb9464873647d3e43936f3a05ba844ee61bd
3
+ metadata.gz: a91f424371e91a31c1d549cf6f082c49aa31abc8
4
+ data.tar.gz: e49d1753a6cedfa0dc1f5d2f49e5ddb7fa91c30d
5
5
  SHA512:
6
- metadata.gz: b718465df94217cf0fa277c6fe4395ab1cd429ddf91fa74f0b0f68dd47604b0ef6aeb52b019a6bac969079b787b4c70ef06be7e465f7a742e2be97eb047d9a1c
7
- data.tar.gz: d4b839795e4327cfb63bff10ee220412cb6d8ce7024e31fe99cb5398eb4297121fc60b9b3064461aa46d00a36e9be1ad01ba5d95d9cd3111c97c187ba2701a47
6
+ metadata.gz: e7da0f4131c76811ea7ff0a773ac71855ec218a77aff09faea55a85e3a6d65b55e361371222cd50bc4a49a2bd532572ee27e1b2991704aa873fdbdfb68e5a39d
7
+ data.tar.gz: 600477a8c7f83e9d47866fa53a4e5078cb5f4046a9ff8e4b16c6dda2f1030f8495fed124333d19254e8347b626287e39b9752a4b7d926f61d7d1ab1115ef1433
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ # - 1.9.2
6
+ # - 1.8.7
7
+ # - jruby-18mode
8
+ # - jruby-19mode
9
+ # - ruby-head
10
+ # - jruby-head
11
+ # - ree
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 [![Gem Version](https://badge.fury.io/rb/server.png)](http://badge.fury.io/rb/server)
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
- Signal.trap("INT") { exit 1 }
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
- # Server.start(ARGV)
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
@@ -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