vanagon 0.3.19 → 0.4.0

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.
@@ -0,0 +1,28 @@
1
+ # AIX is special. This subclassing gives us the chance to define some sane
2
+ # defaults for aix without cluttering the main rpm class in if statements.
3
+ class Vanagon
4
+ class Platform
5
+ class RPM
6
+ class AIX < Vanagon::Platform::RPM
7
+ def rpm_defines
8
+ %(--define '_topdir $(tempdir)/rpmbuild' )
9
+ end
10
+
11
+ # Constructor. Sets up some defaults for the aix platform and calls the parent constructor
12
+ #
13
+ # @param name [String] name of the platform
14
+ # @return [Vanagon::Platform::RPM::AIX] the rpm derived platform with the given name
15
+ def initialize(name)
16
+ @name = name
17
+ @make = "/usr/bin/gmake"
18
+ @tar = "/opt/freeware/bin/tar"
19
+ @patch = "/opt/freeware/bin/patch"
20
+ @num_cores = "lsdev -Cc processor |wc -l"
21
+ @install = "/opt/freeware/bin/install"
22
+ @rpmbuild = "/usr/bin/rpm"
23
+ super(name)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+ # SLES is special, mainly in the differences between yum and zypper,
2
+ # so here we subclass SLES off of rpm.
3
+ class Vanagon
4
+ class Platform
5
+ class RPM
6
+ class SLES < Vanagon::Platform::RPM
7
+ # Helper to setup a zypper repository on a target system
8
+ #
9
+ # @param definition [String] the repo setup URI or RPM file
10
+ # @return [Array] A list of commands to add a zypper repo for the build system
11
+ def add_repository(definition)
12
+ definition = URI.parse(definition)
13
+ if @os_version == '10'
14
+ flag = 'sa'
15
+ else
16
+ flag = 'ar'
17
+ end
18
+
19
+ commands = []
20
+
21
+ if definition.scheme =~ /^(http|ftp)/
22
+ if File.extname(definition.path) == '.rpm'
23
+ # repo definition is an rpm (like puppetlabs-release)
24
+ commands << "curl -o local.rpm '#{definition}'; rpm -Uvh local.rpm; rm -f local.rpm"
25
+ else
26
+ commands << "yes | zypper -n --no-gpg-checks #{flag} -t YUM --repo '#{definition}'"
27
+ end
28
+ end
29
+
30
+ commands
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -10,6 +10,18 @@ class Vanagon
10
10
  name_and_version = "#{project.name}-#{project.version}"
11
11
  pkg_name = package_name(project)
12
12
 
13
+ # Here we maintain backward compatibility with older vanagon versions
14
+ # that did this by default. This shim should get removed at some point
15
+ # in favor of just letting the makefile deliver the bill-of-materials
16
+ # to the correct directory. This shouldn't be required at all then.
17
+ if project.bill_of_materials.nil?
18
+ bom_install = [# Move bill-of-materials into a docdir
19
+ "mkdir -p $(tempdir)/#{name_and_version}/usr/share/doc/#{project.name}",
20
+ "mv $(tempdir)/#{name_and_version}/bill-of-materials $(tempdir)/#{name_and_version}/usr/share/doc/#{project.name}/bill-of-materials",]
21
+ else
22
+ bom_install = []
23
+ end
24
+
13
25
  [
14
26
  # Set up our needed directories
15
27
  "mkdir -p $(tempdir)/#{name_and_version}",
@@ -19,9 +31,7 @@ class Vanagon
19
31
  # Unpack the project and stage the packaging artifacts
20
32
  "gunzip -c #{name_and_version}.tar.gz | '#{@tar}' -C '$(tempdir)' -xf -",
21
33
 
22
- # Move bill-of-materials into a docdir
23
- "mkdir -p $(tempdir)/#{name_and_version}/usr/share/doc/#{project.name}",
24
- "mv $(tempdir)/#{name_and_version}/bill-of-materials $(tempdir)/#{name_and_version}/usr/share/doc/#{project.name}/bill-of-materials",
34
+ bom_install,
25
35
 
26
36
  "rm #{name_and_version}.tar.gz",
27
37
  "cp -r packaging $(tempdir)/",
@@ -46,7 +56,7 @@ class Vanagon
46
56
  "pkgmk -f $(tempdir)/packaging/proto -b $(tempdir)/#{name_and_version} -o -d $(tempdir)/pkg/",
47
57
  "pkgtrans -s $(tempdir)/pkg/ $(tempdir)/pkg/#{pkg_name.gsub(/\.gz$/, '')} #{project.name}",
48
58
  "gzip -c $(tempdir)/pkg/#{pkg_name.gsub(/\.gz$/, '')} > output/#{target_dir}/#{pkg_name}",
49
- ]
59
+ ].flatten.compact
50
60
  end
51
61
 
52
62
  # Method to generate the files required to build a solaris package for the project
@@ -11,6 +11,7 @@ class Vanagon
11
11
  attr_accessor :version, :directories, :license, :description, :vendor
12
12
  attr_accessor :homepage, :requires, :user, :repo, :noarch, :identifier
13
13
  attr_accessor :cleanup, :version_file, :release, :replaces, :provides
14
+ attr_accessor :bill_of_materials
14
15
 
15
16
  # Loads a given project from the configdir
16
17
  #
@@ -110,18 +111,69 @@ class Vanagon
110
111
  provides.flatten.uniq
111
112
  end
112
113
 
113
- # Collects the pre-install actions for the project and it's components
114
+ # Collects the preinstall packaging actions for the project and it's components
115
+ # for the specified packaging state
114
116
  #
115
- # @return [Array] array of Bourne shell compatible scriptlets to execute
116
- def get_preinstall_actions
117
- @components.map(&:preinstall_actions).flatten
117
+ # @param pkg_state [String] the package state we want to run the given scripts for.
118
+ # Can be one or more of 'install' or 'upgrade'
119
+ # @return [String] string of Bourne shell compatible scriptlets to execute during the preinstall
120
+ # phase of packaging during the state of the system defined by pkg_state (either install or upgrade)
121
+ def get_preinstall_actions(pkg_state)
122
+ scripts = @components.map(&:preinstall_actions).flatten.compact.select { |s| s.pkg_state.include? pkg_state }.map(&:scripts)
123
+ if scripts.empty?
124
+ return ':'
125
+ else
126
+ return scripts.join("\n")
127
+ end
128
+ end
129
+
130
+
131
+ # Collects the postinstall packaging actions for the project and it's components
132
+ # for the specified packaging state
133
+ #
134
+ # @param pkg_state [String] the package state we want to run the given scripts for.
135
+ # Can be one or more of 'install' or 'upgrade'
136
+ # @return [String] string of Bourne shell compatible scriptlets to execute during the postinstall
137
+ # phase of packaging during the state of the system defined by pkg_state (either install or upgrade)
138
+ def get_postinstall_actions(pkg_state)
139
+ scripts = @components.map(&:postinstall_actions).flatten.compact.select { |s| s.pkg_state.include? pkg_state }.map(&:scripts)
140
+ if scripts.empty?
141
+ return ':'
142
+ else
143
+ return scripts.join("\n")
144
+ end
118
145
  end
119
146
 
120
- # Collects the post-install actions for the project and it's components
147
+ # Collects the preremove packaging actions for the project and it's components
148
+ # for the specified packaging state
121
149
  #
122
- # @return [Array] array of Bourne shell compatible scriptlets to execute
123
- def get_postinstall_actions
124
- @components.map(&:postinstall_actions).flatten
150
+ # @param pkg_state [String] the package state we want to run the given scripts for.
151
+ # Can be one or more of 'removal' or 'upgrade'
152
+ # @return [String] string of Bourne shell compatible scriptlets to execute during the preremove
153
+ # phase of packaging during the state of the system defined by pkg_state (either removal or upgrade)
154
+ def get_preremove_actions(pkg_state)
155
+ scripts = @components.map(&:preremove_actions).flatten.compact.select { |s| s.pkg_state.include? pkg_state }.map(&:scripts)
156
+ if scripts.empty?
157
+ return ':'
158
+ else
159
+ return scripts.join("\n")
160
+ end
161
+ end
162
+
163
+ # Collects the postremove packaging actions for the project and it's components
164
+ # for the specified packaging state
165
+ #
166
+ # @param pkg_state [String] the package state we want to run the given scripts for.
167
+ # Can be one or more of 'removal' or 'upgrade'
168
+ # @return [String] string of Bourne shell compatible scriptlets to execute during the postremove
169
+ # phase of packaging during the state of the system defined by pkg_state (either removal or upgrade)
170
+ def get_postremove_actions(pkg_state)
171
+ scripts = @components.map(&:postremove_actions).flatten.compact.select { |s| s.pkg_state.include? pkg_state }.map(&:scripts)
172
+ if scripts.empty?
173
+ return ':'
174
+ else
175
+ return scripts.join("\n")
176
+ end
125
177
  end
126
178
 
127
179
  # Collects any configfiles supplied by components
@@ -208,11 +208,17 @@ class Vanagon
208
208
  @project.cleanup = true
209
209
  end
210
210
 
211
- # This method will write the projects version to a designated file during package creation
211
+ # This method will write the project's version to a designated file during package creation
212
212
  # @param target [String] a full path to the version file for the project
213
213
  def write_version_file(target)
214
214
  @project.version_file = Vanagon::Common::Pathname.file(target)
215
215
  end
216
+
217
+ # This method will write the project's bill-of-materials to a designated directory during package creation.
218
+ # @param target [String] a full path to the directory for the bill-of-materials for the project
219
+ def bill_of_materials(target)
220
+ @project.bill_of_materials = Vanagon::Common::Pathname.new(target)
221
+ end
216
222
  end
217
223
  end
218
224
  end
@@ -241,21 +241,17 @@ class Vanagon
241
241
  # output of the command if return_command_output is true
242
242
  # @raise [RuntimeError] If there is no target given or the command fails an exception is raised
243
243
  def remote_ssh_command(target, command, port = 22, return_command_output: false)
244
- if target
245
- puts "Executing '#{command}' on #{target}"
246
- if return_command_output
247
- ret = %x(#{ssh_command(port)} -T #{target} '#{command.gsub("'", "'\\\\''")}').chomp
248
- if $?.success?
249
- return ret
250
- else
251
- raise "Remote ssh command (#{command}) failed on '#{target}'."
252
- end
244
+ puts "Executing '#{command}' on '#{target}'"
245
+ if return_command_output
246
+ ret = %x(#{ssh_command(port)} -T #{target} '#{command.gsub("'", "'\\\\''")}').chomp
247
+ if $?.success?
248
+ return ret
253
249
  else
254
- Kernel.system("#{ssh_command(port)} -T #{target} '#{command.gsub("'", "'\\\\''")}'")
255
- $?.success? or raise "Remote ssh command (#{command}) failed on '#{target}'."
250
+ raise "Remote ssh command (#{command}) failed on '#{target}'."
256
251
  end
257
252
  else
258
- fail "Need a target to ssh to. Received none."
253
+ Kernel.system("#{ssh_command(port)} -T #{target} '#{command.gsub("'", "'\\\\''")}'")
254
+ $?.success? or raise "Remote ssh command (#{command}) failed on '#{target}'."
259
255
  end
260
256
  end
261
257
 
@@ -196,16 +196,116 @@ end" }
196
196
  end
197
197
 
198
198
  describe '#add_actions' do
199
- it 'adds the corect preinstall action to the component for rpm platforms' do
199
+ it 'adds the corect preinstall action to the component' do
200
200
  comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
201
- comp.add_preinstall_action('chkconfig --list')
202
- expect(comp._component.preinstall_actions).to include("chkconfig --list")
201
+ comp.add_preinstall_action(['install', 'upgrade'], ['chkconfig --list', '/bin/true'])
202
+ comp.add_preinstall_action('install', 'echo "hello, world"')
203
+ expect(comp._component.preinstall_actions.count).to eq(2)
204
+ expect(comp._component.preinstall_actions.first.scripts.count).to eq(2)
205
+ expect(comp._component.preinstall_actions.first.pkg_state.count).to eq(2)
206
+ expect(comp._component.preinstall_actions.first.pkg_state.first).to eq('install')
207
+ expect(comp._component.preinstall_actions.first.pkg_state.last).to eq('upgrade')
208
+ expect(comp._component.preinstall_actions.first.scripts.first).to eq('chkconfig --list')
209
+ expect(comp._component.preinstall_actions.first.scripts.last).to eq('/bin/true')
210
+
211
+ expect(comp._component.preinstall_actions.last.scripts.count).to eq(1)
212
+ expect(comp._component.preinstall_actions.last.pkg_state.count).to eq(1)
213
+ expect(comp._component.preinstall_actions.last.pkg_state.first).to eq('install')
214
+ expect(comp._component.preinstall_actions.last.scripts.first).to eq('echo "hello, world"')
215
+ end
216
+
217
+ it 'fails with bad preinstall action' do
218
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
219
+ expect { comp.add_preinstall_action('foo', '/bin/true') }.to raise_error(Vanagon::Error)
220
+ end
221
+
222
+ it 'fails with empty preinstall action' do
223
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
224
+ expect { comp.add_preinstall_action([], '/bin/true') }.to raise_error(Vanagon::Error)
225
+ end
226
+
227
+ it 'adds the corect postinstall action to the component' do
228
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
229
+ comp.add_postinstall_action(['install', 'upgrade'], ['chkconfig --list', '/bin/true'])
230
+ comp.add_postinstall_action('install', 'echo "hello, world"')
231
+ expect(comp._component.postinstall_actions.count).to eq(2)
232
+ expect(comp._component.postinstall_actions.first.scripts.count).to eq(2)
233
+ expect(comp._component.postinstall_actions.first.pkg_state.count).to eq(2)
234
+ expect(comp._component.postinstall_actions.first.pkg_state.first).to eq('install')
235
+ expect(comp._component.postinstall_actions.first.pkg_state.last).to eq('upgrade')
236
+ expect(comp._component.postinstall_actions.first.scripts.first).to eq('chkconfig --list')
237
+ expect(comp._component.postinstall_actions.first.scripts.last).to eq('/bin/true')
238
+
239
+ expect(comp._component.postinstall_actions.last.scripts.count).to eq(1)
240
+ expect(comp._component.postinstall_actions.last.pkg_state.count).to eq(1)
241
+ expect(comp._component.postinstall_actions.last.pkg_state.first).to eq('install')
242
+ expect(comp._component.postinstall_actions.last.scripts.first).to eq('echo "hello, world"')
243
+ end
244
+
245
+ it 'fails with bad postinstall action' do
246
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
247
+ expect { comp.add_postinstall_action('foo', '/bin/true') }.to raise_error(Vanagon::Error)
248
+ end
249
+
250
+ it 'fails with empty postinstall action' do
251
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
252
+ expect { comp.add_postinstall_action([], '/bin/true') }.to raise_error(Vanagon::Error)
253
+ end
254
+
255
+ it 'adds the corect preremove action to the component' do
256
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
257
+ comp.add_preremove_action(['removal', 'upgrade'], ['chkconfig --list', '/bin/true'])
258
+ comp.add_preremove_action('removal', 'echo "hello, world"')
259
+ expect(comp._component.preremove_actions.count).to eq(2)
260
+ expect(comp._component.preremove_actions.first.scripts.count).to eq(2)
261
+ expect(comp._component.preremove_actions.first.pkg_state.count).to eq(2)
262
+ expect(comp._component.preremove_actions.first.pkg_state.first).to eq('removal')
263
+ expect(comp._component.preremove_actions.first.pkg_state.last).to eq('upgrade')
264
+ expect(comp._component.preremove_actions.first.scripts.first).to eq('chkconfig --list')
265
+ expect(comp._component.preremove_actions.first.scripts.last).to eq('/bin/true')
266
+
267
+ expect(comp._component.preremove_actions.last.scripts.count).to eq(1)
268
+ expect(comp._component.preremove_actions.last.pkg_state.count).to eq(1)
269
+ expect(comp._component.preremove_actions.last.pkg_state.first).to eq('removal')
270
+ expect(comp._component.preremove_actions.last.scripts.first).to eq('echo "hello, world"')
271
+ end
272
+
273
+ it 'fails with bad preremove action' do
274
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
275
+ expect { comp.add_preremove_action('foo', '/bin/true') }.to raise_error(Vanagon::Error)
276
+ end
277
+
278
+ it 'fails with empty preremove action' do
279
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
280
+ expect { comp.add_preremove_action([], '/bin/true') }.to raise_error(Vanagon::Error)
281
+ end
282
+
283
+ it 'adds the corect postremove action to the component' do
284
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
285
+ comp.add_postremove_action(['removal', 'upgrade'], ['chkconfig --list', '/bin/true'])
286
+ comp.add_postremove_action('removal', 'echo "hello, world"')
287
+ expect(comp._component.postremove_actions.count).to eq(2)
288
+ expect(comp._component.postremove_actions.first.scripts.count).to eq(2)
289
+ expect(comp._component.postremove_actions.first.pkg_state.count).to eq(2)
290
+ expect(comp._component.postremove_actions.first.pkg_state.first).to eq('removal')
291
+ expect(comp._component.postremove_actions.first.pkg_state.last).to eq('upgrade')
292
+ expect(comp._component.postremove_actions.first.scripts.first).to eq('chkconfig --list')
293
+ expect(comp._component.postremove_actions.first.scripts.last).to eq('/bin/true')
294
+
295
+ expect(comp._component.postremove_actions.last.scripts.count).to eq(1)
296
+ expect(comp._component.postremove_actions.last.pkg_state.count).to eq(1)
297
+ expect(comp._component.postremove_actions.last.pkg_state.first).to eq('removal')
298
+ expect(comp._component.postremove_actions.last.scripts.first).to eq('echo "hello, world"')
299
+ end
300
+
301
+ it 'fails with bad postremove action' do
302
+ comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
303
+ expect { comp.add_postremove_action('foo', '/bin/true') }.to raise_error(Vanagon::Error)
203
304
  end
204
305
 
205
- it 'adds the corect postinstall action to the component for rpm platforms' do
306
+ it 'fails with empty postremove action' do
206
307
  comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
207
- comp.add_postinstall_action('chkconfig --list')
208
- expect(comp._component.postinstall_actions).to include("chkconfig --list")
308
+ expect { comp.add_postremove_action([], '/bin/true') }.to raise_error(Vanagon::Error)
209
309
  end
210
310
  end
211
311
 
@@ -38,6 +38,8 @@ describe 'Vanagon::Engine::Pooler' do
38
38
  end
39
39
 
40
40
  it 'returns nil if there is no env var or file' do
41
+ expect(File).to receive(:expand_path).with('~/.vanagon-token').and_return(token_filename)
42
+ expect(File).to receive(:exist?).with(token_filename).and_return(false)
41
43
  expect(Vanagon::Engine::Pooler.new(platform).token).to be_nil
42
44
  end
43
45
  end
@@ -5,7 +5,7 @@ describe 'Vanagon::Platform::DSL' do
5
5
  let (:el_5_platform_block) { "platform 'el-5-fixture' do |plat| end" }
6
6
  let (:el_6_platform_block) { "platform 'el-6-fixture' do |plat| end" }
7
7
  let (:sles_platform_block) { "platform 'sles-test-fixture' do |plat| end" }
8
- let (:nxos_5_platform_block) { "platform 'nxos-5-fixture' do |plat| end" }
8
+ let (:cicso_wrlinux_platform_block) { "platform 'cisco-wrlinux-fixture' do |plat| end" }
9
9
  let (:solaris_10_platform_block) { "platform 'solaris-10-fixture' do |plat| end" }
10
10
  let (:solaris_11_platform_block) { "platform 'solaris-11-fixture' do |plat| end" }
11
11
 
@@ -15,11 +15,12 @@ describe 'Vanagon::Platform::DSL' do
15
15
  let(:el_definition) { "http://builds.delivery.puppetlabs.net/puppet-agent/0.2.1/repo_configs/rpm/pl-puppet-agent-0.2.1-el-7-x86_64" }
16
16
  let(:el_definition_rpm) { "http://builds.delivery.puppetlabs.net/puppet-agent/0.2.1/repo_configs/rpm/pl-puppet-agent-0.2.1-release.rpm" }
17
17
  let(:sles_definition) { "http://builds.delivery.puppetlabs.net/puppet-agent/0.2.2/repo_configs/rpm/pl-puppet-agent-0.2.2-sles-12-x86_64" }
18
- let(:sles_definition_rpm) { "http://builds.delivery.puppetlabs.net/puppet-agent/0.2.1/repo_configs/rpm/pl-puppet-agent-0.2.1-release.rpm" }
19
- let(:nxos_definition) { "http://builds.delivery.puppetlabs.net/puppet-agent/0.2.1/repo_configs/rpm/pl-puppet-agent-0.2.1-nxos-5-x86_64.repo" }
18
+ let(:sles_definition_rpm) { "http://builds.delivery.puppetlabs.net/puppet-agent/0.2.1/repo_configs/rpm/pl-puppet-agent-0.2.1-release-sles.rpm" }
19
+ let(:cisco_wrlinux_definition) { "http://builds.delivery.puppetlabs.net/puppet-agent/0.2.1/repo_configs/rpm/pl-puppet-agent-0.2.1-cisco-wrlinux-5-x86_64.repo" }
20
20
 
21
21
  let(:hex_value) { "906264d248061b0edb1a576cc9c8f6c7" }
22
22
 
23
+ # These apt_repo, yum_repo, and zypper_repo methods are all deprecated.
23
24
  describe '#apt_repo' do
24
25
  it "grabs the file and adds .list to it" do
25
26
  plat = Vanagon::Platform::DSL.new('debian-test-fixture')
@@ -54,26 +55,21 @@ describe 'Vanagon::Platform::DSL' do
54
55
  expect(plat._platform.provisioning).to include("curl -o '/etc/yum.repos.d/#{hex_value}-pl-puppet-agent-0.2.1-el-7-x86_64.repo' '#{el_definition}'")
55
56
  end
56
57
 
57
- it "downloads the repo file to the correct yum location for nxos" do
58
- plat = Vanagon::Platform::DSL.new('nxos-5-fixture')
58
+ # This test currently covers wrlinux 5 and 7
59
+ it "downloads the repo file to the correct yum location for wrlinux" do
60
+ plat = Vanagon::Platform::DSL.new('cisco-wrlinux-fixture')
59
61
  expect(SecureRandom).to receive(:hex).and_return(hex_value)
60
- plat.instance_eval(nxos_5_platform_block)
61
- plat.yum_repo(nxos_definition)
62
- expect(plat._platform.provisioning).to include("curl -o '/etc/yum/repos.d/#{hex_value}-pl-puppet-agent-0.2.1-nxos-5-x86_64.repo' '#{nxos_definition}'")
62
+ plat.instance_eval(cicso_wrlinux_platform_block)
63
+ plat.yum_repo(cisco_wrlinux_definition)
64
+ expect(plat._platform.provisioning).to include("curl -o '/etc/yum/repos.d/#{hex_value}-pl-puppet-agent-0.2.1-cisco-wrlinux-5-x86_64.repo' '#{cisco_wrlinux_definition}'")
63
65
  end
64
66
 
65
67
  describe "installs a rpm when given a rpm" do
66
- it 'uses yum on el 6 and higher' do
67
- plat = Vanagon::Platform::DSL.new('el-6-fixture')
68
- plat.instance_eval(el_6_platform_block)
69
- plat.yum_repo(el_definition_rpm)
70
- expect(plat._platform.provisioning).to include("yum localinstall -y '#{el_definition_rpm}'")
71
- end
72
-
73
- it 'uses rpm on el 5 and lower' do
68
+ it 'uses rpm everywhere' do
74
69
  plat = Vanagon::Platform::DSL.new('el-5-fixture')
75
70
  plat.instance_eval(el_5_platform_block)
76
71
  plat.yum_repo(el_definition_rpm)
72
+ expect(plat._platform.provisioning).to include("rpm -q curl > /dev/null || yum -y install curl")
77
73
  expect(plat._platform.provisioning).to include("curl -o local.rpm '#{el_definition_rpm}'; rpm -Uvh local.rpm; rm -f local.rpm")
78
74
  end
79
75
  end
@@ -0,0 +1,29 @@
1
+ require 'vanagon/platform'
2
+
3
+ describe "Vanagon::Platform::RPM::AIX" do
4
+ let(:block) {
5
+ %Q[ platform "aix-5.3-ppc" do |plat|
6
+ end
7
+ ]
8
+ }
9
+ let(:plat) { Vanagon::Platform::DSL.new('aix-5.3-ppc') }
10
+
11
+ before do
12
+ plat.instance_eval(block)
13
+ end
14
+
15
+ describe '#rpm_defines' do
16
+ it "doesn't include dist on aix" do
17
+ expect(plat._platform.rpm_defines).to_not include('dist')
18
+ end
19
+ end
20
+
21
+ describe "aix puts commands in weird places" do
22
+ it "uses /opt/freeware/bin everwhere" do
23
+ ['tar', 'patch', 'install'].each do |cmd|
24
+ expect(plat._platform.send(cmd.to_sym)).to eq(File.join('/opt/freeware/bin', cmd))
25
+ end
26
+ end
27
+ end
28
+ end
29
+