Example #1
0
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)
Example #2
0
    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()
Example #3
0
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)
Example #4
0
    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
Example #5
0
 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)
Example #6
0
    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