ronin-wrapper 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
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