Merge "Add extended Glance Image properties"

This commit is contained in:
Jenkins 2016-09-12 19:18:05 +00:00 committed by Gerrit Code Review
commit e935c86df2
2 changed files with 152 additions and 1 deletions

View File

@ -121,6 +121,94 @@ class Image(resource2.Resource):
#: The location metadata.
metadata = resource2.Body('metadata', type=dict)
# Additional Image Properties
# http://docs.openstack.org/developer/glance/common-image-properties.html
# http://docs.openstack.org/cli-reference/glance-property-keys.html
#: The CPU architecture that must be supported by the hypervisor.
architecture = resource2.Body("architecture")
#: The hypervisor type. Note that qemu is used for both QEMU and
#: KVM hypervisor types.
hypervisor_type = resource2.Body("hypervisor-type")
#: Optional property allows created servers to have a different bandwidth
#: cap than that defined in the network they are attached to.
instance_type_rxtx_factor = resource2.Body("instance_type_rxtx_factor",
type=float)
# For snapshot images, this is the UUID of the server used to
#: create this image.
instance_uuid = resource2.Body('instance_uuid')
#: Specifies whether the image needs a config drive.
#: `mandatory` or `optional` (default if property is not used).
needs_config_drive = resource2.Body('img_config_drive')
#: The ID of an image stored in the Image service that should be used
#: as the kernel when booting an AMI-style image.
kernel_id = resource2.Body('kernel_id')
#: The common name of the operating system distribution in lowercase
os_distro = resource2.Body('os_distro')
#: The operating system version as specified by the distributor.
os_version = resource2.Body('os_version')
#: Secure Boot is a security standard. When the instance starts,
#: Secure Boot first examines software such as firmware and OS by
#: their signature and only allows them to run if the signatures are valid.
needs_secure_boot = resource2.Body('os_secure_boot')
#: The ID of image stored in the Image service that should be used as
#: the ramdisk when booting an AMI-style image.
ramdisk_id = resource2.Body('ramdisk_id')
#: The virtual machine mode. This represents the host/guest ABI
#: (application binary interface) used for the virtual machine.
vm_mode = resource2.Body('vm_mode')
#: The preferred number of sockets to expose to the guest.
hw_cpu_sockets = resource2.Body('hw_cpu_sockets', type=int)
#: The preferred number of cores to expose to the guest.
hw_cpu_cores = resource2.Body('hw_cpu_cores', type=int)
#: The preferred number of threads to expose to the guest.
hw_cpu_threads = resource2.Body('hw_cpu_threads', type=int)
#: Specifies the type of disk controller to attach disk devices to.
#: One of scsi, virtio, uml, xen, ide, or usb.
hw_disk_bus = resource2.Body('hw_disk_bus')
#: Adds a random-number generator device to the image's instances.
hw_rng_model = resource2.Body('hw_rng_model')
#: For libvirt: Enables booting an ARM system using the specified
#: machine type.
#: For Hyper-V: Specifies whether the Hyper-V instance will be a
#: generation 1 or generation 2 VM.
hw_machine_type = resource2.Body('hw_machine_type')
#: Enables the use of VirtIO SCSI (virtio-scsi) to provide block device
#: access for compute instances; by default, instances use VirtIO Block
#: (virtio-blk).
hw_scsi_model = resource2.Body('hw_scsi_model')
#: Specifies the count of serial ports that should be provided.
hw_serial_port_count = resource2.Body('hw_serial_port_count', type=int)
#: The video image driver used.
hw_video_model = resource2.Body('hw_video_model')
#: Maximum RAM for the video image.
hw_video_ram = resource2.Body('hw_video_ram', type=int)
#: Enables a virtual hardware watchdog device that carries out the
#: specified action if the server hangs.
hw_watchdog_action = resource2.Body('hw_watchdog_action')
#: The kernel command line to be used by the libvirt driver, instead
#: of the default.
os_command_line = resource2.Body('os_command_line')
#: Specifies the model of virtual network interface device to use.
hw_vif_model = resource2.Body('hw_vif_model')
#: If true, this enables the virtio-net multiqueue feature.
#: In this case, the driver sets the number of queues equal to the
#: number of guest vCPUs. This makes the network performance scale
#: across a number of vCPUs.
is_hw_vif_multiqueue_enabled = resource2.Body('hw_vif_multiqueue_enabled',
type=bool)
#: If true, enables the BIOS bootmenu.
is_hw_boot_menu_enabled = resource2.Body('hw_boot_menu', type=bool)
#: The virtual SCSI or IDE controller used by the hypervisor.
vmware_adaptertype = resource2.Body('vmware_adaptertype')
#: A VMware GuestID which describes the operating system installed
#: in the image.
vmware_ostype = resource2.Body('vmware_ostype')
#: If true, the root partition on the disk is automatically resized
#: before the instance boots.
has_auto_disk_config = resource2.Body('auto_disk_config', type=bool)
#: The operating system installed on the image.
os_type = resource2.Body('os_type')
def _action(self, session, action):
"""Call an action on an image ID."""
url = utils.urljoin(self.base_path, self.id, 'actions', action)

View File

@ -43,7 +43,37 @@ EXAMPLE = {
'path': '18',
'value': '19',
'url': '20',
'metadata': {'21': '22'}
'metadata': {'21': '22'},
'architecture': '23',
'hypervisor-type': '24',
'instance_type_rxtx_factor': 25.1,
'instance_uuid': '26',
'img_config_drive': '27',
'kernel_id': '28',
'os_distro': '29',
'os_version': '30',
'os_secure_boot': '31',
'ramdisk_id': '32',
'vm_mode': '33',
'hw_cpu_sockets': 34,
'hw_cpu_cores': 35,
'hw_cpu_threads': 36,
'hw_disk_bus': '37',
'hw_rng_model': '38',
'hw_machine_type': '39',
'hw_scsi_model': '40',
'hw_serial_port_count': 41,
'hw_video_model': '42',
'hw_video_ram': 43,
'hw_watchdog_action': '44',
'os_command_line': '45',
'hw_vif_model': '46',
'hw_vif_multiqueue_enabled': True,
'hw_boot_menu': True,
'vmware_adaptertype': '47',
'vmware_ostype': '48',
'auto_disk_config': True,
'os_type': '49',
}
@ -95,6 +125,39 @@ class TestImage(testtools.TestCase):
self.assertEqual(EXAMPLE['value'], sot.value)
self.assertEqual(EXAMPLE['url'], sot.url)
self.assertEqual(EXAMPLE['metadata'], sot.metadata)
self.assertEqual(EXAMPLE['architecture'], sot.architecture)
self.assertEqual(EXAMPLE['hypervisor-type'], sot.hypervisor_type)
self.assertEqual(EXAMPLE['instance_type_rxtx_factor'],
sot.instance_type_rxtx_factor)
self.assertEqual(EXAMPLE['instance_uuid'], sot.instance_uuid)
self.assertEqual(EXAMPLE['img_config_drive'], sot.needs_config_drive)
self.assertEqual(EXAMPLE['kernel_id'], sot.kernel_id)
self.assertEqual(EXAMPLE['os_distro'], sot.os_distro)
self.assertEqual(EXAMPLE['os_version'], sot.os_version)
self.assertEqual(EXAMPLE['os_secure_boot'], sot.needs_secure_boot)
self.assertEqual(EXAMPLE['ramdisk_id'], sot.ramdisk_id)
self.assertEqual(EXAMPLE['vm_mode'], sot.vm_mode)
self.assertEqual(EXAMPLE['hw_cpu_sockets'], sot.hw_cpu_sockets)
self.assertEqual(EXAMPLE['hw_cpu_cores'], sot.hw_cpu_cores)
self.assertEqual(EXAMPLE['hw_cpu_threads'], sot.hw_cpu_threads)
self.assertEqual(EXAMPLE['hw_disk_bus'], sot.hw_disk_bus)
self.assertEqual(EXAMPLE['hw_rng_model'], sot.hw_rng_model)
self.assertEqual(EXAMPLE['hw_machine_type'], sot.hw_machine_type)
self.assertEqual(EXAMPLE['hw_scsi_model'], sot.hw_scsi_model)
self.assertEqual(EXAMPLE['hw_serial_port_count'],
sot.hw_serial_port_count)
self.assertEqual(EXAMPLE['hw_video_model'], sot.hw_video_model)
self.assertEqual(EXAMPLE['hw_video_ram'], sot.hw_video_ram)
self.assertEqual(EXAMPLE['hw_watchdog_action'], sot.hw_watchdog_action)
self.assertEqual(EXAMPLE['os_command_line'], sot.os_command_line)
self.assertEqual(EXAMPLE['hw_vif_model'], sot.hw_vif_model)
self.assertEqual(EXAMPLE['hw_vif_multiqueue_enabled'],
sot.is_hw_vif_multiqueue_enabled)
self.assertEqual(EXAMPLE['hw_boot_menu'], sot.is_hw_boot_menu_enabled)
self.assertEqual(EXAMPLE['vmware_adaptertype'], sot.vmware_adaptertype)
self.assertEqual(EXAMPLE['vmware_ostype'], sot.vmware_ostype)
self.assertEqual(EXAMPLE['auto_disk_config'], sot.has_auto_disk_config)
self.assertEqual(EXAMPLE['os_type'], sot.os_type)
def test_deactivate(self):
sot = image.Image(**EXAMPLE)