spaux 0.0.9 → 0.0.10
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/Gemfile +0 -4
- data/lib/spaux/chef/key.rb +30 -23
- data/lib/spaux/chef/knife.rb +17 -19
- data/lib/spaux/chef/monkey_patches/knife.rb +7 -4
- data/lib/spaux/config.rb +1 -3
- data/lib/spaux/version.rb +1 -1
- data/spaux.gemspec +2 -1
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25b35334b5af6f97d6fdf422c36fba87ab5cf4c3
|
4
|
+
data.tar.gz: 5d3a2f29f7c8a7501df38f6233020db1506cc4aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c907c4687140a18a489c8ddd1152d6d792f49c0f25975a765bfe189e64fb201de41eb0d8ea1a4d488622217dbb93da7fd323108a5060c28d435b7867dcd3a100
|
7
|
+
data.tar.gz: 2fe8afcdcdc69b3b13d6e5943cf84768edb376be38dd33f44e901ca0c5a7c9ce3e7754b0f0e9e933f92ea7ff0971bff9c8bdf5cc21d97a851eef3ee8c288ce5c
|
data/Gemfile
CHANGED
@@ -2,7 +2,3 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in spaux.gemspec
|
4
4
|
gemspec
|
5
|
-
|
6
|
-
# https://github.com/opscode/chef-provisioning/issues/241
|
7
|
-
gem 'chef-provisioning', :github => 'nomadium/chef-provisioning',
|
8
|
-
:branch => 'feature/set-no-lazy-load-true-in-chef-config'
|
data/lib/spaux/chef/key.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'octokit'
|
2
2
|
require 'net/ssh'
|
3
|
+
require 'yaml'
|
4
|
+
require 'rbnacl'
|
3
5
|
|
4
6
|
class Spaux
|
5
7
|
class Chef
|
@@ -22,44 +24,49 @@ class Spaux
|
|
22
24
|
configuration = eval(::File.read(config_file))
|
23
25
|
end
|
24
26
|
def get_raw_key
|
25
|
-
|
26
|
-
|
27
|
+
msg_filename = 'message.yml'
|
28
|
+
msg_file = ::File.join(@work_dir, msg_filename)
|
27
29
|
|
28
|
-
if !::File.exists?(
|
29
|
-
|
30
|
+
if !::File.exists?(msg_file)
|
31
|
+
msg = retrieve_msg_from_gist(@config[:chef_private_key_gist_id])
|
30
32
|
begin
|
31
|
-
::
|
33
|
+
::IO.write(msg_file, msg)
|
32
34
|
rescue Exception => e
|
33
35
|
puts e.message
|
34
36
|
end
|
35
37
|
else
|
36
|
-
|
38
|
+
msg = ::IO.read(msg_file)
|
37
39
|
end
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
+
message = YAML.safe_load(msg)
|
42
|
+
key = decrypt_message(message, @config[:private_key])
|
41
43
|
end
|
42
44
|
|
43
|
-
def
|
45
|
+
def retrieve_msg_from_gist(gist_id)
|
44
46
|
client = Octokit::Client.new
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
47
|
+
gist = client.gist(gist_id)
|
48
|
+
filename = gist[:files].fields.first
|
49
|
+
resource = gist[:files][filename]
|
50
|
+
data = resource[:content]
|
49
51
|
end
|
50
52
|
|
51
|
-
def
|
53
|
+
def decrypt_message(message, rsa_key_filename)
|
52
54
|
rsa_key = Net::SSH::KeyFactory.load_private_key(rsa_key_filename)
|
53
|
-
|
54
|
-
|
55
|
-
data = Base64.decode64(key_data[:data])
|
55
|
+
recipients = message['recipients']
|
56
|
+
box_key = nil
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
58
|
+
recipients.each do |r|
|
59
|
+
begin
|
60
|
+
box_key = rsa_key.private_decrypt(Base64.decode64(r))
|
61
|
+
rescue OpenSSL::PKey::RSAError => e
|
62
|
+
next if e.message.eql?('padding check failed')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
raise ArgumentError, 'Unable to decrypt message!' if box_key.nil?
|
67
|
+
|
68
|
+
box = ::RbNaCl::SimpleBox.from_secret_key(box_key)
|
69
|
+
clear_message = box.decrypt(Base64.decode64(message['data']))
|
63
70
|
end
|
64
71
|
end
|
65
72
|
end
|
data/lib/spaux/chef/knife.rb
CHANGED
@@ -6,32 +6,21 @@ class Spaux
|
|
6
6
|
class Chef
|
7
7
|
class Knife < ::Chef::Application::Knife
|
8
8
|
|
9
|
-
DEFAULT_KNIFE_CONFIG = {
|
10
|
-
config_file: {
|
11
|
-
flags: %w(--config -c),
|
12
|
-
value: ::File.join('@work_dir', 'knife.rb')
|
13
|
-
}
|
14
|
-
}
|
15
|
-
|
16
9
|
attr_accessor :work_dir
|
17
10
|
attr_accessor :args
|
18
11
|
|
19
12
|
def initialize(work_dir, args)
|
20
13
|
@work_dir = work_dir
|
21
14
|
@args = args
|
15
|
+
@extra_options = {}
|
16
|
+
@extra_options[:config_file] = ::File.join(@work_dir, 'knife.rb')
|
22
17
|
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
cf_flags = DEFAULT_KNIFE_CONFIG[:config_file][:flags]
|
28
|
-
unless @args.include?(cf_flags.first) || @args.include?(cf_flags.last)
|
29
|
-
@args << DEFAULT_KNIFE_CONFIG[:config_file][:flags].first
|
30
|
-
@args << DEFAULT_KNIFE_CONFIG[:config_file][:value]
|
31
|
-
end
|
18
|
+
raw_key = Spaux::Chef::Key.new.raw_key
|
19
|
+
redefine_chef_http_authenticator raw_key
|
32
20
|
|
33
|
-
|
34
|
-
|
21
|
+
# to avoid warnings about missing configuration
|
22
|
+
@args << '--config' << '/dev/null'
|
23
|
+
FileUtils.touch @extra_options[:config_file]
|
35
24
|
end
|
36
25
|
|
37
26
|
def run
|
@@ -42,11 +31,20 @@ class Spaux
|
|
42
31
|
knife = ::Chef::Application::Knife.new
|
43
32
|
options = knife.options
|
44
33
|
begin
|
45
|
-
::Chef::Knife.run(@args, options)
|
34
|
+
::Chef::Knife.run(@args, options, @extra_options)
|
46
35
|
rescue SystemExit => e
|
47
36
|
# just ignore the exit of knife tool
|
48
37
|
end
|
49
38
|
end
|
39
|
+
|
40
|
+
private
|
41
|
+
def redefine_chef_http_authenticator(key)
|
42
|
+
::Chef::HTTP::Authenticator.send(:define_method,
|
43
|
+
'load_signing_key') do |signing_key_filename, raw_key|
|
44
|
+
@raw_key = key
|
45
|
+
@key = OpenSSL::PKey::RSA.new(@raw_key)
|
46
|
+
end
|
47
|
+
end
|
50
48
|
end
|
51
49
|
end
|
52
50
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
class Chef
|
2
2
|
class Knife
|
3
|
-
def configure_spaux
|
4
|
-
|
3
|
+
def configure_spaux(extra_config)
|
4
|
+
config_file = extra_config[:config_file]
|
5
|
+
default_config = Spaux::default_chef_config(:knife)
|
6
|
+
Chef::Config.merge! default_config.merge(extra_config)
|
7
|
+
Chef::Config.from_file config_file
|
5
8
|
end
|
6
|
-
def self.run(args, options={})
|
9
|
+
def self.run(args, options={}, extra_settings={})
|
7
10
|
# Fallback debug logging. Normally the logger isn't configured until we
|
8
11
|
# read the config, but this means any logging that happens before the
|
9
12
|
# config file is read may be lost. If the KNIFE_DEBUG variable is set, we
|
@@ -19,7 +22,7 @@ class Chef
|
|
19
22
|
subcommand_class.options = options.merge!(subcommand_class.options)
|
20
23
|
subcommand_class.load_deps
|
21
24
|
instance = subcommand_class.new(args)
|
22
|
-
instance.configure_spaux
|
25
|
+
instance.configure_spaux(extra_settings)
|
23
26
|
instance.configure_chef
|
24
27
|
instance.run_with_pretty_exceptions
|
25
28
|
end
|
data/lib/spaux/config.rb
CHANGED
data/lib/spaux/version.rb
CHANGED
data/spaux.gemspec
CHANGED
@@ -21,9 +21,10 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "chef", '>= 12.0.0.rc.0'
|
22
22
|
spec.add_dependency "octokit", '~> 3.5.2'
|
23
23
|
spec.add_dependency "net-ssh", '~> 2.9.1'
|
24
|
-
spec.add_dependency 'chef-provisioning', '~> 0.16
|
24
|
+
spec.add_dependency 'chef-provisioning', '~> 0.16'
|
25
25
|
spec.add_dependency 'chef-provisioning-fog', '~> 0.11'
|
26
26
|
spec.add_dependency 'chef-vault', '~> 2.3.0'
|
27
|
+
spec.add_dependency 'rbnacl', '~> 3.1.2'
|
27
28
|
spec.add_development_dependency "bundler", "~> 1.7"
|
28
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
29
30
|
spec.add_development_dependency "rspec", '~> 3.1.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spaux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Landaeta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.16
|
75
|
+
version: '0.16'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.16
|
82
|
+
version: '0.16'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: chef-provisioning-fog
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 2.3.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rbnacl
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 3.1.2
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 3.1.2
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: bundler
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -219,7 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
219
233
|
version: '0'
|
220
234
|
requirements: []
|
221
235
|
rubyforge_project:
|
222
|
-
rubygems_version: 2.
|
236
|
+
rubygems_version: 2.4.3
|
223
237
|
signing_key:
|
224
238
|
specification_version: 4
|
225
239
|
summary: Spaux automation tasks
|