Class BoxGrinder::VMwarePlugin
In: lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb
lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb
Parent: BasePlugin

Methods

Public Instance methods

[Source]

    # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 24
24:     def after_init
25:       set_default_config_value('thin_disk', false)
26:       validate_plugin_config(['type'], 'http://community.jboss.org/docs/DOC-15528')
27: 
28:       register_deliverable(:vmx    => "#{@appliance_config.name}.vmx",
29:                            :readme => "README")
30: 
31:       if @plugin_config['type'].eql?('personal') and @plugin_config['thin_disk']
32:         register_deliverable(:disk => "#{@appliance_config.name}.vmdk")
33:       else
34:         register_deliverable(:disk => "#{@appliance_config.name}.raw",
35:                              :vmdk => "#{@appliance_config.name}.vmdk")
36:       end
37:     end

[Source]

    # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 24
24:     def after_init
25:       set_default_config_value('thin_disk', false)
26:       validate_plugin_config(['type'], 'http://community.jboss.org/docs/DOC-15528')
27: 
28:       register_deliverable(:vmx    => "#{@appliance_config.name}.vmx",
29:                            :readme => "README")
30: 
31:       if @plugin_config['type'].eql?('personal') and @plugin_config['thin_disk']
32:         register_deliverable(:disk => "#{@appliance_config.name}.vmdk")
33:       else
34:         register_deliverable(:disk => "#{@appliance_config.name}.raw",
35:                              :vmdk => "#{@appliance_config.name}.vmdk")
36:       end
37:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 176
176:     def build_vmware_enterprise
177:       @log.debug "Building VMware enterprise image."
178: 
179:       copy_raw_image
180: 
181:       # defaults for ESXi (maybe for others too)
182:       @appliance_config.hardware.network = "VM Network" if @appliance_config.hardware.network.eql?("NAT")
183: 
184:       # create .vmx file
185:       vmx_data = change_common_vmx_values
186:       vmx_data += "ethernet0.networkName = \"#{@appliance_config.hardware.network}\""
187: 
188:       File.open(@deliverables.vmx, "w") { |f| f.write(vmx_data) }
189: 
190:       # create disk descriptor file
191:       File.open(@deliverables.vmdk, "w") { |f| f.write(change_vmdk_values("vmfs")) }
192: 
193:       @log.debug "VMware enterprise image was built."
194:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 176
176:     def build_vmware_enterprise
177:       @log.debug "Building VMware enterprise image."
178: 
179:       copy_raw_image
180: 
181:       # defaults for ESXi (maybe for others too)
182:       @appliance_config.hardware.network = "VM Network" if @appliance_config.hardware.network.eql?("NAT")
183: 
184:       # create .vmx file
185:       vmx_data = change_common_vmx_values
186:       vmx_data += "ethernet0.networkName = \"#{@appliance_config.hardware.network}\""
187: 
188:       File.open(@deliverables.vmx, "w") { |f| f.write(vmx_data) }
189: 
190:       # create disk descriptor file
191:       File.open(@deliverables.vmdk, "w") { |f| f.write(change_vmdk_values("vmfs")) }
192: 
193:       @log.debug "VMware enterprise image was built."
194:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 156
156:     def build_vmware_personal
157:       @log.debug "Building VMware personal image."
158: 
159:       if @plugin_config['thin_disk']
160:         @log.debug "Using qemu-img to convert the image..."
161:         @exec_helper.execute "qemu-img convert -f raw -O vmdk -o compat6 #{@previous_deliverables.disk} #{@deliverables.disk}"
162:         @log.debug "Conversion done."
163:       else
164:         copy_raw_image
165: 
166:         # create disk descriptor file
167:         File.open(@deliverables.vmdk, "w") { |f| f.write(change_vmdk_values("monolithicFlat")) }
168:       end
169: 
170:       # create .vmx file
171:       File.open(@deliverables.vmx, "w") { |f| f.write(change_common_vmx_values) }
172: 
173:       @log.debug "VMware personal image was built."
174:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 156
156:     def build_vmware_personal
157:       @log.debug "Building VMware personal image."
158: 
159:       if @plugin_config['thin_disk']
160:         @log.debug "Using qemu-img to convert the image..."
161:         @exec_helper.execute "qemu-img convert -f raw -O vmdk -o compat6 #{@previous_deliverables.disk} #{@deliverables.disk}"
162:         @log.debug "Conversion done."
163:       else
164:         copy_raw_image
165: 
166:         # create disk descriptor file
167:         File.open(@deliverables.vmdk, "w") { |f| f.write(change_vmdk_values("monolithicFlat")) }
168:       end
169: 
170:       # create .vmx file
171:       File.open(@deliverables.vmx, "w") { |f| f.write(change_common_vmx_values) }
172: 
173:       @log.debug "VMware personal image was built."
174:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 114
114:     def change_common_vmx_values
115:       vmx_data = File.open("#{File.dirname(__FILE__)}/src/base.vmx").read
116: 
117:       # replace version with current appliance version
118:       vmx_data.gsub!(/#VERSION#/, "#{@appliance_config.version}.#{@appliance_config.release}")
119:       # replace builder with current builder name and version
120:       vmx_data.gsub!(/#BUILDER#/, "#{@config.name} #{@config.version_with_release}")
121:       # change name
122:       vmx_data.gsub!(/#NAME#/, @appliance_config.name.to_s)
123:       # and summary
124:       vmx_data.gsub!(/#SUMMARY#/, @appliance_config.summary.to_s)
125:       # replace guestOS informations to: linux or otherlinux-64, this seems to be the savests values
126:       vmx_data.gsub!(/#GUESTOS#/, "#{@appliance_config.hardware.arch == "x86_64" ? "otherlinux-64" : "linux"}")
127:       # memory size
128:       vmx_data.gsub!(/#MEM_SIZE#/, @appliance_config.hardware.memory.to_s)
129:       # memory size
130:       vmx_data.gsub!(/#VCPU#/, @appliance_config.hardware.cpus.to_s)
131:       # network name
132:       # vmx_data.gsub!( /#NETWORK_NAME#/, @image_config.network_name )
133: 
134:       vmx_data
135:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 114
114:     def change_common_vmx_values
115:       vmx_data = File.open("#{File.dirname(__FILE__)}/src/base.vmx").read
116: 
117:       # replace version with current appliance version
118:       vmx_data.gsub!(/#VERSION#/, "#{@appliance_config.version}.#{@appliance_config.release}")
119:       # replace builder with current builder name and version
120:       vmx_data.gsub!(/#BUILDER#/, "#{@config.name} #{@config.version_with_release}")
121:       # change name
122:       vmx_data.gsub!(/#NAME#/, @appliance_config.name.to_s)
123:       # and summary
124:       vmx_data.gsub!(/#SUMMARY#/, @appliance_config.summary.to_s)
125:       # replace guestOS informations to: linux or otherlinux-64, this seems to be the savests values
126:       vmx_data.gsub!(/#GUESTOS#/, "#{@appliance_config.hardware.arch == "x86_64" ? "otherlinux-64" : "linux"}")
127:       # memory size
128:       vmx_data.gsub!(/#MEM_SIZE#/, @appliance_config.hardware.memory.to_s)
129:       # memory size
130:       vmx_data.gsub!(/#VCPU#/, @appliance_config.hardware.cpus.to_s)
131:       # network name
132:       # vmx_data.gsub!( /#NETWORK_NAME#/, @image_config.network_name )
133: 
134:       vmx_data
135:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 90
 90:     def change_vmdk_values(type)
 91:       vmdk_data = File.open("#{File.dirname(__FILE__)}/src/base.vmdk").read
 92: 
 93:       disk_size = 0.0
 94:       @appliance_config.hardware.partitions.values.each { |part| disk_size += part['size'].to_f }
 95: 
 96:       c, h, s, total_sectors = generate_scsi_chs(disk_size)
 97: 
 98:       is_enterprise = type.eql?("vmfs")
 99: 
100:       vmdk_data.gsub!(/#NAME#/, @appliance_config.name)
101:       vmdk_data.gsub!(/#TYPE#/, type)
102:       vmdk_data.gsub!(/#EXTENT_TYPE#/, is_enterprise ? "VMFS" : "FLAT")
103:       vmdk_data.gsub!(/#NUMBER#/, is_enterprise ? "" : "0")
104:       vmdk_data.gsub!(/#HW_VERSION#/, "7")
105:       vmdk_data.gsub!(/#CYLINDERS#/, c.to_s)
106:       vmdk_data.gsub!(/#HEADS#/, h.to_s)
107:       vmdk_data.gsub!(/#SECTORS#/, s.to_s)
108:       vmdk_data.gsub!(/#TOTAL_SECTORS#/, total_sectors.to_s)
109:       vmdk_data.gsub!(/#THIN_PROVISIONED#/, @plugin_config['thin_disk'] ? "1" : "0")
110: 
111:       vmdk_data
112:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 90
 90:     def change_vmdk_values(type)
 91:       vmdk_data = File.open("#{File.dirname(__FILE__)}/src/base.vmdk").read
 92: 
 93:       disk_size = 0.0
 94:       @appliance_config.hardware.partitions.values.each { |part| disk_size += part['size'].to_f }
 95: 
 96:       c, h, s, total_sectors = generate_scsi_chs(disk_size)
 97: 
 98:       is_enterprise = type.eql?("vmfs")
 99: 
100:       vmdk_data.gsub!(/#NAME#/, @appliance_config.name)
101:       vmdk_data.gsub!(/#TYPE#/, type)
102:       vmdk_data.gsub!(/#EXTENT_TYPE#/, is_enterprise ? "VMFS" : "FLAT")
103:       vmdk_data.gsub!(/#NUMBER#/, is_enterprise ? "" : "0")
104:       vmdk_data.gsub!(/#HW_VERSION#/, "7")
105:       vmdk_data.gsub!(/#CYLINDERS#/, c.to_s)
106:       vmdk_data.gsub!(/#HEADS#/, h.to_s)
107:       vmdk_data.gsub!(/#SECTORS#/, s.to_s)
108:       vmdk_data.gsub!(/#TOTAL_SECTORS#/, total_sectors.to_s)
109:       vmdk_data.gsub!(/#THIN_PROVISIONED#/, @plugin_config['thin_disk'] ? "1" : "0")
110: 
111:       vmdk_data
112:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 150
150:     def copy_raw_image
151:       @log.debug "Copying VMware image file, this may take several minutes..."
152:       @exec_helper.execute "cp #{@previous_deliverables.disk} #{@deliverables.disk}"
153:       @log.debug "VMware image copied."
154:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 150
150:     def copy_raw_image
151:       @log.debug "Copying VMware image file, this may take several minutes..."
152:       @exec_helper.execute "cp #{@previous_deliverables.disk} #{@deliverables.disk}"
153:       @log.debug "VMware image copied."
154:     end

[Source]

    # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 58
58:     def create_readme
59:       readme = File.open("#{File.dirname(__FILE__)}/src/README-#{@plugin_config['type']}").read
60:       readme.gsub!(/#APPLIANCE_NAME#/, @appliance_config.name)
61:       readme.gsub!(/#NAME#/, @config.name)
62:       readme.gsub!(/#VERSION#/, @config.version_with_release)
63: 
64:       readme
65:     end

[Source]

    # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 58
58:     def create_readme
59:       readme = File.open("#{File.dirname(__FILE__)}/src/README-#{@plugin_config['type']}").read
60:       readme.gsub!(/#APPLIANCE_NAME#/, @appliance_config.name)
61:       readme.gsub!(/#NAME#/, @config.name)
62:       readme.gsub!(/#VERSION#/, @config.version_with_release)
63: 
64:       readme
65:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 137
137:     def customize_image
138:       unless @appliance_config.post['vmware'].nil?
139:         @image_helper.customize(@deliverables.disk) do |guestfs, guestfs_helper|
140:           @appliance_config.post['vmware'].each do |cmd|
141:             guestfs_helper.sh(cmd, :arch => @appliance_config.hardware.arch)
142:           end
143:           @log.debug "Post commands from appliance definition file executed."
144:         end
145:       else
146:         @log.debug "No commands specified, skipping."
147:       end
148:     end

[Source]

     # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 137
137:     def customize_image
138:       unless @appliance_config.post['vmware'].nil?
139:         @image_helper.customize(@deliverables.disk) do |guestfs, guestfs_helper|
140:           @appliance_config.post['vmware'].each do |cmd|
141:             guestfs_helper.sh(cmd, :arch => @appliance_config.hardware.arch)
142:           end
143:           @log.debug "Post commands from appliance definition file executed."
144:         end
145:       else
146:         @log.debug "No commands specified, skipping."
147:       end
148:     end

[Source]

    # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 39
39:     def execute
40:       @log.info "Converting image to VMware #{@plugin_config['type']} format..."
41: 
42:       case @plugin_config['type']
43:         when 'personal'
44:           build_vmware_personal
45:         when 'enterprise'
46:           build_vmware_enterprise
47:         else
48:           raise "Not known VMware format specified. Available are: personal and enterprise. See http://community.jboss.org/docs/DOC-15528 for more info."
49:       end
50: 
51:       customize_image
52: 
53:       File.open(@deliverables.readme, "w") { |f| f.write(create_readme) }
54: 
55:       @log.info "Image converted to VMware format."
56:     end

[Source]

    # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 39
39:     def execute
40:       @log.info "Converting image to VMware #{@plugin_config['type']} format..."
41: 
42:       case @plugin_config['type']
43:         when 'personal'
44:           build_vmware_personal
45:         when 'enterprise'
46:           build_vmware_enterprise
47:         else
48:           raise "Not known VMware format specified. Available are: personal and enterprise. See http://community.jboss.org/docs/DOC-15528 for more info."
49:       end
50: 
51:       customize_image
52: 
53:       File.open(@deliverables.readme, "w") { |f| f.write(create_readme) }
54: 
55:       @log.info "Image converted to VMware format."
56:     end

returns value of cylinders, heads and sector for selected disk size (in GB) kb.vmware.com/kb/1026254

[Source]

    # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 69
69:     def generate_scsi_chs(disk_size)
70:       if disk_size < 1
71:         h = 64
72:         s = 32
73:       else
74:         if disk_size < 2
75:           h = 128
76:           s = 32
77:         else
78:           h = 255
79:           s = 63
80:         end
81:       end
82: 
83:       #               GB          MB     KB     B
84:       c             = disk_size * 1024 * 1024 * 1024 / (h*s*512)
85:       total_sectors = disk_size * 1024 * 1024 * 1024 / 512
86: 
87:       [c.to_i, h.to_i, s.to_i, total_sectors.to_i]
88:     end

returns value of cylinders, heads and sector for selected disk size (in GB) kb.vmware.com/kb/1026254

[Source]

    # File lib/boxgrinder-build-vmware-platform-plugin/vmware-plugin.rb, line 69
69:     def generate_scsi_chs(disk_size)
70:       if disk_size < 1
71:         h = 64
72:         s = 32
73:       else
74:         if disk_size < 2
75:           h = 128
76:           s = 32
77:         else
78:           h = 255
79:           s = 63
80:         end
81:       end
82: 
83:       #               GB          MB     KB     B
84:       c             = disk_size * 1024 * 1024 * 1024 / (h*s*512)
85:       total_sectors = disk_size * 1024 * 1024 * 1024 / 512
86: 
87:       [c.to_i, h.to_i, s.to_i, total_sectors.to_i]
88:     end

[Validate]