vanagon 0.3.19 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+