apollon 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gemspec +8 -1
  3. data/.gitignore +5 -0
  4. data/.rspec +4 -0
  5. data/.travis.yml +27 -0
  6. data/README.md +12 -8
  7. data/Rakefile +51 -7
  8. data/Vagrantfile +1 -1
  9. data/bin/apollon +1 -1
  10. data/data/Example.Apollofile +16 -0
  11. data/{packs → data/packer}/README.md +0 -0
  12. data/{packs → data/packer}/core/README.md +0 -0
  13. data/{packs → data/packer}/core/pack-digitalocean.sh +1 -1
  14. data/{packs → data/packer}/core/pack-vagrant.sh +0 -0
  15. data/{packs → data/packer}/core/packer.json +0 -0
  16. data/{packs → data/packer}/core/provision.sh +1 -1
  17. data/{packs → data/packer}/core/scripts/provision-digitalocean.sh +0 -0
  18. data/{packs → data/packer}/examples/aws/pack.sh +0 -0
  19. data/{packs → data/packer}/examples/aws/packer.json +0 -0
  20. data/{packs → data/packer}/examples/digitalocean/data/images.json +0 -0
  21. data/{packs → data/packer}/examples/digitalocean/data/regions.json +0 -0
  22. data/{packs → data/packer}/examples/digitalocean/data/sizes.json +0 -0
  23. data/{packs → data/packer}/examples/digitalocean/pack.sh +0 -0
  24. data/{packs → data/packer}/examples/digitalocean/packer.json +0 -0
  25. data/{packs → data/packer}/examples/virtualbox-iso/pack.sh +0 -0
  26. data/{packs → data/packer}/examples/virtualbox-iso/packer.json +0 -0
  27. data/{packs → data/packer}/examples/virtualbox-iso/provision.sh +0 -0
  28. data/{puppet → data/puppet}/environment.conf +0 -0
  29. data/{puppet → data/puppet}/manifests/all.pp +0 -0
  30. data/{puppet → data/puppet}/manifests/core.pp +0 -0
  31. data/{puppet → data/puppet}/manifests/db.pp +0 -0
  32. data/{puppet → data/puppet}/manifests/default.pp +0 -0
  33. data/{puppet → data/puppet}/manifests/dev.pp +0 -0
  34. data/{puppet → data/puppet}/manifests/ops.pp +0 -0
  35. data/{puppet → data/puppet}/manifests/sites/apollocrawler.com.pp +0 -0
  36. data/data/puppet/manifests/travis.pp +3 -0
  37. data/{puppet → data/puppet}/manifests/web.pp +0 -0
  38. data/{puppet → data/puppet}/modules/apache2/files/apache2.conf +0 -0
  39. data/{puppet → data/puppet}/modules/apache2/files/envvars +0 -0
  40. data/{puppet → data/puppet}/modules/apache2/files/magic +0 -0
  41. data/{puppet → data/puppet}/modules/apache2/files/ports.conf +0 -0
  42. data/{puppet → data/puppet}/modules/apache2/manifests/init.pp +0 -0
  43. data/{puppet → data/puppet}/modules/clang/manifests/init.pp +0 -0
  44. data/{puppet → data/puppet}/modules/cmake/manifests/init.pp +0 -0
  45. data/{puppet → data/puppet}/modules/core/files/sources.list +0 -0
  46. data/{puppet → data/puppet}/modules/core/manifests/init.pp +5 -4
  47. data/{puppet → data/puppet}/modules/couchdb/files/local.ini +0 -0
  48. data/{puppet → data/puppet}/modules/couchdb/manifests/init.pp +0 -0
  49. data/{puppet → data/puppet}/modules/db/manifests/init.pp +0 -0
  50. data/{puppet → data/puppet}/modules/dev/manifests/init.pp +0 -0
  51. data/{puppet → data/puppet}/modules/elasticsearch/files/elasticsearch.yml +0 -0
  52. data/{puppet → data/puppet}/modules/elasticsearch/files/logging.yml +0 -0
  53. data/{puppet → data/puppet}/modules/elasticsearch/manifests/init.pp +0 -0
  54. data/{puppet → data/puppet}/modules/erlang/manifests/init.pp +0 -0
  55. data/{puppet → data/puppet}/modules/ghc/manifests/init.pp +0 -0
  56. data/{puppet → data/puppet}/modules/git/manifests/init.pp +0 -0
  57. data/{puppet → data/puppet}/modules/golang/manifests/init.pp +0 -0
  58. data/{puppet → data/puppet}/modules/htop/manifests/init.pp +0 -0
  59. data/{puppet → data/puppet}/modules/java/files/accept-java-license.sh +0 -0
  60. data/data/puppet/modules/java/files/install-java7.sh +7 -0
  61. data/data/puppet/modules/java/files/install-java8.sh +7 -0
  62. data/{puppet → data/puppet}/modules/java/manifests/init.pp +0 -0
  63. data/{puppet → data/puppet}/modules/links/manifests/init.pp +0 -0
  64. data/{puppet → data/puppet}/modules/llvm/manifests/init.pp +0 -0
  65. data/{puppet → data/puppet}/modules/lynx/manifests/init.pp +0 -0
  66. data/{puppet → data/puppet}/modules/mc/manifests/init.pp +0 -0
  67. data/{puppet → data/puppet}/modules/memcache/files/memcached.conf +0 -0
  68. data/{puppet → data/puppet}/modules/memcache/manifests/init.pp +0 -0
  69. data/{puppet → data/puppet}/modules/mongodb/files/mongodb.conf +0 -0
  70. data/{puppet → data/puppet}/modules/mongodb/manifests/init.pp +0 -0
  71. data/{puppet → data/puppet}/modules/mosh/manifests/init.pp +0 -0
  72. data/{puppet → data/puppet}/modules/mysql/files/conf.d/mysqld_safe_syslog.cnf +0 -0
  73. data/{puppet → data/puppet}/modules/mysql/files/debian.cnf +0 -0
  74. data/{puppet → data/puppet}/modules/mysql/files/my.cnf +0 -0
  75. data/{puppet → data/puppet}/modules/mysql/manifests/init.pp +0 -0
  76. data/{puppet → data/puppet}/modules/nginx/manifests/init.pp +0 -0
  77. data/{puppet → data/puppet}/modules/nodejs/manifests/init.pp +0 -0
  78. data/{puppet → data/puppet}/modules/octave/manifests/init.pp +0 -0
  79. data/{puppet → data/puppet}/modules/ops/manifests/init.pp +0 -0
  80. data/{puppet → data/puppet}/modules/php5/manifests/init.pp +0 -0
  81. data/{puppet → data/puppet}/modules/postgresql/files/9.3/main/environment +0 -0
  82. data/{puppet → data/puppet}/modules/postgresql/files/9.3/main/pg_ctl.conf +0 -0
  83. data/{puppet → data/puppet}/modules/postgresql/files/9.3/main/pg_hba.conf +0 -0
  84. data/{puppet → data/puppet}/modules/postgresql/files/9.3/main/pg_ident.conf +0 -0
  85. data/{puppet → data/puppet}/modules/postgresql/files/9.3/main/postgresql.conf +0 -0
  86. data/{puppet → data/puppet}/modules/postgresql/files/9.3/main/start.conf +0 -0
  87. data/{puppet → data/puppet}/modules/postgresql/files/create-postgresql-user.sh +0 -0
  88. data/{puppet → data/puppet}/modules/postgresql/files/sql/bootstrap.sh +0 -0
  89. data/{puppet → data/puppet}/modules/postgresql/files/sql/create-extension-adminpack.sql +0 -0
  90. data/{puppet → data/puppet}/modules/postgresql/files/sql/create-extension-postgis.sql +0 -0
  91. data/{puppet → data/puppet}/modules/postgresql/manifests/init.pp +0 -0
  92. data/{puppet → data/puppet}/modules/python/manifests/init.pp +0 -0
  93. data/{puppet → data/puppet}/modules/r/manifests/init.pp +0 -0
  94. data/{puppet → data/puppet}/modules/rabbitmq/files/enable-user-management.sh +0 -0
  95. data/{puppet → data/puppet}/modules/rabbitmq/manifests/init.pp +0 -0
  96. data/{puppet → data/puppet}/modules/redis/files/memcached.conf +0 -0
  97. data/{puppet → data/puppet}/modules/redis/manifests/init.pp +0 -0
  98. data/{puppet → data/puppet}/modules/ruby/manifests/init.pp +0 -0
  99. data/{puppet → data/puppet}/modules/rvm/manifests/init.pp +0 -0
  100. data/{puppet → data/puppet}/modules/science/manifests/init.pp +0 -0
  101. data/{puppet → data/puppet}/modules/squid/manifests/init.pp +0 -0
  102. data/{puppet → data/puppet}/modules/svn/manifests/init.pp +0 -0
  103. data/{puppet → data/puppet}/modules/tomcat7/files/tomcat-users.xml +0 -0
  104. data/{puppet → data/puppet}/modules/tomcat7/manifests/init.pp +0 -0
  105. data/{puppet → data/puppet}/modules/varnish/manifests/init.pp +0 -0
  106. data/{puppet → data/puppet}/modules/web/manifests/init.pp +0 -0
  107. data/{puppet → data/puppet}/modules/zookeeper/files/conf/configuration.xsl +0 -0
  108. data/{puppet → data/puppet}/modules/zookeeper/files/conf/environment +0 -0
  109. data/{puppet → data/puppet}/modules/zookeeper/files/conf/log4j.properties +0 -0
  110. data/{puppet → data/puppet}/modules/zookeeper/files/conf/zoo.cfg +0 -0
  111. data/{puppet → data/puppet}/modules/zookeeper/manifests/init.pp +0 -0
  112. data/{vagrant → data/vagrant}/profiles/default.json +0 -0
  113. data/lib/apollon.rb +3 -1
  114. data/lib/apollon/cli/app.rb +38 -0
  115. data/lib/apollon/cli/cli.rb +7 -0
  116. data/lib/apollon/cli/cmd/provider_cmd.rb +28 -0
  117. data/lib/apollon/cli/cmd/puppet_cmd.rb +54 -0
  118. data/lib/apollon/cli/shared.rb +12 -0
  119. data/lib/apollon/core/core.rb +1 -1
  120. data/lib/apollon/extensions/string.rb +43 -0
  121. data/lib/apollon/helpers/helpers.rb +6 -4
  122. data/lib/apollon/lib.rb +3 -4
  123. data/lib/apollon/provider/provider.rb +23 -0
  124. data/lib/apollon/provider/providers/aws.rb +8 -0
  125. data/lib/apollon/provider/providers/digital_ocean.rb +8 -0
  126. data/lib/apollon/provider/providers/virtualbox.rb +8 -0
  127. data/lib/apollon/puppet/core.rb +40 -0
  128. data/lib/apollon/{provisions/provisions.rb → puppet/puppet.rb} +1 -1
  129. data/lib/apollon/version.rb +2 -1
  130. data/spec/spec_helper.rb +44 -0
  131. data/spec/unit/cli/cli_spec.rb +7 -0
  132. metadata +256 -123
  133. data/Gemfile.lock +0 -87
  134. data/lib/apollon/app/app.rb +0 -1
  135. data/lib/apollon/provisions/puppet.rb +0 -1
  136. data/puppet/modules/java/files/install-java7.sh +0 -7
  137. data/puppet/modules/java/files/install-java8.sh +0 -7
@@ -1 +1,3 @@
1
- require 'apollon/lib'
1
+ # encoding: UTF-8
2
+
3
+ require 'apollon/lib'
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ require 'gli'
4
+ require 'pathname'
5
+ require 'pp'
6
+
7
+ require_relative 'shared'
8
+
9
+ def launch(argv = ARGV)
10
+ run(argv)
11
+ end
12
+
13
+ include GLI::App
14
+
15
+ program_desc 'Apollon CLI'
16
+
17
+ module Apollon
18
+ # Apollon CLI
19
+ module Cli
20
+ # CLI Application
21
+ class App
22
+ extend Apollon::Cli::Shared
23
+
24
+ cmds = File.absolute_path(File.join(File.dirname(__FILE__), 'cmd'))
25
+ Dir.glob(cmds + '/*.rb').each do |file|
26
+ require file
27
+ end
28
+
29
+ program_desc 'Apollon CLI'
30
+
31
+ def main(argv = ARGV)
32
+ launch(argv)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ launch
@@ -0,0 +1,7 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'pathname'
4
+
5
+ require_relative 'shared'
6
+
7
+ require_relative 'app'
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ require 'gli'
4
+ require 'pp'
5
+ require 'terminal-table'
6
+
7
+ include GLI::App
8
+
9
+ require_relative '../../provider/provider'
10
+
11
+ require_relative '../shared'
12
+
13
+ desc 'Provider'
14
+ command :provider do |c|
15
+ c.desc 'List supported providers'
16
+ c.command :list do |list|
17
+ list.action do
18
+ data = Apollon::Provider.list.each_with_index.map do |item, i|
19
+ [i, item[:name], item[:klass], item[:path]]
20
+ end
21
+
22
+ # TODO: Implement here
23
+ puts Terminal::Table.new title: 'Provider List',
24
+ headings: %w(Id Name Class Path),
25
+ rows: data
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ require 'gli'
4
+ require 'pp'
5
+ require 'terminal-table'
6
+
7
+ require_relative '../shared'
8
+
9
+ require_relative '../../puppet/puppet'
10
+
11
+ include GLI::App
12
+
13
+ def print_puppet_table(data, title = '', headings = nil, _base_dir = Apollon::Puppet::PUPPET_DIR)
14
+ rows = data.each_with_index.map do |item, i|
15
+ [i, item[:name], item[:rel], item[:path]]
16
+ end
17
+
18
+ puts Terminal::Table.new title: title,
19
+ headings: headings,
20
+ rows: rows
21
+ end
22
+
23
+ desc 'Puppet low-level commands'
24
+ command :puppet do |puppet|
25
+ # Puppet manifests
26
+ puppet.desc 'Puppet manifests'
27
+ puppet.command :manifest do |manifest|
28
+ # List puppet manifests
29
+ manifest.desc 'List puppet manifest'
30
+ manifest.command :list do |list|
31
+ list.action do
32
+ print_puppet_table(Apollon::Puppet.manifests,
33
+ 'Puppet Manifests',
34
+ %w(id Name Relative Path),
35
+ Apollon::Puppet::MANIFEST_DIR)
36
+ end
37
+ end
38
+ end
39
+
40
+ # Puppet modules
41
+ puppet.desc 'Puppet modules'
42
+ puppet.command :module do |modul|
43
+ # List puppet manifests
44
+ modul.desc 'List puppet modules'
45
+ modul.command :list do |list|
46
+ list.action do
47
+ print_puppet_table(Apollon::Puppet.modules,
48
+ 'Puppet Modules',
49
+ %w(id Name Relative Path),
50
+ Apollon::Puppet::MODULE_DIR)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'gli'
4
+
5
+ module Apollon
6
+ module Cli
7
+ # Shared CLI Stuff
8
+ module Shared
9
+ extend GLI::App
10
+ end
11
+ end
12
+ end
@@ -5,4 +5,4 @@ require 'pathname'
5
5
  base = Pathname(__FILE__).dirname.expand_path
6
6
  Dir.glob(base + '*.rb').each do |file|
7
7
  require file
8
- end
8
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+
3
+ # String class extensions
4
+ class String
5
+ # rubocop:disable all
6
+ def camelcase(*separators)
7
+ case separators.first
8
+ when Symbol, TrueClass, FalseClass, NilClass
9
+ first_letter = separators.shift
10
+ end
11
+
12
+ separators = ['_', '\s'] if separators.empty?
13
+
14
+ str = self.dup
15
+
16
+ separators.each do |s|
17
+ str = str.gsub(/(?:#{s}+)([a-z])/) { $1.upcase }
18
+ end
19
+
20
+ case first_letter
21
+ when :upper, true
22
+ str = str.gsub(/(\A|\s)([a-z])/) { $1 + $2.upcase }
23
+ when :lower, false
24
+ str = str.gsub(/(\A|\s)([A-Z])/) { $1 + $2.downcase }
25
+ end
26
+
27
+ str
28
+ end
29
+
30
+ def camel_case
31
+ return self if self !~ /_/ && self =~ /[A-Z]+.*/
32
+ split('_').map { |e| e.capitalize }.join
33
+ end
34
+
35
+ def modulize
36
+ #gsub('__','/'). # why was this ever here?
37
+ gsub(/__(.?)/) { "::#{$1.upcase}" }.
38
+ gsub(/\/(.?)/) { "::#{$1.upcase}" }.
39
+ gsub(/(?:_+|-+)([a-z])/) { $1.upcase }.
40
+ gsub(/(\A|\s)([a-z])/) { $1 + $2.upcase }
41
+ end
42
+ # rubocop:enable all
43
+ end
@@ -1,10 +1,12 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'net/http'
2
4
  require 'json'
3
5
 
4
- uri = URI("https://api.github.com/gists")
6
+ uri = URI('https://api.github.com/gists')
5
7
 
6
8
  payload = {
7
- 'description' => "My test gist",
9
+ 'description' => 'My test gist',
8
10
  'public' => true,
9
11
  'files' => {
10
12
  'test.txt' => {
@@ -20,9 +22,9 @@ puts req.inspect
20
22
  puts req.body.inspect
21
23
 
22
24
  # GitHub API is strictly via HTTPS, so SSL is mandatory
23
- res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
25
+ res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
24
26
  http.request(req)
25
27
  end
26
28
 
27
29
  puts res.inspect
28
- puts res.body.inspect
30
+ puts res.body.inspect
@@ -2,8 +2,7 @@
2
2
 
3
3
  require 'pathname'
4
4
 
5
- require_relative 'app/app'
6
- require_relative 'provisions/provisions'
5
+ # require_relative 'cli/cli'
7
6
 
8
7
  base = Pathname(__FILE__).dirname.expand_path
9
8
 
@@ -12,8 +11,8 @@ res = []
12
11
  Dir.glob(base + '*.rb').each do |file|
13
12
  loaded_file = require file
14
13
  res << {
15
- :file => file,
16
- :loaded => loaded_file,
14
+ file: file,
15
+ loaded: loaded_file
17
16
  }
18
17
  end
19
18
 
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+
3
+ require_relative '../extensions/string'
4
+
5
+ module Apollon
6
+ # Provider module
7
+ module Provider
8
+ class << self
9
+ def list
10
+ base = File.join(File.dirname(__FILE__), 'providers')
11
+ providers = File.absolute_path(base)
12
+ Dir.glob(providers + '/*.rb').map do |file|
13
+ name = file.gsub(base + '/', '').gsub('.rb', '')
14
+ {
15
+ name: name,
16
+ path: file,
17
+ klass: name.modulize
18
+ }
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+
3
+ module Apollon
4
+ module Provider
5
+ class Aws
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+
3
+ module Apollon
4
+ module Provider
5
+ class DigitalOcean
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+
3
+ module Apollon
4
+ module Provider
5
+ class Virtualbox
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: UTF-8
2
+
3
+ module Apollon
4
+ # Interface for puppet
5
+ class Puppet
6
+ BASE_DIR ||= File.absolute_path(File.join(File.dirname(__FILE__),
7
+ '..',
8
+ '..',
9
+ '..'))
10
+ PUPPET_DIR ||= File.join(BASE_DIR, 'data', 'puppet')
11
+ MODULE_DIR ||= File.join(PUPPET_DIR, 'modules')
12
+ MANIFEST_DIR ||= File.join(PUPPET_DIR, 'manifests')
13
+
14
+ PUPPET_MANIFEST_PATTERN = '/*'
15
+ PUPPET_MODULE_PATTERN = '/*'
16
+
17
+ class << self
18
+ def relative_files(dir, relative_dir)
19
+ Dir.glob(dir).map do |f|
20
+ full_path = File.expand_path(f)
21
+ rel_path = full_path.gsub(relative_dir + '/', '')
22
+ name = rel_path.gsub(/\.pp$/, '').split('/')[0]
23
+ {
24
+ name: name,
25
+ rel: full_path.gsub(BASE_DIR + '/', ''),
26
+ path: full_path
27
+ }
28
+ end
29
+ end
30
+
31
+ def manifests(dir = MANIFEST_DIR + PUPPET_MANIFEST_PATTERN)
32
+ relative_files(dir, MANIFEST_DIR)
33
+ end
34
+
35
+ def modules(dir = MODULE_DIR + PUPPET_MODULE_PATTERN)
36
+ relative_files(dir, MODULE_DIR)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -5,4 +5,4 @@ require 'pathname'
5
5
  base = Pathname(__FILE__).dirname.expand_path
6
6
  Dir.glob(base + '*.rb').each do |file|
7
7
  require file
8
- end
8
+ end
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
+ # Apollon module
3
4
  module Apollon
4
- VERSION = '0.0.4'
5
+ VERSION = '0.0.6'
5
6
  end
@@ -0,0 +1,44 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'simplecov'
4
+ require 'rspec'
5
+ require 'coveralls'
6
+ require 'pathname'
7
+
8
+ Coveralls.wear_merged!
9
+
10
+ # Automagically include all helpers/*_helper.rb
11
+
12
+ base = Pathname(__FILE__).dirname.expand_path
13
+ Dir.glob(base + 'helpers/*_helper.rb').each do |file|
14
+ require file
15
+ end
16
+
17
+ RSpec.configure do |config|
18
+ config.filter_run_excluding :broken => true
19
+
20
+ config.before(:all) do
21
+ # TODO: Fully setup global environment
22
+ end
23
+
24
+ config.after(:all) do
25
+ # TODO: Fully setup global environment
26
+ end
27
+
28
+ config.before(:suite) do
29
+ # TODO: Setup test project
30
+ end
31
+
32
+ config.after(:suite) do
33
+ # TODO: Delete test project
34
+ end
35
+ end
36
+
37
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
38
+ SimpleCov::Formatter::HTMLFormatter,
39
+ Coveralls::SimpleCov::Formatter
40
+ ]
41
+
42
+ SimpleCov.start do
43
+ add_filter 'spec/'
44
+ end