def admin_prepare_disks(node, disk_size): """Purge system disk on node param: node: Node param: disk_size: Integer :rtype : None """ disks = node.disk_devices for disk in disks: if (disk.device == 'disk' and disk.volume.name == 'admin-system' and disk.volume.get_allocation() > 1024 ** 2): print("Erasing system disk") disk.volume.erase() new_volume = Volume.volume_create( name="admin-system", capacity=disk_size * 1024 ** 3, environment=node.environment, format='qcow2') new_volume.define() DiskDevice.node_attach_volume( node=node, volume=new_volume, target_dev=disk.target_dev)
def snapshot_create_volume(self, name): """Create volume child for snapshot""" for disk in self.disk_devices: if disk.device == "disk": # Find main disk name, it is used for external disk back_vol_name = disk.volume.name back_count = 0 disk_test = disk.volume.backing_store while disk_test is not None: back_count += 1 back_vol_name = disk_test.name disk_test = disk_test.backing_store if back_count > 500: raise DevopsError("More then 500 snapshots in chain for {0}.{1}".format(back_vol_name, name)) # Create new volume for snapshot vol_child = Volume.volume_create_child( name="{0}.{1}".format(back_vol_name, name), backing_store=disk.volume, environment=self.environment ) vol_child.define() # update disk node to new snapshot disk.volume = vol_child disk.save()
def describe_admin_node(self, name, networks, boot_from='cdrom', vcpu=None, memory=None, iso_path=None): if boot_from == 'cdrom': boot_device = ['hd', 'cdrom'] device = 'cdrom' bus = 'ide' elif boot_from == 'usb': boot_device = ['hd'] device = 'disk' bus = 'usb' node = self.add_node( memory=memory or settings.HARDWARE["admin_node_memory"], vcpu=vcpu or settings.HARDWARE["admin_node_cpu"], name=name, role='admin', boot=boot_device) self.create_interfaces(networks, node) if self.os_image is None: iso = iso_path or settings.ISO_PATH self.add_empty_volume(node, name + '-system', capacity=settings.ADMIN_NODE_VOLUME_SIZE * 1024 ** 3) self.add_empty_volume( node, name + '-iso', capacity=_get_file_size(iso), format='raw', device=device, bus=bus) else: volume = Volume.volume_get_predefined(self.os_image) vol_child = Volume.volume_create_child( name=name + '-system', backing_store=volume, environment=self ) DiskDevice.node_attach_volume( node=node, volume=vol_child ) return node
def add_empty_volume(self, node, name, capacity, device='disk', bus='virtio', format='qcow2'): return DiskDevice.node_attach_volume( node=node, volume=Volume.volume_create( name=name, capacity=capacity, environment=self, format=format), device=device, bus=bus)
def describe_admin_node(self, name, networks, boot_from='cdrom', vcpu=None, memory=None, iso_path=None): if boot_from == 'cdrom': boot_device = ['hd', 'cdrom'] device = 'cdrom' bus = 'ide' elif boot_from == 'usb': boot_device = ['hd'] device = 'disk' bus = 'usb' node = self.add_node( memory=memory or settings.HARDWARE.get("admin_node_memory", 1024), vcpu=vcpu or settings.HARDWARE.get("admin_node_cpu", 1), name=name, boot=boot_device) self.create_interfaces(networks, node) if self.os_image is None: iso = iso_path or settings.ISO_PATH self.add_empty_volume(node, name + '-system') self.add_empty_volume(node, name + '-iso', capacity=_get_file_size(iso), format='raw', device=device, bus=bus) else: volume = Volume.volume_get_predefined(self.os_image) vol_child = Volume.volume_create_child(name=name + '-system', backing_store=volume, environment=self) DiskDevice.node_attach_volume(node=node, volume=vol_child) return node