ronin-wrapper 0.0.12 → 0.0.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 88b9195eccbb175d71c438d5c13a301bc2298b10
4
- data.tar.gz: f4c9bcc055b2ed4d0a427be7366383b5ab97acd7
3
+ metadata.gz: 53e2dbec8e427757f3f6aa4dd83f44da312e738a
4
+ data.tar.gz: d9826525467d51515bd6e17b84a7a4d3f0f02fa9
5
5
  SHA512:
6
- metadata.gz: fc556846b57c8f12b7a85db8d61e88b38fef110061275aeb6994adda463a6949a15e4a893dbdf551f05fe9c638c550d5bdef254f08d448e069c6348561c47f3f
7
- data.tar.gz: ac93b7ff639ace8b89c0468b2e5dd97a5d33476569038b185d5c28c80313138504a0a2f51a4f1a5c254bce019cec5feead4e6fbb5f3884600a94374e19809142
6
+ metadata.gz: 3caca00937edd64378164774cac21fa6ffe5f21577a9f69960fdabff2ae180ab14d3ac4006ed0b5d6e693f9b96da786d85ea5f2b459d0226315383b62152d6be
7
+ data.tar.gz: 2144ce58a9df7fea7f7d68819660bef0e7a3d9dfc0f54789b26b0a9edc930a452ef43b55aac3060075a019f6e8e08b353a43af15439452e7b1c01e54f5102924
@@ -28,8 +28,9 @@ module Ronin
28
28
  end
29
29
 
30
30
  def download_and_report_changes
31
- Parallel.each(@run_list.items, :in_processes => Ronin::Util.num_cores) do |item|
32
- @actual_branch = Ronin::Git.branch(item[:name])
31
+ @items = @run_list.items
32
+ Parallel.each(@items, :in_threads => Ronin::Util.num_cores) do |item|
33
+ @actual_branch = Ronin::Git.branch(item[:name])
33
34
 
34
35
  if File.exist?("#{Ronin::Config[:artifact_path]}/#{item[:name]}")
35
36
  if item[:branch] != 'master'
data/lib/ronin/chef.rb CHANGED
@@ -19,17 +19,18 @@ require 'ronin/log'
19
19
  require 'json'
20
20
 
21
21
  module Ronin
22
- module Chef
23
- @run_list = "#{Ronin::Config[:artifact_path]}/ronin.json"
24
- @solo_conf = "#{Ronin::Config[:artifact_path]}/ronin-chef-solo.rb"
25
- @recipes = Ronin::RunList.new.artifacts
22
+ class Chef
23
+
24
+ def initialize
25
+ @run_list = "#{Ronin::Config[:artifact_path]}/ronin.json"
26
+ @solo_conf = "#{Ronin::Config[:artifact_path]}/ronin-chef-solo.rb"
27
+ @recipes = Ronin::RunList.new.artifacts
28
+ end
26
29
 
27
30
  def create_run_list
28
31
  Ronin::Log.info("Building Chef run list at #{@run_list}.")
29
-
30
32
  @rl = []
31
33
  @rl_obj = {}
32
-
33
34
  @recipes.each do |r|
34
35
  @rl << "recipe[#{r}]"
35
36
  Ronin::Log.info("Adding recipe '#{r}' to run list.")
@@ -41,7 +42,6 @@ module Ronin
41
42
  f.write(@rl_obj.to_json)
42
43
  end
43
44
  end
44
- module_function :create_run_list
45
45
 
46
46
  def run
47
47
  self.create_run_list
@@ -51,7 +51,6 @@ module Ronin
51
51
  @cmd.run_command
52
52
  self.clean_up
53
53
  end
54
- module_function :run
55
54
 
56
55
  def create_solo_conf
57
56
  @solo_config = "file_cache_path '/var/tmp/ronin/chef-solo'\ncookbook_path '#{Ronin::Config[:artifact_path]}'\n"
@@ -60,7 +59,6 @@ module Ronin
60
59
  f.write(@solo_config)
61
60
  end
62
61
  end
63
- module_function :create_solo_conf
64
62
 
65
63
  def clean_up
66
64
  Ronin::Log.info("Cleaning up Chef run list at #{@run_list}.")
@@ -69,6 +67,6 @@ module Ronin
69
67
  Ronin::Log.info("Cleaning up Chef-Solo config at #{@solo_conf}.")
70
68
  File.delete(@solo_conf)
71
69
  end
72
- module_function :clean_up
70
+
73
71
  end
74
72
  end
data/lib/ronin/config.rb CHANGED
@@ -14,6 +14,7 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
  require 'mixlib/config'
17
+ require 'ronin/etcd'
17
18
 
18
19
  module Ronin
19
20
  class Config
@@ -27,19 +28,25 @@ module Ronin
27
28
  puts "No configuration file at #{config_file}, using defaults."
28
29
  end
29
30
 
30
- config_strict_mode true
31
- default :lock_file, '/var/tmp/ronin.lock'
32
- default :log_path, '/var/log/ronin'
33
- default :log_level, :info
34
- default :update_on_change, true
35
- default :interpreter, :puppet
36
- default :artifact_path, '/var/lib/ronin/artifacts'
37
- default :run_list_type, :yaml
38
- default :run_list_file, '/etc/ronin/artifacts.yaml'
39
- default :etcd_host, '127.0.0.1'
40
- default :etcd_port, 4001
31
+ config_strict_mode true
32
+ default :config_from_etcd, false
33
+ default :lock_file, '/var/tmp/ronin.lock'
34
+ default :log_path, '/var/log/ronin'
35
+ default :log_level, :info
36
+ default :update_on_change, true
37
+ default :interpreter, 'chef'
38
+ default :artifact_path, '/var/lib/ronin/artifacts'
39
+ default :run_list_type, 'yaml'
40
+ default :run_list_file, '/etc/ronin/artifacts.yaml'
41
+ default :etcd_host, '127.0.0.1'
42
+ default :etcd_port, 4001
43
+ default :etcd_conn_timeout, 5
44
+ default :etcd_read_timeout, 5
45
+ default :etcd_use_ssl, false
46
+ default :etcd_ssl_ca_cert, ''
47
+ default :etcd_ssl_cert, ''
48
+ default :etcd_ssl_key, ''
49
+ default :etcd_keys, [ 'common', 'env', 'node' ]
41
50
 
42
51
  end
43
- end
44
-
45
-
52
+ end
data/lib/ronin/etcd.rb CHANGED
@@ -20,25 +20,67 @@ require 'socket'
20
20
  require 'json'
21
21
 
22
22
  # Add test data thus.
23
- #curl -L http://127.0.0.1:4001/v2/keys/ronin/run_lists/localhost.localdomain -X PUT -d value='{
24
- # "run_list": [
23
+
24
+ #curl -L http://127.0.0.1:4001/v2/keys/ronin/config/common -X PUT -d value='{
25
+ # "artifacts": [
25
26
  # "https://github.com/opscode-cookbooks/motd-tail"
26
27
  # ]
27
28
  #}'
28
29
 
30
+ #curl -L http://127.0.0.1:4001/v2/keys/ronin/config/common -X PUT -d value='{
31
+ # "log_path": "/var/log/ronin",
32
+ # "interpreter": ":chef",
33
+ # "artifact_path": "/var/lib/ronin/artifacts",
34
+ # "update_on_change": "true",
35
+ # "run_list_type": ":etcd",
36
+ # "run_list_file": "/etc/ronin/artifacts.yaml"
37
+ #}'
38
+
29
39
  module Ronin
30
40
  module Etcd
31
- def get_run_list
41
+
42
+ def get_key(type, key)
32
43
  # Will add error handling... one day.
33
- @hostname = Socket.gethostname
34
- @path = "/v2/keys/ronin/run_lists/#{@hostname}"
35
- @http = Net::HTTP.new(Ronin::Config['etcd_host'], Ronin::Config['etcd_port'])
36
- @http.use_ssl = false
44
+ @path = "/v2/keys/ronin/#{type}/#{key}"
45
+ @http = Net::HTTP.new(Ronin::Config[:etcd_host], Ronin::Config[:etcd_port])
46
+ @http.read_timeout = Ronin::Config[:etcd_read_timeout]
47
+ @http.open_timeout = Ronin::Config[:etcd_conn_timeout]
48
+
49
+ if Ronin::Config[:etcd_use_ssl]
50
+ @http.use_ssl = true
51
+ unless Ronin::Config[:etcd_ssl_cert] = ''
52
+ @http.verify_mode = OpenSSL::SSL::VERIFY_PEER
53
+ store = OpenSSL::X509::Store.new
54
+ store.add_cert(OpenSSL::X509::Certificate.new(File.read(Ronin::Config[:etcd_ssl_ca_cert])))
55
+ @http.cert_store = store
56
+ @http.key = OpenSSL::PKey::RSA.new(File.read(Ronin::Config[:etcd_ssl_cert]))
57
+ @http.cert = OpenSSL::X509::Certificate.new(File.read(Ronin::Config[:etcd_ssl_key]))
58
+ end
59
+ else
60
+ @http.use_ssl = false
61
+ end
62
+
37
63
  @request = Net::HTTP::Get.new(@path)
38
64
  @result = @http.request(@request)
39
- @raw = JSON.parse(@result.body)['node']['value']
40
- return JSON.parse(@raw)['run_list']
65
+ return JSON.parse(@result.body)['node']['value']
66
+ end
67
+ module_function :get_key
68
+
69
+ def get_config
70
+ @hostname = Socket.gethostname
71
+ @common = JSON.parse(Ronin::Etcd.get_key('config', 'common'))
72
+ #@specific = JSON.parse(Ronin::Etcd.get_key('config', @hostname))
73
+ #return @common.merge(@specific)
74
+ end
75
+ module_function :get_config
76
+
77
+ def get_run_list
78
+ @hostname = Socket.gethostname
79
+ @common = JSON.parse(Ronin::Etcd.get_key('run_list', 'common'))['artifacts']
80
+ #@specific = JSON.parse(Ronin::Etcd.get_key('run_list', @hostname))['artifacts']
81
+ #return (@common+@specific).uniq
41
82
  end
42
83
  module_function :get_run_list
84
+
43
85
  end
44
86
  end
data/lib/ronin/puppet.rb CHANGED
@@ -18,10 +18,12 @@ require 'ronin/config'
18
18
  require 'ronin/log'
19
19
 
20
20
  module Ronin
21
- module Puppet
21
+ class Puppet
22
22
 
23
- @run_list = "#{Ronin::Config[:artifact_path]}/ronin.pp"
24
- @modules = Ronin::RunList.new.artifacts
23
+ def initialize
24
+ @run_list = "#{Ronin::Config[:artifact_path]}/ronin.pp"
25
+ @modules = Ronin::RunList.new.artifacts
26
+ end
25
27
 
26
28
  def create_run_list
27
29
  Ronin::Log.info("Building Puppet run list at #{@run_list}.")
@@ -32,7 +34,6 @@ module Ronin
32
34
  end
33
35
  end
34
36
  end
35
- module_function :create_run_list
36
37
 
37
38
  def run
38
39
  self.create_run_list
@@ -41,12 +42,11 @@ module Ronin
41
42
  @cmd.run_command
42
43
  self.clean_up
43
44
  end
44
- module_function :run
45
45
 
46
46
  def clean_up
47
47
  Ronin::Log.info("Cleaning up Puppet run list at #{@run_list}.")
48
48
  File.delete(@run_list)
49
49
  end
50
- module_function :clean_up
50
+
51
51
  end
52
52
  end
data/lib/ronin/ronin.rb CHANGED
@@ -23,6 +23,20 @@ require 'ronin/log'
23
23
  module Ronin
24
24
  def run
25
25
 
26
+ if Ronin::Config[:config_from_etcd] == true
27
+ Ronin::Log.info("Pulling configuration items from etcd (#{Ronin::Config[:etcd_host]}:#{Ronin::Config[:etcd_port]}).")
28
+
29
+ Ronin::Etcd.get_config.each do |k, v|
30
+ Ronin::Log.info("Setting #{k} to #{v}.")
31
+
32
+ if v.start_with?(':')
33
+ v = v[1..-1].to_sym
34
+ end
35
+
36
+ Ronin::Config["#{k}"] = v
37
+ end
38
+ end
39
+
26
40
  Ronin::Log.level = Ronin::Config[:log_level]
27
41
 
28
42
  if Ronin::Util.find_cmd("git").nil?
@@ -40,23 +54,27 @@ module Ronin
40
54
  if Ronin::Util.find_cmd("chef-solo").nil? and Ronin::Config[:interpreter] == :puppet
41
55
  abort("You need to have Chef-Solo installed to perform this command with Chef set as the interpreter.")
42
56
  else
43
- $CHEFSOLO_BIN = Ronin::Util.find_cmd("puppet")
57
+ $CHEFSOLO_BIN = Ronin::Util.find_cmd("chef-solo")
44
58
  end
45
59
 
46
60
  unless File.exists?(Ronin::Config[:lock_file])
47
61
  Ronin::Log.info("Dropping lock file. (#{Ronin::Config[:lock_file]})")
48
62
  File.new(Ronin::Config[:lock_file], "w")
49
63
 
50
- @r = Ronin::ArtifactRunner.new
51
- @changes = @r.download_and_report_changes
52
- @r.purge_unused
64
+ r = Ronin::ArtifactRunner.new
65
+ changes = r.download_and_report_changes
66
+ r.purge_unused
53
67
 
54
- if @changes
55
- if Ronin::Config[:interpreter] == :puppet
56
- Ronin::Puppet.run
57
- elsif Ronin::Config[:interpreter] == :chef
58
- Ronin::Chef.run
68
+ if changes
69
+ if Ronin::Config[:interpreter] == 'puppet'
70
+ runner = Ronin::Puppet.new
71
+ runner.run
72
+ elsif Ronin::Config[:interpreter] == 'chef'
73
+ runner = Ronin::Chef.new
74
+ runner.run
59
75
  end
76
+ else
77
+ Ronin::Log.info("No changes detected, not running interpretor.")
60
78
  end
61
79
  Ronin::Log.info("Deleting lock file and exiting. (#{Ronin::Config[:lock_file]})")
62
80
  File.delete(Ronin::Config[:lock_file])
@@ -23,24 +23,28 @@ module Ronin
23
23
 
24
24
  def initialize
25
25
  @run_list = {}
26
- if Ronin::Config[:run_list_type] == :yaml
27
- @artifacts_raw = YAML.load_file(Ronin::Config['run_list_file'])['artifacts']
28
- elsif Ronin::Config[:run_list_type] == :etcd
29
- @artifacts_raw = Ronin::Etcd.get_run_list
26
+
27
+ if Ronin::Config[:run_list_type] == 'etcd'
28
+ @artifacts_raw = Ronin::Etcd.get_run_list
29
+ else
30
+ @artifacts_raw = YAML.load_file(Ronin::Config['run_list_file'])['artifacts']
30
31
  end
31
32
 
32
- @artifacts_raw.each do |a|
33
- if a.include?(";")
34
- @repo = a.split(";")[0].sub(/(\/)+$/,'')
35
- @branch = a.split(";")[1]
36
- else
37
- @repo = a
38
- @branch = 'master'
39
- end
33
+ unless @artifacts_raw.nil?
40
34
 
41
- @name = @repo.split("/").last
35
+ @artifacts_raw.each do |a|
36
+ if a.include?(";")
37
+ @repo = a.split(";")[0].sub(/(\/)+$/,'')
38
+ @branch = a.split(";")[1]
39
+ else
40
+ @repo = a
41
+ @branch = 'master'
42
+ end
42
43
 
43
- @run_list[@name] = { :name => @name, :repo => @repo, :branch => @branch }
44
+ @name = @repo.split("/").last
45
+
46
+ @run_list[@name] = { :name => @name, :repo => @repo, :branch => @branch }
47
+ end
44
48
  end
45
49
 
46
50
  @run_list
data/lib/ronin/version.rb CHANGED
@@ -14,5 +14,5 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
  module Ronin
17
- VERSION = '0.0.12'
17
+ VERSION = '0.0.13'
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ronin-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Milford
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-28 00:00:00.000000000 Z
11
+ date: 2013-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yajl-ruby