예제 #1
0
    def _update_port_forwarding_nat_rule(nat_rule,
                                         vapp_scoped_vm_id=None,
                                         vm_nic_id=None,
                                         external_port=None,
                                         internal_port=None,
                                         protocol=None):
        """Update port forwarding NAT rule of vApp network.

        :param str vapp_scoped_vm_id: vapp network scoped vm id.
        :param str vm_nic_id: vapp network scoped vm nic id.
        :param int external_port: external port of NAT rule if nat_type is
            portForwarding.
        :param int internal_port: internal port of NAT rule if nat_type is
            portForwarding.
        :param str protocol: protocol of NAT rule if nat_type.
        """
        vm_rule = nat_rule.VmRule
        if vapp_scoped_vm_id is not None:
            vm_rule.VAppScopedVmId = E.VAppScopedVmId(vapp_scoped_vm_id)
        if vm_nic_id is not None:
            vm_rule.VmNicId = E.VmNicId(vm_nic_id)
        if external_port is not None:
            vm_rule.ExternalPort = E.ExternalPort(external_port)
        if internal_port is not None:
            vm_rule.InternalPort = E.InternalPort(internal_port)
        if protocol is not None:
            vm_rule.Protocol = E.Protocol(protocol)
예제 #2
0
    def add_nat_rule(self,
                     nat_type,
                     vapp_scoped_vm_id,
                     vm_nic_id,
                     mapping_mode='automatic',
                     external_ip_address=None,
                     external_port=-1,
                     internal_port=-1,
                     protocol='TCP'):
        """Add NAT rule to vApp network.

        :param str nat_type: NAT type (portForwarding/ipTranslation).
        :param str vapp_scoped_vm_id: vapp network scoped vm id.
        :param str vm_nic_id: vapp network scoped vm nic id.
        :param str mapping_mode: NAT rule mapping mode (automatic/manual) if
            nat_type is ipTranslation.
        :param str external_ip_address: external ip address if mapping mode is
            manual.
        :param int external_port: external port of NAT rule if nat_type is
            portForwarding.
        :param int internal_port: internal port of NAT rule if nat_type is
            portForwarding.
        :param str protocol: protocol of NAT rule if nat_type is
            portForwarding.
        :return: an object containing EntityType.TASK XML data which represents
            the asynchronous task that is updating the vApp network.
        :rtype: lxml.objectify.ObjectifiedElement
        :raises: InvalidParameterException: Enable NAT service failed as
            given network's connection is not routed
        """
        self._get_resource()
        fence_mode = self.resource.Configuration.FenceMode
        if fence_mode != 'natRouted':
            raise InvalidParameterException(
                "Enable NAT service failed as given network's connection "
                "is not routed")
        features = self.resource.Configuration.Features
        if not hasattr(features, 'NatService'):
            VappNat._makeNatServiceAttr(features)
        nat_service = features.NatService
        if nat_service.NatType != nat_type:
            VappNat._delete_all_nat_rule(nat_service)
            nat_service.NatType = E.NatType(nat_type)
        nat_rule = E.NatRule()
        if nat_type == 'ipTranslation':
            one_to_vm_rule = E.OneToOneVmRule()
            one_to_vm_rule.append(E.MappingMode(mapping_mode))
            if mapping_mode == 'manual':
                one_to_vm_rule.append(E.ExternalIpAddress(external_ip_address))
            one_to_vm_rule.append(E.VAppScopedVmId(vapp_scoped_vm_id))
            one_to_vm_rule.append(E.VmNicId(vm_nic_id))
            nat_rule.append(one_to_vm_rule)
        elif nat_type == 'portForwarding':
            vm_rule = E.VmRule()
            vm_rule.append(E.ExternalPort(external_port))
            vm_rule.append(E.VAppScopedVmId(vapp_scoped_vm_id))
            vm_rule.append(E.VmNicId(vm_nic_id))
            vm_rule.append(E.InternalPort(internal_port))
            vm_rule.append(E.Protocol(protocol))
            nat_rule.append(vm_rule)
        nat_service.append(nat_rule)
        return self.client.put_linked_resource(self.resource,
                                               RelationType.EDIT,
                                               EntityType.vApp_Network.value,
                                               self.resource)