chef 16.2.44 → 16.2.50
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/chef/knife/config_use_profile.rb +15 -5
- data/lib/chef/resource/alternatives.rb +1 -1
- data/lib/chef/resource/chef_gem.rb +57 -21
- data/lib/chef/resource/dmg_package.rb +1 -1
- data/lib/chef/resource/gem_package.rb +35 -2
- data/lib/chef/resource/ssh_known_hosts_entry.rb +15 -0
- data/lib/chef/resource/sudo.rb +29 -2
- data/lib/chef/resource/swap_file.rb +17 -0
- data/lib/chef/resource/timezone.rb +15 -0
- data/lib/chef/resource/windows_security_policy.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/spec/integration/knife/config_use_profile_spec.rb +55 -2
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55bc589eea6fe895e338847f884c9595eafb6029a8ee84dbfbcaee2aafa75ad9
|
4
|
+
data.tar.gz: ad843219ffacb362cc10c5634208aefa867c32f8643e80c6097d83f0187ea998
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aba367537baf2d72aac0fb73cc897e6441935a1a474370328e2045280e4f4ca20bf72a9e55b28eb92aaa37d648430e0c021b4e750080645d7693500d195e37af
|
7
|
+
data.tar.gz: 7f4a4e6e9747156ff93f8e8f0aa103a36f25d3ade6e71e4813bdd14d0806939f8044dea09199eab31ac7de7808a3392a9d264da425fa62ccd29c76918d94f7cb
|
@@ -33,17 +33,27 @@ class Chef
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def run
|
36
|
+
credentials_data = self.class.config_loader.parse_credentials_file
|
36
37
|
context_file = ChefConfig::PathHelper.home(".chef", "context").freeze
|
37
38
|
profile = @name_args[0]&.strip
|
38
|
-
if profile
|
39
|
+
if profile.nil? || profile.empty?
|
40
|
+
show_usage
|
41
|
+
ui.fatal("You must specify a profile")
|
42
|
+
exit 1
|
43
|
+
end
|
44
|
+
|
45
|
+
if credentials_data.nil? || credentials_data.empty?
|
46
|
+
ui.fatal("No profiles found, #{self.class.config_loader.credentials_file_path} does not exist or is empty")
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
|
50
|
+
if credentials_data[profile].nil?
|
51
|
+
raise ChefConfig::ConfigurationError, "Profile #{profile} doesn't exist. Please add it to #{self.class.config_loader.credentials_file_path} and if it is profile with DNS name check that you are not missing single quotes around it as per docs https://docs.chef.io/workstation/knife_setup/#knife-profiles."
|
52
|
+
else
|
39
53
|
# Ensure the .chef/ folder exists.
|
40
54
|
FileUtils.mkdir_p(File.dirname(context_file))
|
41
55
|
IO.write(context_file, "#{profile}\n")
|
42
56
|
ui.msg("Set default profile to #{profile}")
|
43
|
-
else
|
44
|
-
show_usage
|
45
|
-
ui.fatal("You must specify a profile")
|
46
|
-
exit 1
|
47
57
|
end
|
48
58
|
end
|
49
59
|
|
@@ -89,7 +89,7 @@ class Chef
|
|
89
89
|
description: "The path to the alternatives link."
|
90
90
|
|
91
91
|
property :path, String,
|
92
|
-
description: "The
|
92
|
+
description: "The absolute path to the original application binary such as `/usr/bin/ruby27`."
|
93
93
|
|
94
94
|
property :priority, [String, Integer],
|
95
95
|
coerce: proc { |n| n.to_i },
|
@@ -22,26 +22,59 @@ require_relative "../dist"
|
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Resource
|
25
|
-
# Use the chef_gem resource to install a gem only for the instance of Ruby that is dedicated to the chef-client.
|
26
|
-
# When a gem is installed from a local file, it must be added to the node using the remote_file or cookbook_file
|
27
|
-
# resources.
|
28
|
-
#
|
29
|
-
# The chef_gem resource works with all of the same properties and options as the gem_package resource, but does not
|
30
|
-
# accept the gem_binary property because it always uses the CurrentGemEnvironment under which the chef-client is
|
31
|
-
# running. In addition to performing actions similar to the gem_package resource, the chef_gem resource does the
|
32
|
-
# following:
|
33
|
-
# - Runs its actions immediately, before convergence, allowing a gem to be used in a recipe immediately after it is
|
34
|
-
# installed
|
35
|
-
# - Runs Gem.clear_paths after the action, ensuring that gem is aware of changes so that it can be required
|
36
|
-
# immediately after it is installed
|
37
|
-
|
38
|
-
require_relative "gem_package"
|
39
|
-
require_relative "../dist"
|
40
|
-
|
41
25
|
class ChefGem < Chef::Resource::Package::GemPackage
|
42
26
|
unified_mode true
|
43
27
|
provides :chef_gem
|
44
28
|
|
29
|
+
description <<~DESC
|
30
|
+
Use the **chef_gem** resource to install a gem only for the instance of Ruby that is dedicated to the #{Chef::Dist::CLIENT}.
|
31
|
+
When a gem is installed from a local file, it must be added to the node using the **remote_file** or **cookbook_file** resources.
|
32
|
+
|
33
|
+
The **chef_gem** resource works with all of the same properties and options as the **gem_package** resource, but does not
|
34
|
+
accept the `gem_binary` property because it always uses the `CurrentGemEnvironment` under which the `#{Chef::Dist::CLIENT}` is
|
35
|
+
running. In addition to performing actions similar to the **gem_package** resource, the **chef_gem** resource does the
|
36
|
+
following:
|
37
|
+
- Runs its actions immediately, before convergence, allowing a gem to be used in a recipe immediately after it is installed.
|
38
|
+
- Runs `Gem.clear_paths` after the action, ensuring that gem is aware of changes so that it can be required immediately after it is installed.
|
39
|
+
|
40
|
+
Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{Chef::Dist::PRODUCT} is
|
41
|
+
installed, there are two instances of Ruby. One is the standard, system-wide instance of Ruby and the other is a dedicated instance that is
|
42
|
+
available only to #{Chef::Dist::PRODUCT}.
|
43
|
+
Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{Chef::Dist::PRODUCT}.
|
44
|
+
Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
|
45
|
+
DESC
|
46
|
+
|
47
|
+
examples <<~EXAMPLES
|
48
|
+
**Compile time vs. converge time installation of gems**
|
49
|
+
|
50
|
+
To install a gem while #{Chef::Dist::PRODUCT} is configuring the node (the converge phase), set the `compile_time` property to `false`:
|
51
|
+
```ruby
|
52
|
+
chef_gem 'right_aws' do
|
53
|
+
compile_time false
|
54
|
+
action :install
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
To install a gem while the resource collection is being built (the compile phase), set the `compile_time` property to `true`:
|
59
|
+
```ruby
|
60
|
+
chef_gem 'right_aws' do
|
61
|
+
compile_time true
|
62
|
+
action :install
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
Install MySQL for Chef
|
67
|
+
```ruby
|
68
|
+
apt_update
|
69
|
+
|
70
|
+
build_essential 'install compilation tools' do
|
71
|
+
compile_time true
|
72
|
+
end
|
73
|
+
|
74
|
+
chef_gem 'mysql'
|
75
|
+
```
|
76
|
+
EXAMPLES
|
77
|
+
|
45
78
|
property :package_name, String,
|
46
79
|
description: "An optional property to set the package name if it differs from the resource block's name.",
|
47
80
|
identity: true
|
@@ -49,11 +82,14 @@ class Chef
|
|
49
82
|
property :version, String,
|
50
83
|
description: "The version of a package to be installed or upgraded."
|
51
84
|
|
52
|
-
property :gem_binary,
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
85
|
+
property :gem_binary, String,
|
86
|
+
default: "#{RbConfig::CONFIG["bindir"]}/gem",
|
87
|
+
default_description: "The `gem` binary included with #{Chef::Dist::PRODUCT}.",
|
88
|
+
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be used.",
|
89
|
+
callbacks: {
|
90
|
+
"The `chef_gem` resource is restricted to the current gem environment, use `gem_package` to install to other environments." =>
|
91
|
+
proc { |v| v == "#{RbConfig::CONFIG["bindir"]}/gem" },
|
92
|
+
}
|
57
93
|
end
|
58
94
|
end
|
59
95
|
end
|
@@ -66,7 +66,7 @@ class Chef
|
|
66
66
|
description: "The remote URL that is used to download the `.dmg` file, if specified."
|
67
67
|
|
68
68
|
property :file, String,
|
69
|
-
description: "The
|
69
|
+
description: "The absolute path to the `.dmg` file on the local system."
|
70
70
|
|
71
71
|
property :owner, [String, Integer],
|
72
72
|
description: "The user that should own the package installation."
|
@@ -25,7 +25,40 @@ class Chef
|
|
25
25
|
unified_mode true
|
26
26
|
provides :gem_package
|
27
27
|
|
28
|
-
description
|
28
|
+
description <<~DESC
|
29
|
+
Use the **gem_package** resource to manage gem packages that are only included in recipes.
|
30
|
+
When a gem is installed from a local file, it must be added to the node using the **remote_file** or **cookbook_file** resources.
|
31
|
+
|
32
|
+
Note: The **gem_package** resource must be specified as `gem_package` and cannot be shortened to `package` in a recipe.
|
33
|
+
|
34
|
+
Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{Chef::Dist::PRODUCT} is
|
35
|
+
installed, there are two instances of Ruby. One is the standard, system-wide instance of Ruby and the other is a dedicated instance that is
|
36
|
+
available only to #{Chef::Dist::PRODUCT}.
|
37
|
+
Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{Chef::Dist::PRODUCT}.
|
38
|
+
Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
|
39
|
+
DESC
|
40
|
+
|
41
|
+
examples <<~EXAMPLES
|
42
|
+
The following examples demonstrate various approaches for using the **gem_package** resource in recipes:
|
43
|
+
|
44
|
+
**Install a gem file from the local file system**
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
gem_package 'right_aws' do
|
48
|
+
source '/tmp/right_aws-1.11.0.gem'
|
49
|
+
action :install
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
**Use the `ignore_failure` common attribute**
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
gem_package 'syntax' do
|
57
|
+
action :install
|
58
|
+
ignore_failure true
|
59
|
+
end
|
60
|
+
```
|
61
|
+
EXAMPLES
|
29
62
|
|
30
63
|
property :package_name, String,
|
31
64
|
description: "An optional property to set the package name if it differs from the resource block's name.",
|
@@ -53,7 +86,7 @@ class Chef
|
|
53
86
|
default: lazy { Chef::Config[:clear_gem_sources] }, desired_state: false
|
54
87
|
|
55
88
|
property :gem_binary, String, desired_state: false,
|
56
|
-
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be
|
89
|
+
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be used."
|
57
90
|
|
58
91
|
property :include_default_source, [ TrueClass, FalseClass, nil ],
|
59
92
|
description: "Set to `false` to not include `Chef::Config[:rubygems_url]` in the sources.",
|
@@ -29,6 +29,21 @@ class Chef
|
|
29
29
|
|
30
30
|
description "Use the **ssh_known_hosts_entry** resource to add an entry for the specified host in /etc/ssh/ssh_known_hosts or a user's known hosts file if specified."
|
31
31
|
introduced "14.3"
|
32
|
+
examples <<~DOC
|
33
|
+
**Add a single entry for github.com with the key auto detected**
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
ssh_known_hosts_entry 'github.com'
|
37
|
+
```
|
38
|
+
|
39
|
+
**Add a single entry with your own provided key**
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
ssh_known_hosts_entry 'github.com' do
|
43
|
+
key 'node.example.com ssh-rsa ...'
|
44
|
+
end
|
45
|
+
```
|
46
|
+
DOC
|
32
47
|
|
33
48
|
property :host, String,
|
34
49
|
description: "The host to add to the known hosts file.",
|
data/lib/chef/resource/sudo.rb
CHANGED
@@ -34,6 +34,33 @@ class Chef
|
|
34
34
|
" installation of the required sudo version. Chef-supported releases of Ubuntu, SuSE, Debian,"\
|
35
35
|
" and RHEL (6+) all support this feature."
|
36
36
|
introduced "14.0"
|
37
|
+
examples <<~DOC
|
38
|
+
**Grant a user sudo privileges for any command**
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
sudo 'admin' do
|
42
|
+
user 'admin'
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
46
|
+
**Grant a user and groups sudo privileges for any command**
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
sudo 'admins' do
|
50
|
+
users 'bob'
|
51
|
+
groups 'sysadmins, superusers'
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
**Grant passwordless sudo privileges for specific commands**
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
sudo 'passwordless-access' do
|
59
|
+
commands ['/bin/systemctl restart httpd', '/bin/systemctl restart mysql']
|
60
|
+
nopasswd true
|
61
|
+
end
|
62
|
+
```
|
63
|
+
DOC
|
37
64
|
|
38
65
|
# According to the sudo man pages sudo will ignore files in an include dir that have a `.` or `~`
|
39
66
|
# We convert either to `__`
|
@@ -53,7 +80,7 @@ class Chef
|
|
53
80
|
coerce: proc { |x| coerce_groups(x) }
|
54
81
|
|
55
82
|
property :commands, Array,
|
56
|
-
description: "An array of commands this sudoer can execute.",
|
83
|
+
description: "An array of full paths to commands this sudoer can execute.",
|
57
84
|
default: ["ALL"]
|
58
85
|
|
59
86
|
property :host, String,
|
@@ -112,7 +139,7 @@ class Chef
|
|
112
139
|
|
113
140
|
# handle legacy cookbook property
|
114
141
|
def after_created
|
115
|
-
raise "The 'visudo_path' property from the sudo cookbook has been replaced with the 'visudo_binary' property. The path is now more intelligently determined and for most users specifying the path should no longer be necessary. If this resource still cannot determine the path to visudo then provide the
|
142
|
+
raise "The 'visudo_path' property from the sudo cookbook has been replaced with the 'visudo_binary' property. The path is now more intelligently determined and for most users specifying the path should no longer be necessary. If this resource still cannot determine the path to visudo then provide the absolute path to the binary with the 'visudo_binary' property." if visudo_path
|
116
143
|
end
|
117
144
|
|
118
145
|
# VERY old legacy properties
|
@@ -26,6 +26,23 @@ class Chef
|
|
26
26
|
|
27
27
|
description "Use the **swap_file** resource to create or delete swap files on Linux systems, and optionally to manage the swappiness configuration for a host."
|
28
28
|
introduced "14.0"
|
29
|
+
examples <<~DOC
|
30
|
+
**Create a swap file**
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
swap_file '/dev/sda1' do
|
34
|
+
size 1024
|
35
|
+
end
|
36
|
+
```
|
37
|
+
|
38
|
+
**Remove a swap file**
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
swap_file '/dev/sda1' do
|
42
|
+
action :remove
|
43
|
+
end
|
44
|
+
```
|
45
|
+
DOC
|
29
46
|
|
30
47
|
property :path, String,
|
31
48
|
description: "The path where the swap file will be created on the system if it differs from the resource block's name.",
|
@@ -28,6 +28,21 @@ class Chef
|
|
28
28
|
|
29
29
|
description "Use the **timezone** resource to change the system timezone on Windows, Linux, and macOS hosts. Timezones are specified in tz database format, with a complete list of available TZ values for Linux and macOS here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones and for Windows here: https://ss64.com/nt/timezones.html."
|
30
30
|
introduced "14.6"
|
31
|
+
examples <<~DOC
|
32
|
+
**Set the timezone to UTC**
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
timezone 'UTC'
|
36
|
+
```
|
37
|
+
|
38
|
+
**Set the timezone to UTC with a friendly resource name**
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
timezone 'Set the host's timezone to UTC' do
|
42
|
+
timezone 'UTC'
|
43
|
+
end
|
44
|
+
```
|
45
|
+
DOC
|
31
46
|
|
32
47
|
property :timezone, String,
|
33
48
|
description: "An optional property to set the timezone value if it differs from the resource block's name.",
|
@@ -21,7 +21,7 @@ require_relative "../resource"
|
|
21
21
|
class Chef
|
22
22
|
class Resource
|
23
23
|
class WindowsSecurityPolicy < Chef::Resource
|
24
|
-
|
24
|
+
provides :windows_security_policy
|
25
25
|
|
26
26
|
# The valid policy_names options found here
|
27
27
|
# https://github.com/ChrisAWalker/cSecurityOptions under 'AccountSettings'
|
data/lib/chef/version.rb
CHANGED
@@ -30,6 +30,7 @@ describe "knife config use-profile", :workstation do
|
|
30
30
|
knife("config", "use-profile", *cmd_args, instance_filter: lambda { |instance|
|
31
31
|
# Fake the failsafe check because this command doesn't actually process knife.rb.
|
32
32
|
$__KNIFE_INTEGRATION_FAILSAFE_CHECK << " ole"
|
33
|
+
allow(File).to receive(:file?).and_call_original
|
33
34
|
})
|
34
35
|
end
|
35
36
|
|
@@ -73,15 +74,56 @@ describe "knife config use-profile", :workstation do
|
|
73
74
|
|
74
75
|
context "with an argument" do
|
75
76
|
let(:cmd_args) { %w{production} }
|
77
|
+
before { file(".chef/credentials", <<~EOH) }
|
78
|
+
[production]
|
79
|
+
client_name = "testuser"
|
80
|
+
client_key = "testkey.pem"
|
81
|
+
chef_server_url = "https://example.com/organizations/testorg"
|
82
|
+
EOH
|
76
83
|
it do
|
77
84
|
is_expected.to eq "Set default profile to production\n"
|
78
85
|
expect(File.read(path_to(".chef/context"))).to eq "production\n"
|
79
86
|
end
|
80
87
|
end
|
81
88
|
|
89
|
+
context "with no credentials file" do
|
90
|
+
let(:cmd_args) { %w{production} }
|
91
|
+
subject { knife_use_profile.stderr }
|
92
|
+
it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
|
93
|
+
end
|
94
|
+
|
95
|
+
context "with an empty credentials file" do
|
96
|
+
let(:cmd_args) { %w{production} }
|
97
|
+
before { file(".chef/credentials", "") }
|
98
|
+
subject { knife_use_profile.stderr }
|
99
|
+
it { is_expected.to eq "FATAL: No profiles found, #{path_to(".chef/credentials")} does not exist or is empty\n" }
|
100
|
+
end
|
101
|
+
|
102
|
+
context "with an wrong argument" do
|
103
|
+
let(:cmd_args) { %w{staging} }
|
104
|
+
before { file(".chef/credentials", <<~EOH) }
|
105
|
+
[production]
|
106
|
+
client_name = "testuser"
|
107
|
+
client_key = "testkey.pem"
|
108
|
+
chef_server_url = "https://example.com/organizations/testorg"
|
109
|
+
EOH
|
110
|
+
subject { knife_use_profile }
|
111
|
+
it { expect { subject }.to raise_error ChefConfig::ConfigurationError, "Profile staging doesn't exist. Please add it to #{path_to(".chef/credentials")} and if it is profile with DNS name check that you are not missing single quotes around it as per docs https://docs.chef.io/workstation/knife_setup/#knife-profiles." }
|
112
|
+
end
|
113
|
+
|
82
114
|
context "with $CHEF_HOME" do
|
83
115
|
let(:cmd_args) { %w{staging} }
|
84
|
-
before
|
116
|
+
before do
|
117
|
+
ENV["CHEF_HOME"] = path_to("chefhome"); file("chefhome/tmp", "")
|
118
|
+
file("chefhome/.chef/credentials", <<~EOH
|
119
|
+
[staging]
|
120
|
+
client_name = "testuser"
|
121
|
+
client_key = "testkey.pem"
|
122
|
+
chef_server_url = "https://example.com/organizations/testorg"
|
123
|
+
EOH
|
124
|
+
)
|
125
|
+
end
|
126
|
+
|
85
127
|
it do
|
86
128
|
is_expected.to eq "Set default profile to staging\n"
|
87
129
|
expect(File.read(path_to("chefhome/.chef/context"))).to eq "staging\n"
|
@@ -91,7 +133,18 @@ describe "knife config use-profile", :workstation do
|
|
91
133
|
|
92
134
|
context "with $KNIFE_HOME" do
|
93
135
|
let(:cmd_args) { %w{development} }
|
94
|
-
|
136
|
+
|
137
|
+
before do
|
138
|
+
ENV["KNIFE_HOME"] = path_to("knifehome"); file("knifehome/tmp", "")
|
139
|
+
file("knifehome/.chef/credentials", <<~EOH
|
140
|
+
[development]
|
141
|
+
client_name = "testuser"
|
142
|
+
client_key = "testkey.pem"
|
143
|
+
chef_server_url = "https://example.com/organizations/testorg"
|
144
|
+
EOH
|
145
|
+
)
|
146
|
+
end
|
147
|
+
|
95
148
|
it do
|
96
149
|
is_expected.to eq "Set default profile to development\n"
|
97
150
|
expect(File.read(path_to("knifehome/.chef/context"))).to eq "development\n"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 16.2.
|
4
|
+
version: 16.2.50
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-config
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 16.2.
|
19
|
+
version: 16.2.50
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 16.2.
|
26
|
+
version: 16.2.50
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: chef-utils
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 16.2.
|
33
|
+
version: 16.2.50
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 16.2.
|
40
|
+
version: 16.2.50
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: train-core
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|