Ejemplo n.º 1
0
Archivo: utils.py Proyecto: 0z-cloud/vx
def get_compute_policy_tags(api_version, sizing_compute_policy_href):
    """Generate compute policy tags depending on api_version.

    VdcComputePolicy and ComputePolicy tags are generated from
    sizing_compute_policy_href.

    :param api_version str
    :param sizing_compute_policy_href href
    :rtype (VdcComputePolicy, ComputePolicy) (etree.Element, etree.Element)
    """
    if not sizing_compute_policy_href:
        return (None, None)
    sizing_compute_policy_id = sizing_compute_policy_href.split('/')[-1]
    vdc_compute_policy_element = None
    compute_policy_element = None
    if api_version >= VDC_COMPUTE_POLICY_MIN_API_VERSION and \
            api_version <= VDC_COMPUTE_POLICY_MAX_API_VERSION:
        vdc_compute_policy_element = E.VdcComputePolicy()
        vdc_compute_policy_element.set('href', sizing_compute_policy_href)
        vdc_compute_policy_element.set('id', sizing_compute_policy_id)
        vdc_compute_policy_element.set('type', 'application/json')
    if api_version >= VM_SIZING_POLICY_MIN_API_VERSION:
        compute_policy_element = E.ComputePolicy()
        sizing_policy_element = E.VmSizingPolicy()
        compute_policy_element.append(sizing_policy_element)
        sizing_policy_element.set('href', sizing_compute_policy_href)
        sizing_policy_element.set('id', sizing_compute_policy_id)
    return (vdc_compute_policy_element, compute_policy_element)
Ejemplo n.º 2
0
def generate_compute_policy_tags(api_version,
                                 sizing_policy_href=None,
                                 placement_policy_href=None):
    """Generate compute policy tags depending on api_version.

    VdcComputePolicy and ComputePolicy tags are generated from
    sizing_compute_policy_href and placement_policy_href.
    VdcComputePolicy Tag will be generated if api_version < 33.0.
    ComputePolicy Tag will be generated only if the api_version >= 33.0.

    :param api_version str
    :param sizing_policy_href href
    :param placement_policy_href href
    :rtype (VdcComputePolicy, ComputePolicy) (etree.Element, etree.Element)
    """
    if api_version < VDC_COMPUTE_POLICY_MIN_API_VERSION or not \
            (sizing_policy_href or placement_policy_href):
        return (None, None)
    vdc_compute_policy_element = None
    compute_policy_element = None
    if api_version < VDC_COMPUTE_POLICY_MAX_API_VERSION:
        # Placement policy always have precedence over sizing policy to be set
        # as VdcComputePolicy
        vdc_compute_policy_href = placement_policy_href \
            if placement_policy_href else sizing_policy_href
        vdc_compute_policy_id = \
            retrieve_compute_policy_id_from_href(vdc_compute_policy_href)
        vdc_compute_policy_element = E.VdcComputePolicy()
        vdc_compute_policy_element.set('href', vdc_compute_policy_href)
        vdc_compute_policy_element.set('id', vdc_compute_policy_id)
        vdc_compute_policy_element.set('type', 'application/json')
    else:
        compute_policy_element = E.ComputePolicy()
        if placement_policy_href:
            placement_policy_id = \
                retrieve_compute_policy_id_from_href(placement_policy_href)
            placement_policy_element = E.VmPlacementPolicy()
            compute_policy_element.append(placement_policy_element)
            placement_policy_element.set('href', placement_policy_href)
            placement_policy_element.set('id', placement_policy_id)
        if sizing_policy_href:
            sizing_policy_id = \
                retrieve_compute_policy_id_from_href(sizing_policy_href)
            sizing_policy_element = E.VmSizingPolicy()
            compute_policy_element.append(sizing_policy_element)
            sizing_policy_element.set('href', sizing_policy_href)
            sizing_policy_element.set('id', sizing_policy_id)
    return (vdc_compute_policy_element, compute_policy_element)
Ejemplo n.º 3
0
def update_vm_compute_policy_element(api_version,
                                     vm,
                                     sizing_policy_href=None,
                                     sizing_policy_final=False,
                                     placement_policy_href=None,
                                     placement_policy_final=False):
    """Update the compute policy element of a VM.

    Note: This method only adds the policy elements if supported by the
        api_version

    :param float api_version:
    :param lxml.objectify.ObjectifiedElement vm: Element representing a VM
    :param str sizing_policy_href: href of the sizing policy to be added
    :param bool sizing_policy_final: If set to True, the sizing policy can't
        be overridden
    :param str placement_policy_href: href of the placement policy to be added
    :param bool placement_policy_final: If set to True, the placement policy
        can't be overridden

    :return: Boolean which indicates if update is required. (VM resource is
        manipulated in-place)

    :rtype: bool
    """
    # boolean which indicates if template vm element has been changed
    update_required = False
    if api_version < VM_SIZING_POLICY_MIN_API_VERSION and \
            not (sizing_policy_href or placement_policy_href):
        return update_required

    date_created_node = vm.find(
        '{http://www.vmware.com/vcloud/v1.5}DateCreated')  # noqa: E501
    if hasattr(vm, 'ComputePolicy'):
        compute_policy_element = vm.ComputePolicy
    else:
        update_required = True
        compute_policy_element = E.ComputePolicy()
        date_created_node.addprevious(compute_policy_element)

    if placement_policy_href:
        placement_policy_id = retrieve_compute_policy_id_from_href(
            placement_policy_href)  # noqa: E501
        if hasattr(compute_policy_element, 'VmPlacementPolicy'):
            if compute_policy_element.VmPlacementPolicy.get(
                    'href', '') != placement_policy_href:  # noqa: E501
                update_required = True
            vm_placement_policy_element = compute_policy_element.VmPlacementPolicy  # noqa: E501
        else:
            update_required = True
            vm_placement_policy_element = E.VmPlacementPolicy()
            # VmPlacementPolicy should always precede VmSizingPolicy
            compute_policy_element.insert(0, vm_placement_policy_element)
            compute_policy_element.insert(
                1, E.VmPlacementPolicyFinal(
                    str(placement_policy_final).lower()))  # noqa: E501
        vm_placement_policy_element.set('href', placement_policy_href)
        vm_placement_policy_element.set('id', placement_policy_id)
        vm_placement_policy_element.set('type', 'application/json')

    if sizing_policy_href:
        sizing_policy_id = retrieve_compute_policy_id_from_href(
            sizing_policy_href)  # noqa: E501
        if hasattr(compute_policy_element, 'VmSizingPolicy'):
            if compute_policy_element.VmSizingPolicy.get(
                    'href', '') != sizing_policy_href:  # noqa: E501
                update_required = True
            vm_sizing_policy_element = compute_policy_element.VmSizingPolicy  # noqa: E501
        else:
            update_required = True
            vm_sizing_policy_element = E.VmSizingPolicy()
            compute_policy_element.append(vm_sizing_policy_element)
            compute_policy_element.append(
                E.VmSizingPolicyFinal(
                    str(sizing_policy_final).lower()))  # noqa: E501
        vm_sizing_policy_element.set('href', sizing_policy_href)
        vm_sizing_policy_element.set('id', sizing_policy_id)
        vm_sizing_policy_element.set('type', 'application/json')

    return update_required