boxgrinder-build 0.4.1 → 0.5.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.
Files changed (71) hide show
  1. data/CHANGELOG +7 -0
  2. data/Manifest +0 -0
  3. data/Rakefile +11 -0
  4. data/bin/boxgrinder-build +33 -27
  5. data/boxgrinder-build.gemspec +38 -0
  6. data/lib/boxgrinder-build/appliance.rb +32 -41
  7. data/lib/boxgrinder-build/helpers/appliance-customize-helper.rb +3 -48
  8. data/lib/boxgrinder-build/helpers/guestfs-helper.rb +98 -12
  9. data/lib/boxgrinder-build/helpers/linux-helper.rb +69 -0
  10. data/lib/boxgrinder-build/helpers/package-helper.rb +20 -11
  11. data/lib/boxgrinder-build/helpers/plugin-helper.rb +32 -32
  12. data/lib/boxgrinder-build/managers/plugin-manager.rb +98 -0
  13. data/lib/boxgrinder-build/plugins/base-plugin.rb +70 -17
  14. data/spec/Rakefile +13 -0
  15. data/spec/appliance-spec.rb +195 -0
  16. data/spec/helpers/appliance-customize-helper-spec.rb +30 -0
  17. data/spec/helpers/guestfs-helper-spec.rb +129 -0
  18. data/spec/helpers/linux-helper-spec.rb +50 -0
  19. data/spec/helpers/package-helper-spec.rb +6 -0
  20. data/spec/helpers/plugin-helper-spec.rb +63 -0
  21. data/spec/managers/plugin-manager-spec.rb +27 -0
  22. data/spec/plugins/base-plugin-spec.rb +89 -0
  23. data/spec/rspec/src/appliances/jeos-f13.appl +27 -0
  24. metadata +60 -157
  25. data/docs/examples/appliances/appliances.appl +0 -5
  26. data/docs/examples/appliances/minimal.appl +0 -9
  27. data/docs/examples/appliances/mix.appl +0 -8
  28. data/docs/examples/appliances/packages.appl +0 -13
  29. data/docs/node-info/pom.xml +0 -31
  30. data/docs/node-info/src/main/webapp/META-INF/MANIFEST.MF +0 -3
  31. data/docs/node-info/src/main/webapp/WEB-INF/web.xml +0 -7
  32. data/docs/node-info/src/main/webapp/index.jsp +0 -70
  33. data/lib/boxgrinder-build/helpers/rake-helper.rb +0 -71
  34. data/lib/boxgrinder-build/managers/base-plugin-manager.rb +0 -62
  35. data/lib/boxgrinder-build/managers/delivery-plugin-manager.rb +0 -39
  36. data/lib/boxgrinder-build/managers/operating-system-plugin-manager.rb +0 -6
  37. data/lib/boxgrinder-build/managers/platform-plugin-manager.rb +0 -26
  38. data/lib/boxgrinder-build/plugins/delivery/base/base-delivery-plugin.rb +0 -43
  39. data/lib/boxgrinder-build/plugins/delivery/local/local-plugin.rb +0 -57
  40. data/lib/boxgrinder-build/plugins/delivery/s3/aws-helper.rb +0 -64
  41. data/lib/boxgrinder-build/plugins/delivery/s3/s3-plugin.rb +0 -190
  42. data/lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb +0 -159
  43. data/lib/boxgrinder-build/plugins/os/base/kickstart.rb +0 -148
  44. data/lib/boxgrinder-build/plugins/os/base/rhel-based-os-plugin.rb +0 -51
  45. data/lib/boxgrinder-build/plugins/os/base/rpm-based-os-plugin.rb +0 -134
  46. data/lib/boxgrinder-build/plugins/os/base/src/appliance.ks.erb +0 -41
  47. data/lib/boxgrinder-build/plugins/os/base/src/base.repo +0 -4
  48. data/lib/boxgrinder-build/plugins/os/base/src/motd.init +0 -21
  49. data/lib/boxgrinder-build/plugins/os/base/validators/rpm-dependency-validator.rb +0 -162
  50. data/lib/boxgrinder-build/plugins/os/base-operating-system-plugin.rb +0 -37
  51. data/lib/boxgrinder-build/plugins/os/centos/centos-plugin.rb +0 -52
  52. data/lib/boxgrinder-build/plugins/os/fedora/fedora-plugin.rb +0 -74
  53. data/lib/boxgrinder-build/plugins/os/rhel/rhel-plugin.rb +0 -40
  54. data/lib/boxgrinder-build/plugins/platform/base-platform-plugin.rb +0 -37
  55. data/lib/boxgrinder-build/plugins/platform/ec2/ec2-plugin.rb +0 -332
  56. data/lib/boxgrinder-build/plugins/platform/ec2/src/f12/yum.conf +0 -24
  57. data/lib/boxgrinder-build/plugins/platform/ec2/src/f12-i386-boxgrinder.repo +0 -11
  58. data/lib/boxgrinder-build/plugins/platform/ec2/src/f12-x86_64-boxgrinder.repo +0 -11
  59. data/lib/boxgrinder-build/plugins/platform/ec2/src/fstab_32bit +0 -8
  60. data/lib/boxgrinder-build/plugins/platform/ec2/src/fstab_64bit +0 -8
  61. data/lib/boxgrinder-build/plugins/platform/ec2/src/ifcfg-eth0 +0 -7
  62. data/lib/boxgrinder-build/plugins/platform/ec2/src/rc_local +0 -29
  63. data/lib/boxgrinder-build/plugins/platform/vmware/src/README +0 -42
  64. data/lib/boxgrinder-build/plugins/platform/vmware/src/base.vmdk +0 -19
  65. data/lib/boxgrinder-build/plugins/platform/vmware/src/base.vmx +0 -45
  66. data/lib/boxgrinder-build/plugins/platform/vmware/vmware-plugin.rb +0 -181
  67. data/lib/boxgrinder-build/validators/appliance-config-parameter-validator.rb +0 -37
  68. data/lib/boxgrinder-build/validators/appliance-validator.rb +0 -84
  69. data/lib/boxgrinder-build/validators/config-validator.rb +0 -48
  70. data/lib/boxgrinder-build/validators/ssh-validator.rb +0 -35
  71. data/lib/boxgrinder-build/validators/validator.rb +0 -91
@@ -1,9 +0,0 @@
1
- name: minimal
2
- summary: This is an appliance with minimal package set
3
- os:
4
- name: fedora
5
- version: 12
6
- hardware:
7
- partitions:
8
- /:
9
- size: 2
@@ -1,8 +0,0 @@
1
- name: mix
2
- summary: This is an appliance with additional packages and appliances
3
- appliances:
4
- - packages
5
- packages:
6
- includes:
7
- - texlive-latex
8
- - subversion
@@ -1,13 +0,0 @@
1
- name: packages
2
- summary: This is an appliance with additional packages
3
- os:
4
- name: fedora
5
- version: 12
6
- hardware:
7
- partitions:
8
- /:
9
- size: 1
10
- packages:
11
- includes:
12
- - mc
13
- - subversion
@@ -1,31 +0,0 @@
1
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
- <modelVersion>4.0.0</modelVersion>
4
- <groupId>org.jboss.cloud</groupId>
5
- <artifactId>node-info</artifactId>
6
- <packaging>war</packaging>
7
- <version>1.0-SNAPSHOT</version>
8
- <name>JBoss-Cloud node info</name>
9
- <url>http://oddthesis.org/</url>
10
- <dependencies>
11
- <dependency>
12
- <groupId>junit</groupId>
13
- <artifactId>junit</artifactId>
14
- <version>3.8.1</version>
15
- <scope>test</scope>
16
- </dependency>
17
- </dependencies>
18
- <developers>
19
- <developer>
20
- <name>Marek Goldmann</name>
21
- <url>http://ordinarythoughts.org/</url>
22
- </developer>
23
- </developers>
24
- <organization>
25
- <name>JBoss</name>
26
- <url>http://jboss.org/</url>
27
- </organization>
28
- <build>
29
- <finalName>node-info</finalName>
30
- </build>
31
- </project>
@@ -1,3 +0,0 @@
1
- Manifest-Version: 1.0
2
- Class-Path:
3
-
@@ -1,7 +0,0 @@
1
- <!DOCTYPE web-app PUBLIC
2
- "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
3
- "http://java.sun.com/dtd/web-app_2_3.dtd" >
4
-
5
- <web-app>
6
- <display-name>Archetype Created Web Application</display-name>
7
- </web-app>
@@ -1,70 +0,0 @@
1
- <%@page contentType="text/html"
2
- import="java.net.*,java.util.*,java.io.*"%>
3
-
4
- <html>
5
- <head>
6
- <title>JBoss-Cloud node info</title>
7
- </head>
8
- <body>
9
-
10
- <%
11
- //borrowed from jmx-console
12
-
13
- String bindAddress = "";
14
- String serverName = "";
15
- try {
16
- bindAddress = System.getProperty("jboss.bind.address", "");
17
- serverName = System.getProperty("jboss.server.name", "");
18
- } catch (SecurityException se) {
19
- }
20
-
21
- String hostname = "";
22
- try {
23
- hostname = InetAddress.getLocalHost().getHostName();
24
- } catch (IOException e) {
25
- }
26
-
27
- String hostInfo = hostname;
28
- if (!bindAddress.equals("")) {
29
- hostInfo = hostInfo + " (" + bindAddress + ")";
30
- }
31
- %>
32
-
33
-
34
- <table>
35
- <%
36
- if (bindAddress.length() > 0) {
37
- %>
38
- <tr>
39
- <td>JBoss Address:</td>
40
- <td><%=bindAddress%></td>
41
- </tr>
42
-
43
- <%
44
- }
45
- if (serverName.length() > 0) {
46
- %>
47
- <tr>
48
- <td>JBoss profile:</td>
49
- <td><%=serverName%></td>
50
- </tr>
51
- <%
52
- }
53
- %>
54
- <tr>
55
- <td>Server name:</td>
56
- <td><%=request.getServerName()%></td>
57
- </tr>
58
- <tr>
59
- <td>Server port:</td>
60
- <td><%=request.getServerPort()%></td>
61
- </tr>
62
- <tr>
63
- <td>Remote address:</td>
64
- <td><%=request.getRemoteAddr()%></td>
65
- </tr>
66
-
67
- </table>
68
-
69
- </body>
70
- </html>
@@ -1,71 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'rubygems'
22
- require 'boxgrinder-build/boxgrinder'
23
- require 'boxgrinder-core/helpers/log-helper'
24
-
25
- gem 'amazon-ec2', '>= 0.9.6'
26
- gem 'aws-s3', '>= 0.6.2'
27
- gem 'net-sftp', '>= 2.0.4'
28
- gem 'net-ssh', '>= 2.0.20'
29
-
30
- module Rake
31
- class Task
32
- alias_method :execute_original_boxgrinder, :execute
33
-
34
- def execute( args = nil )
35
- begin
36
- execute_original_boxgrinder( args )
37
- rescue => e
38
- log = BoxGrinder::LOG
39
- log.fatal e.info
40
- log.fatal "Aborting: #{e.message}. See previous errors for more information."
41
- abort
42
- end
43
- end
44
- end
45
- end
46
-
47
- module BoxGrinder
48
-
49
- LOG = LogHelper.new
50
-
51
- class RakeHelper
52
- def initialize( project_config = {} )
53
- log = LOG
54
- begin
55
- log.debug "Running new Rake session..."
56
- @config = BoxGrinder.new( project_config ).config
57
- rescue ValidationError => e
58
- log.fatal "ValidationError: #{e.message}."
59
- abort
60
- rescue => e
61
- log.fatal e
62
- log.fatal "Aborting: #{e.message}. See previous errors for more information."
63
- abort
64
- end
65
- end
66
-
67
- attr_reader :config
68
- end
69
- end
70
-
71
-
@@ -1,62 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'singleton'
22
-
23
- module BoxGrinder
24
- class BasePluginManager
25
- include Singleton
26
-
27
- def initialize
28
- @plugin_classes = []
29
- @plugins = {}
30
- end
31
-
32
- def <<(plugin_class)
33
- @plugin_classes << plugin_class
34
- end
35
-
36
- def initialize_plugins( options = {} )
37
- log = options[:log] || Logger.new(STDOUT)
38
-
39
- @plugin_classes.each do |plugin_class|
40
- begin
41
- plugin = plugin_class.new
42
- rescue => e
43
- raise "Error while initializing #{plugin_class} plugin.", e
44
- end
45
-
46
- next unless plugin.respond_to?(:info)
47
-
48
- plugin.instance_variable_set( :@log, log )
49
-
50
- if @plugins[plugin.info[:name]].nil?
51
- @plugins[plugin.info[:name]] = plugin
52
- else
53
- raise "We already have registered plugin for #{plugin.info[:name]}."
54
- end
55
- end
56
- self
57
- end
58
-
59
- attr_reader :plugins
60
-
61
- end
62
- end
@@ -1,39 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'boxgrinder-build/managers/base-plugin-manager'
22
-
23
- module BoxGrinder
24
- class DeliveryPluginManager < BasePluginManager
25
- def types
26
- t = {}
27
-
28
- @plugins.each_value do |plugin|
29
- plugin.info[:type].each do |type|
30
- t[type] = plugin
31
- end
32
-
33
- end
34
-
35
- t
36
- end
37
-
38
- end
39
- end
@@ -1,6 +0,0 @@
1
- require 'boxgrinder-build/managers/base-plugin-manager'
2
-
3
- module BoxGrinder
4
- class OperatingSystemPluginManager < BasePluginManager
5
- end
6
- end
@@ -1,26 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'boxgrinder-build/managers/base-plugin-manager'
22
-
23
- module BoxGrinder
24
- class PlatformPluginManager < BasePluginManager
25
- end
26
- end
@@ -1,43 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'boxgrinder-build/managers/delivery-plugin-manager'
22
- require 'boxgrinder-build/plugins/base-plugin'
23
-
24
- module BoxGrinder
25
- class BaseDeliveryPlugin < BasePlugin
26
- alias_method :execute_original, :execute
27
-
28
- def execute( deliverables, type)
29
- raise "Delivery cannot be started before the plugin isn't initialized" if @initialized.nil?
30
- raise "Not valid delivery type selected for #{info[:name]} plugin: #{type}. Available types: #{info[:type].join(" ")}" unless info[:type].include?(type)
31
-
32
- execute_original( deliverables, type )
33
- end
34
-
35
- def self.inherited(klass)
36
- DeliveryPluginManager.instance << klass
37
- end
38
-
39
- def already_delivered?
40
- false
41
- end
42
- end
43
- end
@@ -1,57 +0,0 @@
1
- require 'boxgrinder-build/plugins/delivery/base/base-delivery-plugin'
2
-
3
- module BoxGrinder
4
- class LocalPlugin < BaseDeliveryPlugin
5
- def info
6
- {
7
- :name => :local,
8
- :type => [:local],
9
- :full_name => "Local file system"
10
- }
11
- end
12
-
13
- def after_init
14
- set_default_config_value('overwrite', true)
15
- set_default_config_value('package', true)
16
- end
17
-
18
- def execute(deliverables, type = :local)
19
- validate_plugin_config( [ 'path' ], 'http://community.jboss.org/docs/DOC-15216' )
20
-
21
- files = []
22
-
23
- if @plugin_config['package']
24
- files << PackageHelper.new(@config, @appliance_config, {:log => @log, :exec_helper => @exec_helper}).package(deliverables)
25
- else
26
- files << deliverables[:disk]
27
-
28
- [:metadata, :other].each do |deliverable_type|
29
- deliverables[deliverable_type].each_value do |file|
30
- files << file
31
- end
32
- end
33
- end
34
-
35
- if @plugin_config['overwrite'] or !already_delivered?(files)
36
- FileUtils.mkdir_p @plugin_config['path']
37
-
38
- @log.debug "Copying files to destination..."
39
-
40
- files.each do |file|
41
- @log.debug "Copying #{file}..."
42
- FileUtils.cp(file, @plugin_config['path'])
43
- end
44
- @log.info "Appliance delivered to #{@plugin_config['path']}."
45
- else
46
- @log.info "Appliance already delivered to #{@plugin_config['path']}."
47
- end
48
- end
49
-
50
- def already_delivered?(files)
51
- files.each do |file|
52
- return false unless File.exists?("#{@plugin_config['path']}/#{File.basename(file)}")
53
- end
54
- true
55
- end
56
- end
57
- end
@@ -1,64 +0,0 @@
1
- # JBoss, Home of Professional Open Source
2
- # Copyright 2009, Red Hat Middleware LLC, and individual contributors
3
- # by the @authors tag. See the copyright.txt in the distribution for a
4
- # full listing of individual contributors.
5
- #
6
- # This is free software; you can redistribute it and/or modify it
7
- # under the terms of the GNU Lesser General Public License as
8
- # published by the Free Software Foundation; either version 2.1 of
9
- # the License, or (at your option) any later version.
10
- #
11
- # This software is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- # Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public
17
- # License along with this software; if not, write to the Free
18
- # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
- # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
20
-
21
- require 'AWS'
22
- require 'aws/s3'
23
-
24
- module BoxGrinder
25
- class AWSHelper
26
- def initialize( config, appliance_config, plugin_config )
27
- @config = config
28
- @appliance_config = appliance_config
29
- @plugin_config = plugin_config
30
-
31
- # remove dashes from account number
32
- @plugin_config['account_number'] = @plugin_config['account_number'].to_s.gsub(/-/, '')
33
-
34
- @ec2 = AWS::EC2::Base.new(:access_key_id => @plugin_config['access_key'], :secret_access_key => @plugin_config['secret_access_key'])
35
- @s3 = AWS::S3::Base.establish_connection!(:access_key_id => @plugin_config['access_key'], :secret_access_key => @plugin_config['secret_access_key'] )
36
- end
37
-
38
- attr_reader :plugin_config
39
- attr_reader :ec2
40
- attr_reader :s3
41
-
42
- def bucket_key( appliance_name, path )
43
- "#{@plugin_config['bucket']}#{path}/#{appliance_name}/#{@appliance_config.version}.#{@appliance_config.release}/#{@appliance_config.hardware.arch}"
44
- end
45
-
46
- def bucket_manifest_key( appliance_name, path )
47
- "#{bucket_key( appliance_name, path )}/#{appliance_name}.ec2.manifest.xml"
48
- end
49
-
50
- def ami_info( appliance_name, path )
51
- ami_info = nil
52
-
53
- images = @ec2.describe_images( :owner_id => @plugin_config['account_number'] ).imagesSet
54
-
55
- return nil if images.nil?
56
-
57
- for image in images.item do
58
- ami_info = image if (image.imageLocation.eql?( bucket_manifest_key( appliance_name, path ) ))
59
- end
60
-
61
- ami_info
62
- end
63
- end
64
- end