poise-languages 2.1.0 → 2.1.1
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/.gitignore +2 -1
- data/.travis.yml +16 -2
- data/.yardopts +7 -0
- data/.yo-rc.json +7 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -1
- data/LICENSE +201 -202
- data/lib/poise_languages/scl/resource.rb +1 -1
- data/lib/poise_languages/system/resource.rb +80 -41
- data/lib/poise_languages/version.rb +1 -1
- data/poise-languages.gemspec +2 -1
- data/test/gemfiles/chef-12.1.gemfile +3 -2
- data/test/gemfiles/chef-12.10.gemfile +3 -2
- data/test/gemfiles/chef-12.11.gemfile +3 -2
- data/test/gemfiles/chef-12.12.gemfile +2 -1
- data/test/gemfiles/chef-12.13.gemfile +2 -1
- data/test/gemfiles/chef-12.18.gemfile +19 -0
- data/test/gemfiles/chef-12.19.gemfile +19 -0
- data/test/gemfiles/chef-12.2.gemfile +3 -2
- data/test/gemfiles/chef-12.3.gemfile +3 -2
- data/test/gemfiles/chef-12.4.gemfile +3 -2
- data/test/gemfiles/chef-12.5.gemfile +3 -2
- data/test/gemfiles/chef-12.6.gemfile +3 -2
- data/test/gemfiles/chef-12.7.gemfile +3 -2
- data/test/gemfiles/chef-12.8.gemfile +3 -2
- data/test/gemfiles/chef-12.9.gemfile +3 -2
- data/test/gemfiles/chef-12.gemfile +1 -1
- data/test/gemfiles/chef-13.0.gemfile +19 -0
- data/test/gemfiles/chef-13.gemfile +19 -0
- data/test/gemfiles/master.gemfile +10 -7
- data/test/spec/system/resource_spec.rb +230 -82
- metadata +16 -5
|
@@ -108,7 +108,7 @@ module PoiseLanguages
|
|
|
108
108
|
# KNOW BY FILING A GITHUB ISSUE AT http://github.com/poise/poise-languages/issues/new.
|
|
109
109
|
repo_name = "rhel-server-rhscl-#{node['platform_version'][0]}-rpms"
|
|
110
110
|
execute "subscription-manager repos --enable #{repo_name}" do
|
|
111
|
-
not_if { shell_out!('subscription-manager repos --list').stdout.include?(repo_name) }
|
|
111
|
+
not_if { shell_out!('subscription-manager repos --list-enabled').stdout.include?(repo_name) }
|
|
112
112
|
end
|
|
113
113
|
else
|
|
114
114
|
package 'centos-release-scl-rh' do
|
|
@@ -97,60 +97,86 @@ module PoiseLanguages
|
|
|
97
97
|
#
|
|
98
98
|
# @return [void]
|
|
99
99
|
def action_install
|
|
100
|
-
|
|
100
|
+
notifying_block do
|
|
101
|
+
install_packages
|
|
102
|
+
run_action_hack
|
|
103
|
+
end
|
|
101
104
|
end
|
|
102
105
|
|
|
103
106
|
# The `upgrade` action for the `poise_languages_system` resource.
|
|
104
107
|
#
|
|
105
108
|
# @return [void]
|
|
106
109
|
def action_upgrade
|
|
107
|
-
|
|
110
|
+
notifying_block do
|
|
111
|
+
upgrade_packages
|
|
112
|
+
run_action_hack
|
|
113
|
+
end
|
|
108
114
|
end
|
|
109
115
|
|
|
110
116
|
# The `uninstall` action for the `poise_languages_system` resource.
|
|
111
117
|
#
|
|
112
118
|
# @return [void]
|
|
113
119
|
def action_uninstall
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
resource.run_action(action)
|
|
117
|
-
new_resource.updated_by_last_action(true) if resource.updated_by_last_action?
|
|
120
|
+
notifying_block do
|
|
121
|
+
uninstall_packages
|
|
118
122
|
end
|
|
119
123
|
end
|
|
120
124
|
|
|
121
125
|
private
|
|
122
126
|
|
|
123
|
-
#
|
|
124
|
-
# directly and not added to the resource collection.
|
|
127
|
+
# Install the needed language packages.
|
|
125
128
|
#
|
|
126
|
-
# @
|
|
127
|
-
|
|
129
|
+
# @api private
|
|
130
|
+
# @return [Array<Chef::Resource>]
|
|
131
|
+
def install_packages
|
|
128
132
|
packages = {new_resource.package_name => new_resource.package_version}
|
|
129
133
|
# If we are supposed to install the dev package, grab it using the same
|
|
130
134
|
# version as the main package.
|
|
131
135
|
if new_resource.dev_package
|
|
132
136
|
packages[new_resource.dev_package] = new_resource.package_version
|
|
133
137
|
end
|
|
134
|
-
|
|
135
138
|
Chef::Log.debug("[#{new_resource.parent}] Building package resource using #{packages.inspect}.")
|
|
139
|
+
|
|
140
|
+
# Check for multi-package support.
|
|
136
141
|
package_resource_class = Chef::Resource.resource_for_node(:package, node)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
packages.
|
|
140
|
-
|
|
141
|
-
r.version(version)
|
|
142
|
-
r.action(action)
|
|
143
|
-
r.declared_type = :package
|
|
144
|
-
r.retries(5)
|
|
145
|
-
end
|
|
142
|
+
package_provider_class = package_resource_class.new('multipackage_check', run_context).provider_for_action(:install)
|
|
143
|
+
package_resources = if package_provider_class.respond_to?(:use_multipackage_api?) && package_provider_class.use_multipackage_api?
|
|
144
|
+
package packages.keys do
|
|
145
|
+
version packages.values
|
|
146
146
|
end
|
|
147
147
|
else
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
end
|
|
148
|
+
# Fallback for non-multipackage.
|
|
149
|
+
packages.map do |pkg_name, pkg_version|
|
|
150
|
+
package pkg_name do
|
|
151
|
+
version pkg_version
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Apply some settings to all of the resources.
|
|
157
|
+
Array(package_resources).each do |res|
|
|
158
|
+
res.retries(5)
|
|
159
|
+
res.define_singleton_method(:apply_action_hack?) { true }
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Upgrade the needed language packages.
|
|
164
|
+
#
|
|
165
|
+
# @api private
|
|
166
|
+
# @return [Array<Chef::Resource>]
|
|
167
|
+
def upgrade_packages
|
|
168
|
+
install_packages.each do |res|
|
|
169
|
+
res.action(:upgrade)
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Uninstall the needed language packages.
|
|
174
|
+
#
|
|
175
|
+
# @api private
|
|
176
|
+
# @return [Array<Chef::Resource>]
|
|
177
|
+
def uninstall_packages
|
|
178
|
+
install_packages.each do |res|
|
|
179
|
+
res.action(node.platform_family?('debian') ? :purge : :remove)
|
|
154
180
|
end
|
|
155
181
|
end
|
|
156
182
|
|
|
@@ -161,21 +187,34 @@ module PoiseLanguages
|
|
|
161
187
|
#
|
|
162
188
|
# @param action [Symbol] Action to run on all package resources.
|
|
163
189
|
# @return [void]
|
|
164
|
-
def
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
#
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
190
|
+
def run_action_hack
|
|
191
|
+
# If new_resource.package_version is set, skip this madness.
|
|
192
|
+
return if new_resource.package_version
|
|
193
|
+
|
|
194
|
+
# Process every resource in the current collection, which is bounded
|
|
195
|
+
# by notifying_block.
|
|
196
|
+
run_context.resource_collection.each do |resource|
|
|
197
|
+
# Only apply to things we tagged above.
|
|
198
|
+
next unless resource.respond_to?(:apply_action_hack?) && resource.apply_action_hack?
|
|
199
|
+
|
|
200
|
+
Array(resource.action).each do |action|
|
|
201
|
+
# Reset it so we have a clean baseline.
|
|
202
|
+
resource.updated_by_last_action(false)
|
|
203
|
+
# Grab the provider.
|
|
204
|
+
provider = resource.provider_for_action(action)
|
|
205
|
+
provider.action = action
|
|
206
|
+
# Inject our check for the candidate version. This will actually
|
|
207
|
+
# get run during run_action below.
|
|
208
|
+
patch_load_current_resource!(provider, new_resource.version)
|
|
209
|
+
# Run our action.
|
|
210
|
+
Chef::Log.debug("[#{new_resource.parent}] Running #{provider} with #{action}")
|
|
211
|
+
provider.run_action(action)
|
|
212
|
+
# Check updated flag.
|
|
213
|
+
new_resource.updated_by_last_action(true) if resource.updated_by_last_action?
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Make sure the resource doesn't run again when notifying_block ends.
|
|
217
|
+
resource.action(:nothing)
|
|
179
218
|
end
|
|
180
219
|
end
|
|
181
220
|
|
data/poise-languages.gemspec
CHANGED
|
@@ -26,7 +26,8 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.description = "A Chef cookbook to help writing language cookbooks."
|
|
27
27
|
spec.summary = spec.description
|
|
28
28
|
spec.homepage = 'https://github.com/poise/poise-languages'
|
|
29
|
-
spec.license = 'Apache
|
|
29
|
+
spec.license = 'Apache-2.0'
|
|
30
|
+
spec.metadata['platforms'] = 'any'
|
|
30
31
|
|
|
31
32
|
spec.files = `git ls-files`.split($/)
|
|
32
33
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2017, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
|
|
18
|
+
|
|
19
|
+
gem 'chef', '~> 12.18.31'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2017, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
|
|
18
|
+
|
|
19
|
+
gem 'chef', '~> 12.19.36'
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
|
|
18
18
|
|
|
19
19
|
gem 'chef', '~> 12.4.3'
|
|
20
|
-
gem '
|
|
21
|
-
gem 'foodcritic', '< 8'
|
|
20
|
+
gem 'chefspec', '< 6'
|
|
22
21
|
gem 'fauxhai', '<= 3.9.0'
|
|
22
|
+
gem 'foodcritic', '< 8'
|
|
23
23
|
gem 'gh', '0.14.0'
|
|
24
|
+
gem 'rack', '< 2'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2017, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
|
|
18
|
+
|
|
19
|
+
gem 'chef', '~> 13.0.118'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright 2017, Noah Kantrowitz
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
|
|
18
|
+
|
|
19
|
+
gem 'chef', '~> 13.0'
|
|
@@ -16,10 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
|
|
18
18
|
|
|
19
|
-
gem 'chef',
|
|
20
|
-
gem '
|
|
21
|
-
gem '
|
|
22
|
-
gem '
|
|
23
|
-
gem '
|
|
24
|
-
gem '
|
|
25
|
-
gem 'poise
|
|
19
|
+
gem 'chef', git: 'https://github.com/chef/chef.git'
|
|
20
|
+
gem 'chefspec', git: 'https://github.com/sethvargo/chefspec.git'
|
|
21
|
+
gem 'fauxhai', git: 'https://github.com/customink/fauxhai.git'
|
|
22
|
+
gem 'foodcritic', git: 'https://github.com/foodcritic/foodcritic.git'
|
|
23
|
+
gem 'halite', git: 'https://github.com/poise/halite.git'
|
|
24
|
+
gem 'ohai', git: 'https://github.com/chef/ohai.git'
|
|
25
|
+
gem 'poise', git: 'https://github.com/poise/poise.git'
|
|
26
|
+
gem 'poise-archive', git: 'https://github.com/poise/poise-archive.git'
|
|
27
|
+
gem 'poise-boiler', git: 'https://github.com/poise/poise-boiler.git'
|
|
28
|
+
gem 'poise-profiler', git: 'https://github.com/poise/poise-profiler.git'
|
|
@@ -15,110 +15,258 @@
|
|
|
15
15
|
#
|
|
16
16
|
|
|
17
17
|
require 'spec_helper'
|
|
18
|
+
require 'chef/version'
|
|
19
|
+
require 'shellwords'
|
|
18
20
|
|
|
19
21
|
describe PoiseLanguages::System::Resource do
|
|
20
|
-
let(:chefspec_options) { {platform: 'ubuntu', version: '14.04'} }
|
|
21
22
|
step_into(:poise_languages_system)
|
|
22
|
-
step_into(:package, unwrap_notifying_block: false)
|
|
23
|
-
provider(:package_hack, parent: Chef::Provider::Package) do
|
|
24
|
-
def load_current_resource
|
|
25
|
-
@current_resource = new_resource.class.new(new_resource.name, run_context)
|
|
26
|
-
current_resource.package_name(new_resource.package_name)
|
|
27
|
-
candidate = node['poise_candidate']
|
|
28
|
-
current = node['poise_current']
|
|
29
|
-
@candidate_version = if new_resource.package_name.is_a?(Array)
|
|
30
|
-
current_resource.version([current] * new_resource.package_name.length)
|
|
31
|
-
[candidate] * new_resource.package_name.length
|
|
32
|
-
else
|
|
33
|
-
current_resource.version(current)
|
|
34
|
-
candidate
|
|
35
|
-
end
|
|
36
|
-
current_resource
|
|
37
|
-
end
|
|
38
|
-
def install_package(name, version)
|
|
39
|
-
rc = defined?(Chef.run_context) ? Chef.run_context : self.run_context
|
|
40
|
-
rc.resource_collection << new_resource unless rc.resource_collection.keys.include?(new_resource.to_s)
|
|
41
|
-
end
|
|
42
|
-
alias_method :upgrade_package, :install_package
|
|
43
|
-
alias_method :remove_package, :install_package
|
|
44
|
-
alias_method :purge_package, :install_package
|
|
45
|
-
end
|
|
46
|
-
recipe do
|
|
47
|
-
r = ruby_block 'parent'
|
|
48
|
-
poise_languages_system 'mylang' do
|
|
49
|
-
parent r
|
|
50
|
-
version ''
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
23
|
before do
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
24
|
+
# Don't actually run any installs. The package hack prevents the usual
|
|
25
|
+
# ChefSpec stubbing from working. This fakes it.
|
|
26
|
+
[Chef::Provider::Package::Apt, Chef::Provider::Package::Yum].each do |klass|
|
|
27
|
+
allow_any_instance_of(klass).to receive(:install_package) {|this| this.new_resource.perform_action(:install, converge_time: true) }
|
|
28
|
+
allow_any_instance_of(klass).to receive(:upgrade_package) {|this| this.new_resource.perform_action(:upgrade, converge_time: true) }
|
|
29
|
+
allow_any_instance_of(klass).to receive(:remove_package) {|this| this.new_resource.perform_action(:remove, converge_time: true) }
|
|
30
|
+
allow_any_instance_of(klass).to receive(:purge_package) {|this| this.new_resource.perform_action(:purge, converge_time: true) }
|
|
31
|
+
end
|
|
59
32
|
end
|
|
60
33
|
|
|
61
34
|
context 'on Ubuntu' do
|
|
62
|
-
|
|
35
|
+
let(:chefspec_options) { {platform: 'ubuntu', version: '16.04'} }
|
|
36
|
+
before do
|
|
37
|
+
# Stubs load load_current_resource for apt_package.
|
|
38
|
+
allow_any_instance_of(Chef::Provider::Package::Apt).to receive(:shell_out) do |this, *args|
|
|
39
|
+
args.pop if args.last.is_a?(Hash)
|
|
40
|
+
args = Shellwords.split(args.first) if args.size == 1 && args.first.is_a?(String)
|
|
41
|
+
if args[0..1] == %w{apt-cache policy}
|
|
42
|
+
double(stdout: <<-EOH, error!: nil)
|
|
43
|
+
#{args[2]}:
|
|
44
|
+
Installed: (none)
|
|
45
|
+
Candidate: 1.2.3-1
|
|
46
|
+
Version table:
|
|
47
|
+
1.2.3-1 500
|
|
48
|
+
500 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages
|
|
49
|
+
EOH
|
|
50
|
+
else
|
|
51
|
+
raise "unstubbed command #{args.inspect}"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context 'action :install' do
|
|
57
|
+
recipe do
|
|
58
|
+
r = ruby_block 'parent'
|
|
59
|
+
poise_languages_system 'mylang' do
|
|
60
|
+
parent r
|
|
61
|
+
version ''
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
if Gem::Requirement.create('>= 12.11').satisfied_by?(Gem::Version.create(Chef::VERSION))
|
|
66
|
+
it { is_expected.to install_package('mylang, mylang-dev') }
|
|
67
|
+
else
|
|
68
|
+
it { is_expected.to install_package('mylang') }
|
|
69
|
+
it { is_expected.to install_package('mylang-dev') }
|
|
70
|
+
end
|
|
71
|
+
end # /context action :upgrade
|
|
72
|
+
|
|
73
|
+
context 'action :upgrade' do
|
|
74
|
+
recipe do
|
|
75
|
+
r = ruby_block 'parent'
|
|
76
|
+
poise_languages_system 'mylang' do
|
|
77
|
+
action :upgrade
|
|
78
|
+
parent r
|
|
79
|
+
version ''
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
if Gem::Requirement.create('>= 12.11').satisfied_by?(Gem::Version.create(Chef::VERSION))
|
|
84
|
+
it { is_expected.to upgrade_package('mylang, mylang-dev') }
|
|
85
|
+
else
|
|
86
|
+
it { is_expected.to upgrade_package('mylang') }
|
|
87
|
+
it { is_expected.to upgrade_package('mylang-dev') }
|
|
88
|
+
end
|
|
89
|
+
end # /context action :upgrade
|
|
90
|
+
|
|
91
|
+
context 'action :uninstall' do
|
|
92
|
+
recipe do
|
|
93
|
+
r = ruby_block 'parent'
|
|
94
|
+
poise_languages_system 'mylang' do
|
|
95
|
+
action :uninstall
|
|
96
|
+
parent r
|
|
97
|
+
version ''
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
if Gem::Requirement.create('>= 12.11').satisfied_by?(Gem::Version.create(Chef::VERSION))
|
|
102
|
+
it { is_expected.to purge_package('mylang, mylang-dev') }
|
|
103
|
+
else
|
|
104
|
+
it { is_expected.to purge_package('mylang') }
|
|
105
|
+
it { is_expected.to purge_package('mylang-dev') }
|
|
106
|
+
end
|
|
107
|
+
end # /context action :uninstall
|
|
108
|
+
|
|
109
|
+
context 'with a matching version' do
|
|
110
|
+
recipe do
|
|
111
|
+
r = ruby_block 'parent'
|
|
112
|
+
poise_languages_system 'mylang' do
|
|
113
|
+
parent r
|
|
114
|
+
version '1'
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it { expect { subject }.to_not raise_error }
|
|
119
|
+
end # /context with a matching version
|
|
120
|
+
|
|
121
|
+
context 'with an exact matching version' do
|
|
122
|
+
recipe do
|
|
123
|
+
r = ruby_block 'parent'
|
|
124
|
+
poise_languages_system 'mylang' do
|
|
125
|
+
parent r
|
|
126
|
+
version '1.2.3'
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it { expect { subject }.to_not raise_error }
|
|
131
|
+
end # /context with an exact matching version
|
|
132
|
+
|
|
133
|
+
context 'with a non-matching version' do
|
|
134
|
+
recipe do
|
|
135
|
+
r = ruby_block 'parent'
|
|
136
|
+
poise_languages_system 'mylang' do
|
|
137
|
+
parent r
|
|
138
|
+
version '2'
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it { expect { subject }.to raise_error PoiseLanguages::Error }
|
|
143
|
+
end # /context with a non-matching version
|
|
144
|
+
|
|
145
|
+
context 'with a nearby non-matching version' do
|
|
146
|
+
recipe do
|
|
147
|
+
r = ruby_block 'parent'
|
|
148
|
+
poise_languages_system 'mylang' do
|
|
149
|
+
parent r
|
|
150
|
+
version '1.2.4'
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it { expect { subject }.to raise_error PoiseLanguages::Error }
|
|
155
|
+
end # /context with a nearby non-matching version
|
|
63
156
|
end # /context on Ubuntu
|
|
64
157
|
|
|
65
158
|
context 'on CentOS' do
|
|
66
159
|
let(:chefspec_options) { {platform: 'centos', version: '7.0'} }
|
|
160
|
+
before do
|
|
161
|
+
yum_cache = double('YumCache')
|
|
162
|
+
allow(yum_cache).to receive(:yum_binary=)
|
|
163
|
+
allow(yum_cache).to receive(:disable_extra_repo_control)
|
|
164
|
+
allow(yum_cache).to receive(:package_available?).and_return(false)
|
|
165
|
+
allow(yum_cache).to receive(:package_available?).with(/^mylang(-devel)?$/).and_return(true)
|
|
166
|
+
allow(yum_cache).to receive(:installed_version).with(/^mylang(-devel)?$/, nil).and_return(nil)
|
|
167
|
+
allow(yum_cache).to receive(:candidate_version).with(/^mylang(-devel)?$/, nil).and_return('1.2.3')
|
|
168
|
+
allow(Chef::Provider::Package::Yum::YumCache).to receive(:instance).and_return(yum_cache)
|
|
169
|
+
end
|
|
67
170
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
171
|
+
context 'action :install' do
|
|
172
|
+
recipe do
|
|
173
|
+
r = ruby_block 'parent'
|
|
174
|
+
poise_languages_system 'mylang' do
|
|
175
|
+
parent r
|
|
176
|
+
version ''
|
|
177
|
+
end
|
|
178
|
+
end
|
|
71
179
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
180
|
+
if Gem::Requirement.create('>= 12.19').satisfied_by?(Gem::Version.create(Chef::VERSION))
|
|
181
|
+
it { is_expected.to install_package('mylang, mylang-devel') }
|
|
182
|
+
else
|
|
183
|
+
it { is_expected.to install_package('mylang') }
|
|
184
|
+
it { is_expected.to install_package('mylang-devel') }
|
|
185
|
+
end
|
|
186
|
+
end # /context action :upgrade
|
|
187
|
+
|
|
188
|
+
context 'action :upgrade' do
|
|
189
|
+
recipe do
|
|
190
|
+
r = ruby_block 'parent'
|
|
191
|
+
poise_languages_system 'mylang' do
|
|
192
|
+
action :upgrade
|
|
193
|
+
parent r
|
|
194
|
+
version ''
|
|
195
|
+
end
|
|
79
196
|
end
|
|
80
|
-
end
|
|
81
197
|
|
|
82
|
-
|
|
83
|
-
|
|
198
|
+
if Gem::Requirement.create('>= 12.19').satisfied_by?(Gem::Version.create(Chef::VERSION))
|
|
199
|
+
it { is_expected.to upgrade_package('mylang, mylang-devel') }
|
|
200
|
+
else
|
|
201
|
+
it { is_expected.to upgrade_package('mylang') }
|
|
202
|
+
it { is_expected.to upgrade_package('mylang-devel') }
|
|
203
|
+
end
|
|
204
|
+
end # /context action :upgrade
|
|
84
205
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
206
|
+
context 'action :uninstall' do
|
|
207
|
+
recipe do
|
|
208
|
+
r = ruby_block 'parent'
|
|
209
|
+
poise_languages_system 'mylang' do
|
|
210
|
+
action :uninstall
|
|
211
|
+
parent r
|
|
212
|
+
version ''
|
|
213
|
+
end
|
|
92
214
|
end
|
|
93
|
-
end
|
|
94
|
-
before do
|
|
95
|
-
default_attributes[:poise_current] = '2.0'
|
|
96
|
-
end
|
|
97
215
|
|
|
98
|
-
|
|
99
|
-
|
|
216
|
+
if Gem::Requirement.create('>= 12.19').satisfied_by?(Gem::Version.create(Chef::VERSION))
|
|
217
|
+
it { is_expected.to remove_package('mylang, mylang-devel') }
|
|
218
|
+
else
|
|
219
|
+
it { is_expected.to remove_package('mylang') }
|
|
220
|
+
it { is_expected.to remove_package('mylang-devel') }
|
|
221
|
+
end
|
|
222
|
+
end # /context action :uninstall
|
|
100
223
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
224
|
+
context 'with a matching version' do
|
|
225
|
+
recipe do
|
|
226
|
+
r = ruby_block 'parent'
|
|
227
|
+
poise_languages_system 'mylang' do
|
|
228
|
+
parent r
|
|
229
|
+
version '1'
|
|
230
|
+
end
|
|
107
231
|
end
|
|
108
|
-
end
|
|
109
232
|
|
|
110
|
-
|
|
111
|
-
|
|
233
|
+
it { expect { subject }.to_not raise_error }
|
|
234
|
+
end # /context with a matching version
|
|
112
235
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
236
|
+
context 'with an exact matching version' do
|
|
237
|
+
recipe do
|
|
238
|
+
r = ruby_block 'parent'
|
|
239
|
+
poise_languages_system 'mylang' do
|
|
240
|
+
parent r
|
|
241
|
+
version '1.2.3'
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
it { expect { subject }.to_not raise_error }
|
|
246
|
+
end # /context with an exact matching version
|
|
247
|
+
|
|
248
|
+
context 'with a non-matching version' do
|
|
249
|
+
recipe do
|
|
250
|
+
r = ruby_block 'parent'
|
|
251
|
+
poise_languages_system 'mylang' do
|
|
252
|
+
parent r
|
|
253
|
+
version '2'
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
it { expect { subject }.to raise_error PoiseLanguages::Error }
|
|
258
|
+
end # /context with a non-matching version
|
|
259
|
+
|
|
260
|
+
context 'with a nearby non-matching version' do
|
|
261
|
+
recipe do
|
|
262
|
+
r = ruby_block 'parent'
|
|
263
|
+
poise_languages_system 'mylang' do
|
|
264
|
+
parent r
|
|
265
|
+
version '1.2.4'
|
|
266
|
+
end
|
|
119
267
|
end
|
|
120
|
-
end
|
|
121
268
|
|
|
122
|
-
|
|
123
|
-
|
|
269
|
+
it { expect { subject }.to raise_error PoiseLanguages::Error }
|
|
270
|
+
end # /context with a nearby non-matching version
|
|
271
|
+
end # /context on CentOS
|
|
124
272
|
end
|