cheffish 16.0.12 → 16.0.26

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
  SHA256:
3
- metadata.gz: 726a0ded80830e71581d351ec749ff293d81949a19da0402da101bcc3544a826
4
- data.tar.gz: 998aec1220e1a3c5a1d4b23d124d913f8bc1773657a77de5981965e04c59e4d1
3
+ metadata.gz: 91e2132a23578c15fe42a8603cf3cd4d72eee69a671f853c273a5a61788f9a31
4
+ data.tar.gz: 75a4e43250b1b53eb3fd10aee2af0dd5e62e3ee5a6bcede10792691d77080d7c
5
5
  SHA512:
6
- metadata.gz: debed5adc595ef207988ad3d63249803ea2dfca46848f1e93e62fc80b5abd22efaa299077e0594a9c93555ba385da8fd5a2dda9c8688f6ff4b6ba96c725924b6
7
- data.tar.gz: 7ba6a0b11beccce010665ef0239634b4549b2d19b2d6569d179ed2cbcf894bacfae3e5a45f44a70865971bd2bf183ade6a9b54e0dc3cc470e76c96bf6abd43b5
6
+ metadata.gz: 93706f7357daca264cbdd1ca1a6b3d2912597968e68f58ae376fc71284a3d7f4c92bbf91d31a9fdd3450d317e1961ea91372c3f348a77465a27d8f73a40d45ab
7
+ data.tar.gz: 3e47fb9564110ced0731b2c19f00af626482fc9fc4daa6be1e7c056a583c22f43a6aae8a64489899ffd7ceef10c17f7d12b942240cf65a8331fd34ee48ec020f
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source "https://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  group :development do
6
- gem "chefstyle", "1.4.3"
6
+ gem "chefstyle", "1.7.4"
7
7
  gem "rake"
8
8
  gem "rspec", "~> 3.0"
9
9
  end
@@ -196,17 +196,15 @@ class Chef
196
196
  end
197
197
 
198
198
  def new_secret
199
- @new_secret ||= begin
200
- if new_resource.secret
201
- new_resource.secret
202
- elsif new_resource.secret_path
203
- Chef::EncryptedDataBagItem.load_secret(new_resource.secret_path)
204
- elsif new_resource.encrypt.nil?
205
- current_resource.secret
206
- else
207
- raise "Data bag item #{new_resource.name} has encryption on but no secret or secret_path is specified"
208
- end
209
- end
199
+ @new_secret ||= if new_resource.secret
200
+ new_resource.secret
201
+ elsif new_resource.secret_path
202
+ Chef::EncryptedDataBagItem.load_secret(new_resource.secret_path)
203
+ elsif new_resource.encrypt.nil?
204
+ current_resource.secret
205
+ else
206
+ raise "Data bag item #{new_resource.name} has encryption on but no secret or secret_path is specified"
207
+ end
210
208
  end
211
209
 
212
210
  def decrypt(json, secret)
@@ -238,15 +236,13 @@ class Chef
238
236
 
239
237
  # Get the current json decrypted, for comparison purposes
240
238
  def current_decrypted
241
- @current_decrypted ||= begin
242
- if current_resource.secret
243
- decrypt(current_resource.raw_data || { "id" => new_resource.id }, current_resource.secret)
244
- elsif current_resource.encrypt
245
- raise "Could not decrypt current data bag item #{current_resource.name}"
246
- else
247
- current_resource.raw_data || { "id" => new_resource.id }
248
- end
249
- end
239
+ @current_decrypted ||= if current_resource.secret
240
+ decrypt(current_resource.raw_data || { "id" => new_resource.id }, current_resource.secret)
241
+ elsif current_resource.encrypt
242
+ raise "Could not decrypt current data bag item #{current_resource.name}"
243
+ else
244
+ current_resource.raw_data || { "id" => new_resource.id }
245
+ end
250
246
  end
251
247
 
252
248
  # Figure out the differences between new and current
@@ -78,7 +78,7 @@ class Chef
78
78
  desired_output = encode_private_key(new_source_key)
79
79
  if current_resource.path == :none || desired_output != IO.read(new_path)
80
80
  converge_by "reformat key at #{new_resource.source_key_path} to #{new_resource.format} private key #{new_path} (#{new_resource.pass_phrase ? ", #{new_resource.cipher} password" : ""})" do
81
- IO.write(new_path, desired_output)
81
+ IO.binwrite(new_path, desired_output)
82
82
  end
83
83
  end
84
84
 
@@ -137,7 +137,7 @@ class Chef
137
137
  converge_by "change format of #{new_resource.type} private key #{new_path} from #{current_resource.format} to #{new_resource.format}" do
138
138
  write_private_key(current_private_key)
139
139
  end
140
- elsif (@current_file_mode & 0077) != 0
140
+ elsif RUBY_PLATFORM !~ /mswin|mingw32|windows/ && (@current_file_mode & 0077) != 0
141
141
  new_mode = @current_file_mode & 07700
142
142
  converge_by "change mode of private key #{new_path} to #{new_mode.to_s(8)}" do
143
143
  ::File.chmod(new_mode, new_path)
@@ -171,25 +171,23 @@ class Chef
171
171
  end
172
172
 
173
173
  def write_private_key(key)
174
- ::File.open(new_path, "w") do |file|
174
+ ::File.open(new_path, "wb") do |file|
175
175
  file.chmod(0600)
176
176
  file.write(encode_private_key(key))
177
177
  end
178
178
  end
179
179
 
180
180
  def new_source_key
181
- @new_source_key ||= begin
182
- if new_resource.source_key.is_a?(String)
183
- source_key, _source_key_format = Cheffish::KeyFormatter.decode(new_resource.source_key, new_resource.source_key_pass_phrase)
184
- source_key
185
- elsif new_resource.source_key
186
- new_resource.source_key
187
- elsif new_resource.source_key_path
188
- source_key, _source_key_format = Cheffish::KeyFormatter.decode(IO.read(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
189
- source_key
190
- else
191
- nil
192
- end
181
+ @new_source_key ||= if new_resource.source_key.is_a?(String)
182
+ source_key, _source_key_format = Cheffish::KeyFormatter.decode(new_resource.source_key, new_resource.source_key_pass_phrase)
183
+ source_key
184
+ elsif new_resource.source_key
185
+ new_resource.source_key
186
+ elsif new_resource.source_key_path
187
+ source_key, _source_key_format = Cheffish::KeyFormatter.decode(IO.read(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
188
+ source_key
189
+ else
190
+ nil
193
191
  end
194
192
  end
195
193
 
@@ -31,7 +31,7 @@ class Chef
31
31
  desired_output = encode_public_key(new_source_key)
32
32
  if Array(current_resource.action) == [ :delete ] || desired_output != IO.read(new_resource.path)
33
33
  converge_by "write #{new_resource.format} public key #{new_resource.path} from #{new_source_key_publicity} key #{new_resource.source_key_path}" do
34
- IO.write(new_resource.path, desired_output)
34
+ IO.binwrite(new_resource.path, desired_output)
35
35
  # TODO permissions on file?
36
36
  end
37
37
  end
@@ -62,7 +62,7 @@ class Chef
62
62
  elsif new_resource.source_key
63
63
  source_key = new_resource.source_key
64
64
  elsif new_resource.source_key_path
65
- source_key, _source_key_format = Cheffish::KeyFormatter.decode(IO.read(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
65
+ source_key, _source_key_format = Cheffish::KeyFormatter.decode(IO.binread(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
66
66
  else
67
67
  return nil
68
68
  end
data/lib/cheffish.rb CHANGED
@@ -32,11 +32,13 @@ module Cheffish
32
32
  end
33
33
 
34
34
  def self.load_chef_config(chef_config = Chef::Config)
35
- if ::Gem::Version.new(::Chef::VERSION) >= ::Gem::Version.new("12.0.0")
36
- chef_config.config_file = ::Chef::Knife.chef_config_dir
37
- else
38
- chef_config.config_file = ::Chef::Knife.locate_config_file
39
- end
35
+ chef_config.config_file = if ::Gem::Version.new(::Chef::VERSION) >= ::Gem::Version.new("12.0.0")
36
+ require "chef/workstation_config_loader"
37
+ Chef::WorkstationConfigLoader.new(nil, Chef::Log).chef_config_dir
38
+ else
39
+ require "chef/knife"
40
+ Chef::Knife.locate_config_file
41
+ end
40
42
  config_fetcher = Chef::ConfigFetcher.new(chef_config.config_file, chef_config.config_file_jail)
41
43
  if chef_config.config_file.nil?
42
44
  Chef::Log.warn("No config file found or specified on command line, using command line options.")
@@ -120,11 +122,17 @@ module Cheffish
120
122
  end
121
123
 
122
124
  # Include all recipe objects so require 'cheffish' brings in the whole recipe DSL
123
-
124
125
  require "chef/run_list/run_list_item"
125
126
  require_relative "cheffish/basic_chef_client"
126
127
  require_relative "cheffish/server_api"
127
- require "chef/knife"
128
+
129
+ # Starting with the version below, knife is no longer in the chef gem and is
130
+ # not available during a chef-client run. We'll keep it here for older versions
131
+ # to retain backward-compatibility.
132
+ if ::Gem::Version.new(::Chef::VERSION) < ::Gem::Version.new("17.0.178")
133
+ require "chef/knife"
134
+ end
135
+
128
136
  require "chef/config_fetcher"
129
137
  require "chef/log"
130
138
  require "chef/application"
@@ -74,38 +74,36 @@ module Cheffish
74
74
  end
75
75
 
76
76
  def new_public_key
77
- @new_public_key ||= begin
78
- if new_resource.source_key
79
- if new_resource.source_key.is_a?(String)
80
- key, _key_format = Cheffish::KeyFormatter.decode(new_resource.source_key)
77
+ @new_public_key ||= if new_resource.source_key
78
+ if new_resource.source_key.is_a?(String)
79
+ key, _key_format = Cheffish::KeyFormatter.decode(new_resource.source_key)
81
80
 
82
- if key.private?
83
- key.public_key
84
- else
85
- key
86
- end
87
- elsif new_resource.source_key.private?
88
- new_resource.source_key.public_key
89
- else
90
- new_resource.source_key
91
- end
92
- elsif new_resource.source_key_path
93
- source_key_path = new_resource.source_key_path
94
- if Pathname.new(source_key_path).relative?
95
- source_key_str, source_key_path = Cheffish.get_private_key_with_path(source_key_path, run_context.config)
96
- else
97
- source_key_str = IO.read(source_key_path)
98
- end
99
- source_key, _source_key_format = Cheffish::KeyFormatter.decode(source_key_str, new_resource.source_key_pass_phrase, source_key_path)
100
- if source_key.private?
101
- source_key.public_key
102
- else
103
- source_key
104
- end
105
- else
106
- nil
107
- end
108
- end
81
+ if key.private?
82
+ key.public_key
83
+ else
84
+ key
85
+ end
86
+ elsif new_resource.source_key.private?
87
+ new_resource.source_key.public_key
88
+ else
89
+ new_resource.source_key
90
+ end
91
+ elsif new_resource.source_key_path
92
+ source_key_path = new_resource.source_key_path
93
+ if Pathname.new(source_key_path).relative?
94
+ source_key_str, source_key_path = Cheffish.get_private_key_with_path(source_key_path, run_context.config)
95
+ else
96
+ source_key_str = IO.read(source_key_path)
97
+ end
98
+ source_key, _source_key_format = Cheffish::KeyFormatter.decode(source_key_str, new_resource.source_key_pass_phrase, source_key_path)
99
+ if source_key.private?
100
+ source_key.public_key
101
+ else
102
+ source_key
103
+ end
104
+ else
105
+ nil
106
+ end
109
107
  end
110
108
 
111
109
  def augment_new_json(json)
@@ -62,13 +62,11 @@ class Chef
62
62
  string_key = "#{type}_path"
63
63
  symbol_key = "#{type}_path".to_sym
64
64
 
65
- options[symbol_key] ||= begin
66
- if options[:chef_repo_path].is_a?(String)
67
- Chef::Util::PathHelper.join(options[:chef_repo_path], "#{type}s")
68
- else
69
- options[:chef_repo_path].map { |path| Chef::Util::PathHelper.join(path, "#{type}s") }
70
- end
71
- end
65
+ options[symbol_key] ||= if options[:chef_repo_path].is_a?(String)
66
+ Chef::Util::PathHelper.join(options[:chef_repo_path], "#{type}s")
67
+ else
68
+ options[:chef_repo_path].map { |path| Chef::Util::PathHelper.join(path, "#{type}s") }
69
+ end
72
70
 
73
71
  # Copy over to string keys for things that use string keys (ChefFS)...
74
72
  # TODO: Fix ChefFS to take symbols or use something that is insensitive to the difference
@@ -1,3 +1,3 @@
1
1
  module Cheffish
2
- VERSION = "16.0.12".freeze
2
+ VERSION = "16.0.26".freeze
3
3
  end
@@ -224,7 +224,7 @@ describe Chef::Resource::PrivateKey do
224
224
  end
225
225
  end.to have_updated "private_key[#{repo_path}/blah]", :create
226
226
  expect(IO.read("#{repo_path}/blah")).not_to start_with("-----BEGIN")
227
- expect(OpenSSL::PKey.read(IO.read("#{repo_path}/blah"))).to be_kind_of(OpenSSL::PKey::RSA)
227
+ expect(OpenSSL::PKey.read(IO.binread("#{repo_path}/blah"))).to be_kind_of(OpenSSL::PKey::RSA)
228
228
  end
229
229
  end
230
230
 
@@ -4,7 +4,11 @@ require "cheffish/rspec/chef_run_support"
4
4
  describe "Cheffish::RSpec::ChefRunSupport" do
5
5
  extend Cheffish::RSpec::ChefRunSupport
6
6
 
7
- let(:temp_file) { Tempfile.new("test") }
7
+ let(:temp_file) do
8
+ f = Tempfile.new("test")
9
+ f.close
10
+ f
11
+ end
8
12
 
9
13
  context "#recipe" do
10
14
  it "recipe { file ... } updates the file" do
@@ -1,10 +1,10 @@
1
1
  RSpec::Matchers.define :be_public_key_for do |private_key, pass_phrase|
2
2
  match do |public_key|
3
3
  if public_key.is_a?(String)
4
- public_key, _public_key_format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(public_key)), pass_phrase, public_key)
4
+ public_key, _public_key_format = Cheffish::KeyFormatter.decode(IO.binread(File.expand_path(public_key)), pass_phrase, public_key)
5
5
  end
6
6
  if private_key.is_a?(String)
7
- private_key, _private_key_format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(private_key)), pass_phrase, private_key)
7
+ private_key, _private_key_format = Cheffish::KeyFormatter.decode(IO.binread(File.expand_path(private_key)), pass_phrase, private_key)
8
8
  end
9
9
 
10
10
  encrypted = public_key.public_encrypt("hi there")
@@ -15,10 +15,10 @@ end
15
15
  RSpec::Matchers.define :match_private_key do |expected, pass_phrase|
16
16
  match do |actual|
17
17
  if expected.is_a?(String)
18
- expected, _format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(expected)), pass_phrase, expected)
18
+ expected, _format = Cheffish::KeyFormatter.decode(IO.binread(File.expand_path(expected)), pass_phrase, expected)
19
19
  end
20
20
  if actual.is_a?(String)
21
- actual, _format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(actual)), pass_phrase, actual)
21
+ actual, _format = Cheffish::KeyFormatter.decode(IO.binread(File.expand_path(actual)), pass_phrase, actual)
22
22
  end
23
23
 
24
24
  encrypted = actual.public_encrypt("hi there")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheffish
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.0.12
4
+ version: 16.0.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-30 00:00:00.000000000 Z
11
+ date: 2021-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-zero
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  requirements: []
130
- rubygems_version: 3.0.3
130
+ rubygems_version: 3.1.4
131
131
  signing_key:
132
132
  specification_version: 4
133
133
  summary: A set of Chef resources for configuring Chef Infra.