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

Methods

Public Instance methods

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

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

[Source]

    # File lib/boxgrinder-build/plugins/platform/vmware/vmware-plugin.rb, line 70
70:     def generate_scsi_chs
71:       disk_size = File.stat(@previous_deliverables.disk).size
72: 
73:       if disk_size < 1073741824
74:         h = 64
75:         s = 32
76:       else
77:         if disk_size < 2147483648
78:           h = 128
79:           s = 32
80:         else
81:           h = 255
82:           s = 63
83:         end
84:       end
85: 
86:       c = disk_size / (h*s*512)
87:       total_sectors = disk_size / 512
88: 
89:       [c.to_i, h.to_i, s.to_i, total_sectors.to_i]
90:     end

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

[Source]

    # File lib/boxgrinder-build/plugins/platform/vmware/vmware-plugin.rb, line 70
70:     def generate_scsi_chs
71:       disk_size = File.stat(@previous_deliverables.disk).size
72: 
73:       if disk_size < 1073741824
74:         h = 64
75:         s = 32
76:       else
77:         if disk_size < 2147483648
78:           h = 128
79:           s = 32
80:         else
81:           h = 255
82:           s = 63
83:         end
84:       end
85: 
86:       c = disk_size / (h*s*512)
87:       total_sectors = disk_size / 512
88: 
89:       [c.to_i, h.to_i, s.to_i, total_sectors.to_i]
90:     end

[Source]

    # File lib/boxgrinder-build/plugins/platform/vmware/vmware-plugin.rb, line 37
37:     def validate
38:       set_default_config_value('thin_disk', false)
39:       validate_plugin_config(['type'], 'http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#VMware_Platform_Plugin')
40:     end

[Source]

    # File lib/boxgrinder-build/plugins/platform/vmware/vmware-plugin.rb, line 37
37:     def validate
38:       set_default_config_value('thin_disk', false)
39:       validate_plugin_config(['type'], 'http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#VMware_Platform_Plugin')
40:     end

[Validate]