ronin-wrapper 0.0.9 → 0.0.11
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 +4 -4
- data/bin/ronin +2 -1
- data/lib/ronin/chef.rb +1 -1
- data/lib/ronin/config.rb +6 -2
- data/lib/ronin/etcd.rb +44 -0
- data/lib/ronin/git.rb +1 -1
- data/lib/ronin/puppet.rb +1 -1
- data/lib/ronin/ronin.rb +36 -9
- data/lib/ronin/run_list.rb +13 -10
- data/lib/ronin/util.rb +30 -0
- data/lib/ronin/version.rb +1 -1
- data/lib/ronin.rb +3 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11143e25ba860d375511daa655d3bce4518e78b4
|
4
|
+
data.tar.gz: 3bd2050c5d6cd7250518d2de9ddb542fc08a26fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b280ea075de35614afea3a9cfd4b3b516794bc43660abb34fa86312cf251c6db736e8ce08c90c3ab84f6ca4c8c2bb6d2629b1f22012a44be37a41799d275e71d
|
7
|
+
data.tar.gz: 01a7f99f884aabff11e0c181bd244b9cc080b6dce87a3bbed926f17e0fe92dc6af448dfc4878071cff758475d359105607f73740ab8ce17c2686eb7b2464e684
|
data/bin/ronin
CHANGED
@@ -14,11 +14,12 @@
|
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
|
-
require 'ronin'
|
18
17
|
|
19
18
|
unless Process.uid == 0
|
20
19
|
puts 'You need to be root to perform this command.'
|
21
20
|
exit 1
|
22
21
|
end
|
23
22
|
|
23
|
+
require 'ronin'
|
24
|
+
|
24
25
|
Ronin.run
|
data/lib/ronin/chef.rb
CHANGED
@@ -47,7 +47,7 @@ module Ronin
|
|
47
47
|
self.create_run_list
|
48
48
|
self.create_solo_conf
|
49
49
|
Ronin::Log.info("Running Chef, logging to #{Ronin::Config[:log_path]}/ronin-chef.log.")
|
50
|
-
@cmd = Mixlib::ShellOut.new("
|
50
|
+
@cmd = Mixlib::ShellOut.new("#{$CHEFSOLO_BIN} --logfile #{Ronin::Config[:log_path]}/ronin-chef.log --config #{@solo_conf} --json-attributes #{@run_list}")
|
51
51
|
@cmd.run_command
|
52
52
|
self.clean_up
|
53
53
|
end
|
data/lib/ronin/config.rb
CHANGED
@@ -28,13 +28,17 @@ module Ronin
|
|
28
28
|
end
|
29
29
|
|
30
30
|
config_strict_mode true
|
31
|
+
default :lock_file, '/var/tmp/ronin.lock'
|
31
32
|
default :log_path, '/var/log/ronin'
|
32
33
|
default :log_level, :info
|
33
34
|
default :update_on_change, true
|
34
|
-
default :run_list_type, :yaml
|
35
35
|
default :interpreter, :puppet
|
36
|
-
default :run_list_file, '/etc/ronin/artifacts.yaml'
|
37
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
|
41
|
+
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
data/lib/ronin/etcd.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# Author:: Nathan Milford (<nathan@milford.io>)
|
2
|
+
# Copyright:: Copyright (c) 2013 Nathan Milford
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
require 'mixlib/config'
|
17
|
+
require 'net/https'
|
18
|
+
require 'net/http'
|
19
|
+
require 'socket'
|
20
|
+
require 'json'
|
21
|
+
|
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": [
|
25
|
+
# "https://github.com/opscode-cookbooks/motd-tail"
|
26
|
+
# ]
|
27
|
+
#}'
|
28
|
+
|
29
|
+
module Ronin
|
30
|
+
module Etcd
|
31
|
+
def get_run_list
|
32
|
+
# 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
|
37
|
+
@request = Net::HTTP::Get.new(@path)
|
38
|
+
@result = @http.request(@request)
|
39
|
+
@raw = JSON.parse(@result.body)['node']['value']
|
40
|
+
return JSON.parse(@raw)['run_list']
|
41
|
+
end
|
42
|
+
module_function :get_run_list
|
43
|
+
end
|
44
|
+
end
|
data/lib/ronin/git.rb
CHANGED
@@ -19,7 +19,7 @@ require 'ronin/config'
|
|
19
19
|
module Ronin
|
20
20
|
module Git
|
21
21
|
def branch(artifact)
|
22
|
-
@cmd = Mixlib::ShellOut.new("
|
22
|
+
@cmd = Mixlib::ShellOut.new("#{$GIT_BIN} --git-dir=#{Ronin::Config[:artifact_path]}/#{artifact}/.git --work-tree=#{Ronin::Config[:artifact_path]}/#{artifact}/ branch")
|
23
23
|
@cmd.run_command
|
24
24
|
@branch = @cmd.stdout.chomp.split(' ')[1]
|
25
25
|
@branch
|
data/lib/ronin/puppet.rb
CHANGED
@@ -37,7 +37,7 @@ module Ronin
|
|
37
37
|
def run
|
38
38
|
self.create_run_list
|
39
39
|
Ronin::Log.info("Running Puppet, logging to #{Ronin::Config[:log_path]}/ronin-puppet.log.")
|
40
|
-
@cmd = Mixlib::ShellOut.new("
|
40
|
+
@cmd = Mixlib::ShellOut.new("#{$PUPPET_BIN} apply --verbose --ordering manifest --logdest #{Ronin::Config[:log_path]}/ronin-puppet.log --modulepath #{Ronin::Config[:artifact_path]} #{@run_list}")
|
41
41
|
@cmd.run_command
|
42
42
|
self.clean_up
|
43
43
|
end
|
data/lib/ronin/ronin.rb
CHANGED
@@ -17,24 +17,51 @@ $LOAD_PATH << "."
|
|
17
17
|
require 'ronin/artifact_runner'
|
18
18
|
require 'ronin/run_list'
|
19
19
|
require 'ronin/config'
|
20
|
+
require 'ronin/util'
|
21
|
+
require 'ronin/log'
|
20
22
|
|
21
23
|
module Ronin
|
22
24
|
def run
|
23
25
|
|
24
26
|
Ronin::Log.level = Ronin::Config[:log_level]
|
25
27
|
|
26
|
-
|
28
|
+
if Ronin::Util.find_cmd("git").nil?
|
29
|
+
abort("You need to have git installed to perform this command.")
|
30
|
+
else
|
31
|
+
$GIT_BIN = Ronin::Util.find_cmd("git")
|
32
|
+
end
|
33
|
+
|
34
|
+
if Ronin::Util.find_cmd("puppet").nil? and Ronin::Config[:interpreter] == :puppet
|
35
|
+
abort("You need to have Puppet installed to perform this command with Puppet set as the interpreter.")
|
36
|
+
else
|
37
|
+
$PUPPET_BIN = Ronin::Util.find_cmd("puppet")
|
38
|
+
end
|
39
|
+
|
40
|
+
if Ronin::Util.find_cmd("chef-solo").nil? and Ronin::Config[:interpreter] == :puppet
|
41
|
+
abort("You need to have Chef-Solo installed to perform this command with Chef set as the interpreter.")
|
42
|
+
else
|
43
|
+
$CHEFSOLO_BIN = Ronin::Util.find_cmd("puppet")
|
44
|
+
end
|
45
|
+
|
46
|
+
unless File.exists?(Ronin::Config[:lock_file])
|
47
|
+
Ronin::Log.info("Dropping lock file. (#{Ronin::Config[:lock_file]})")
|
48
|
+
File.new(Ronin::Config[:lock_file], "w")
|
27
49
|
|
28
|
-
|
29
|
-
|
30
|
-
|
50
|
+
@r = Ronin::ArtifactRunner.new
|
51
|
+
@changes = @r.download_and_report_changes
|
52
|
+
@r.purge_unused
|
31
53
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
54
|
+
if @changes
|
55
|
+
if Ronin::Config[:interpreter] == :puppet
|
56
|
+
Ronin::Puppet.run
|
57
|
+
elsif Ronin::Config[:interpreter] == :chef
|
58
|
+
Ronin::Chef.run
|
59
|
+
end
|
37
60
|
end
|
61
|
+
Ronin::Log.info("Deleting lock file and exiting. (#{Ronin::Config[:lock_file]})")
|
62
|
+
File.delete(Ronin::Config[:lock_file])
|
63
|
+
else
|
64
|
+
abort("Lock file (#{Ronin::Config[:lock_file]}) exists! Check to see if this Ronin is already running. Exiting.")
|
38
65
|
end
|
39
66
|
end
|
40
67
|
module_function :run
|
data/lib/ronin/run_list.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
|
require 'yaml'
|
18
19
|
|
19
20
|
module Ronin
|
@@ -22,16 +23,18 @@ module Ronin
|
|
22
23
|
|
23
24
|
def initialize
|
24
25
|
@run_list = {}
|
25
|
-
if Ronin::Config[
|
26
|
-
@
|
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
|
27
30
|
end
|
28
31
|
|
29
|
-
@
|
30
|
-
if
|
31
|
-
@repo =
|
32
|
-
@branch =
|
32
|
+
@artifacts_raw.each do |a|
|
33
|
+
if a.include?(";")
|
34
|
+
@repo = a.split(";")[0].sub(/(\/)+$/,'')
|
35
|
+
@branch = a.split(";")[1]
|
33
36
|
else
|
34
|
-
@repo =
|
37
|
+
@repo = a
|
35
38
|
@branch = 'master'
|
36
39
|
end
|
37
40
|
|
@@ -44,9 +47,9 @@ module Ronin
|
|
44
47
|
end
|
45
48
|
|
46
49
|
def artifacts
|
47
|
-
@
|
48
|
-
@run_list.each { |k,v| @
|
49
|
-
@
|
50
|
+
@arts = []
|
51
|
+
@run_list.each { |k,v| @arts << k }
|
52
|
+
@arts
|
50
53
|
end
|
51
54
|
|
52
55
|
def items
|
data/lib/ronin/util.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Author:: Nathan Milford (<nathan@milford.io>)
|
2
|
+
# Copyright:: Copyright (c) 2013 Nathan Milford
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
module Ronin
|
18
|
+
module Util
|
19
|
+
|
20
|
+
def find_cmd(cmd)
|
21
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
22
|
+
cmd_path = File.join(path, cmd)
|
23
|
+
return cmd_path if File.executable? cmd_path
|
24
|
+
end
|
25
|
+
return nil
|
26
|
+
end
|
27
|
+
module_function :find_cmd
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
data/lib/ronin/version.rb
CHANGED
data/lib/ronin.rb
CHANGED
@@ -13,12 +13,14 @@
|
|
13
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
|
+
require 'ronin/ronin'
|
16
17
|
require 'ronin/config'
|
17
18
|
require 'ronin/artifact_runner'
|
18
19
|
require 'ronin/run_list'
|
19
20
|
require 'ronin/version'
|
20
21
|
require 'ronin/puppet'
|
21
|
-
require 'ronin/ronin'
|
22
22
|
require 'ronin/chef'
|
23
23
|
require 'ronin/git'
|
24
24
|
require 'ronin/log'
|
25
|
+
require 'ronin/etcd'
|
26
|
+
|
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.
|
4
|
+
version: 0.0.11
|
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-
|
11
|
+
date: 2013-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yajl-ruby
|
@@ -91,11 +91,13 @@ extra_rdoc_files:
|
|
91
91
|
files:
|
92
92
|
- lib/ronin.rb
|
93
93
|
- lib/ronin/ronin.rb
|
94
|
+
- lib/ronin/util.rb
|
94
95
|
- lib/ronin/config.rb
|
95
96
|
- lib/ronin/puppet.rb
|
96
97
|
- lib/ronin/chef.rb
|
97
98
|
- lib/ronin/git.rb
|
98
99
|
- lib/ronin/log.rb
|
100
|
+
- lib/ronin/etcd.rb
|
99
101
|
- lib/ronin/artifact_runner.rb
|
100
102
|
- lib/ronin/run_list.rb
|
101
103
|
- lib/ronin/version.rb
|