mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-07 04:56:58 +02:00
Merge pull request #366 from higebu/niftycloud-ovf
vm_image_util: changed niftycloud format to ovf
This commit is contained in:
commit
b1a46478f7
116
build_library/niftycloud_ovf.sh
Executable file
116
build_library/niftycloud_ovf.sh
Executable file
@ -0,0 +1,116 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPT_ROOT=$(readlink -f $(dirname "$0")/..)
|
||||
. "${SCRIPT_ROOT}/common.sh" || exit 1
|
||||
|
||||
DEFINE_string vm_name "CoreOS" "Name for this VM"
|
||||
DEFINE_string disk_vmdk "" "Disk image to reference, only basename is used."
|
||||
DEFINE_integer memory_size 1024 "Memory size in MB"
|
||||
DEFINE_string output_ovf "" "Path to write ofv file to, required."
|
||||
|
||||
# Parse command line
|
||||
FLAGS "$@" || exit 1
|
||||
eval set -- "${FLAGS_ARGV}"
|
||||
|
||||
# Die on any errors.
|
||||
switch_to_strict_mode
|
||||
|
||||
if [[ ! -e "${FLAGS_disk_vmdk}" ]]; then
|
||||
echo "No such disk image '${FLAGS_disk_vmdk}'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DISK_NAME=$(basename "${FLAGS_disk_vmdk}")
|
||||
DISK_UUID=$(uuidgen)
|
||||
DISK_SIZE_BYTES=$(qemu-img info -f vmdk "${FLAGS_disk_vmdk}" \
|
||||
| gawk 'match($0, /^virtual size:.*\(([0-9]+) bytes\)/, a) {print a[1]}')
|
||||
DISK_FILE_SIZE_BYTES=$(ls -l ${FLAGS_disk_vmdk} | awk '{print $5}')
|
||||
|
||||
if [[ -z "${DISK_SIZE_BYTES}" ]]; then
|
||||
echo "Unable to determine virtual size of ${FLAGS_disk_vmdk}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Date format as used in ovf
|
||||
datez() {
|
||||
date -u "+%Y-%m-%dT%H:%M:%SZ"
|
||||
}
|
||||
|
||||
if [[ -n "${FLAGS_output_ovf}" ]]; then
|
||||
cat >"${FLAGS_output_ovf}" <<EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Envelope xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:cim="http://schemas.dmtf.org/wbem/wscim/1/common" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vmw="http://www.vmware.com/schema/ovf" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<References>
|
||||
<File ovf:href="${DISK_NAME}" ovf:id="file1" ovf:size="${DISK_FILE_SIZE_BYTES}"/>
|
||||
</References>
|
||||
<DiskSection>
|
||||
<Info>List of the virtual disks used in the package</Info>
|
||||
<Disk ovf:capacity="30" ovf:capacityAllocationUnits="byte * 2^30" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" ovf:populatedSize="${DISK_SIZE_BYTES}"/>
|
||||
</DiskSection>
|
||||
<NetworkSection>
|
||||
<Info>Logical networks used in the package</Info>
|
||||
<Network ovf:name="bridged">
|
||||
<Description>Logical network used by this appliance.</Description>
|
||||
</Network>
|
||||
</NetworkSection>
|
||||
<VirtualSystem ovf:id="${FLAGS_vm_name}">
|
||||
<Info>A virtual machine</Info>
|
||||
<Name>${FLAGS_vm_name}</Name>
|
||||
<OperatingSystemSection ovf:id="1" vmw:osType="*other26xLinux64Guest">
|
||||
<Info>The kind of installed guest operating system</Info>
|
||||
</OperatingSystemSection>
|
||||
<VirtualHardwareSection>
|
||||
<Info>Virtual hardware requirements for a virtual machine</Info>
|
||||
<System>
|
||||
<vssd:ElementName>Virtual Hardware Family</vssd:ElementName>
|
||||
<vssd:InstanceID>0</vssd:InstanceID>
|
||||
<vssd:VirtualSystemIdentifier>${FLAGS_vm_name}</vssd:VirtualSystemIdentifier>
|
||||
<vssd:VirtualSystemType>vmx-08</vssd:VirtualSystemType>
|
||||
</System>
|
||||
<Item>
|
||||
<rasd:AllocationUnits>hertz * 10^6</rasd:AllocationUnits>
|
||||
<rasd:Description>Number of virtual CPUs</rasd:Description>
|
||||
<rasd:ElementName>1 virtual CPU(s)</rasd:ElementName>
|
||||
<rasd:InstanceID>1</rasd:InstanceID>
|
||||
<rasd:ResourceType>3</rasd:ResourceType>
|
||||
<rasd:VirtualQuantity>1</rasd:VirtualQuantity>
|
||||
</Item>
|
||||
<Item>
|
||||
<rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits>
|
||||
<rasd:Description>Memory Size</rasd:Description>
|
||||
<rasd:ElementName>${FLAGS_memory_size} MB of memory</rasd:ElementName>
|
||||
<rasd:InstanceID>2</rasd:InstanceID>
|
||||
<rasd:ResourceType>4</rasd:ResourceType>
|
||||
<rasd:VirtualQuantity>${FLAGS_memory_size}</rasd:VirtualQuantity>
|
||||
</Item>
|
||||
<Item>
|
||||
<rasd:Address>0</rasd:Address>
|
||||
<rasd:Description>SCSI Controller</rasd:Description>
|
||||
<rasd:ElementName>scsiController0</rasd:ElementName>
|
||||
<rasd:InstanceID>3</rasd:InstanceID>
|
||||
<rasd:ResourceSubType>VirtualSCSI</rasd:ResourceSubType>
|
||||
<rasd:ResourceType>6</rasd:ResourceType>
|
||||
</Item>
|
||||
<Item>
|
||||
<rasd:AddressOnParent>0</rasd:AddressOnParent>
|
||||
<rasd:ElementName>disk0</rasd:ElementName>
|
||||
<rasd:HostResource>ovf:/disk/vmdisk1</rasd:HostResource>
|
||||
<rasd:InstanceID>4</rasd:InstanceID>
|
||||
<rasd:Parent>3</rasd:Parent>
|
||||
<rasd:ResourceType>17</rasd:ResourceType>
|
||||
</Item>
|
||||
<Item>
|
||||
<rasd:AddressOnParent>2</rasd:AddressOnParent>
|
||||
<rasd:AutomaticAllocation>true</rasd:AutomaticAllocation>
|
||||
<rasd:Connection>bridged</rasd:Connection>
|
||||
<rasd:Description>VmxNet3 ethernet adapter on "bridged"</rasd:Description>
|
||||
<rasd:ElementName>ethernet0</rasd:ElementName>
|
||||
<rasd:InstanceID>5</rasd:InstanceID>
|
||||
<rasd:ResourceSubType>VmxNet3</rasd:ResourceSubType>
|
||||
<rasd:ResourceType>10</rasd:ResourceType>
|
||||
</Item>
|
||||
</VirtualHardwareSection>
|
||||
</VirtualSystem>
|
||||
</Envelope>
|
||||
EOF
|
||||
fi
|
@ -846,48 +846,23 @@ _write_niftycloud_conf() {
|
||||
local src_name=$(basename "$VM_SRC_IMG")
|
||||
local dst_name=$(basename "$VM_DST_IMG")
|
||||
local dst_dir=$(dirname "$VM_DST_IMG")
|
||||
local vmx_path="${dst_dir}/$(_src_to_dst_name "${src_name}" ".vmx")"
|
||||
cat >"${vmx_path}" <<EOF
|
||||
#!/usr/bin/vmware
|
||||
.encoding = "UTF-8"
|
||||
config.version = "8"
|
||||
virtualHW.version = "8"
|
||||
cleanShutdown = "TRUE"
|
||||
displayName = "${VM_NAME}"
|
||||
ethernet0.addressType = "generated"
|
||||
ethernet0.present = "TRUE"
|
||||
ethernet0.virtualDev = "vmxnet3"
|
||||
floppy0.present = "FALSE"
|
||||
guestOS = "other26xlinux-64"
|
||||
memsize = "${vm_mem}"
|
||||
powerType.powerOff = "soft"
|
||||
powerType.powerOn = "hard"
|
||||
powerType.reset = "hard"
|
||||
powerType.suspend = "hard"
|
||||
scsi0.present = "TRUE"
|
||||
scsi0.virtualDev = "pvscsi"
|
||||
scsi0:0.fileName = "${dst_name}"
|
||||
scsi0:0.present = "TRUE"
|
||||
sound.present = "FALSE"
|
||||
rtc.diffFromUTC = 0
|
||||
pciBridge0.present = "TRUE"
|
||||
pciBridge4.present = "TRUE"
|
||||
pciBridge4.virtualDev = "pcieRootPort"
|
||||
pciBridge4.functions = "8"
|
||||
pciBridge5.present = "TRUE"
|
||||
pciBridge5.virtualDev = "pcieRootPort"
|
||||
pciBridge5.functions = "8"
|
||||
pciBridge6.present = "TRUE"
|
||||
pciBridge6.virtualDev = "pcieRootPort"
|
||||
pciBridge6.functions = "8"
|
||||
pciBridge7.present = "TRUE"
|
||||
pciBridge7.virtualDev = "pcieRootPort"
|
||||
pciBridge7.functions = "8"
|
||||
local ovf="${dst_dir}/$(_src_to_dst_name "${src_name}" ".ovf")"
|
||||
|
||||
vmdk-convert ${VM_DST_IMG} ${VM_TMP_DIR}/vm.vmdk
|
||||
mv ${VM_TMP_DIR}/vm.vmdk ${VM_DST_IMG}
|
||||
|
||||
"${BUILD_LIBRARY_DIR}/niftycloud_ovf.sh" \
|
||||
--vm_name "$VM_NAME" \
|
||||
--disk_vmdk "$VM_DST_IMG" \
|
||||
--memory_size "$vm_mem" \
|
||||
--output_ovf "$ovf"
|
||||
|
||||
local ovf_name=$(basename "${ovf}")
|
||||
cat > "${VM_README}" <<EOF
|
||||
Import ${ovf_name} and ${dst_name} to NIFTY Cloud.
|
||||
EOF
|
||||
# Only upload the vmx if it won't be bundled
|
||||
if [[ -z "$(_get_vm_opt BUNDLE_FORMAT)" ]]; then
|
||||
VM_GENERATED_FILES+=( "${vmx_path}" )
|
||||
fi
|
||||
|
||||
VM_GENERATED_FILES+=( "$ovf" )
|
||||
}
|
||||
|
||||
# If this is a bundled format generate it!
|
||||
|
Loading…
Reference in New Issue
Block a user