def _create_virtual_network(self, ns_name, vn_name, proj_obj):
        """
        Create a virtual network for this namespace.
        """
        vn = VirtualNetwork(name=vn_name,
                            parent_obj=proj_obj,
                            virtual_network_properties=VirtualNetworkType(
                                forwarding_mode='l3'),
                            address_allocation_mode='flat-subnet-only')
        try:
            vn_uuid = self._vnc_lib.virtual_network_create(vn)
        except RefsExistError:
            vn_obj = self._vnc_lib.virtual_network_read(
                fq_name=vn.get_fq_name())
            vn_uuid = vn_obj.uuid

        # Instance-Ip for pods on this VN, should be allocated from
        # cluster pod ipam. Attach the cluster podipam object
        # to this virtual network.
        ipam_obj = self._vnc_lib.network_ipam_read(
            fq_name=vnc_kube_config.pod_ipam_fq_name())
        vn.add_network_ipam(ipam_obj, VnSubnetsType([]))

        # Update VN.
        self._vnc_lib.virtual_network_update(vn)

        # Cache the virtual network.
        VirtualNetworkKM.locate(vn_uuid)

        # Cache network info in namespace entry.
        self._set_namespace_virtual_network(ns_name, vn.get_fq_name())

        return vn_uuid
Beispiel #2
0
    def _create_iip(self, pod_name, pod_namespace, vn_obj, vmi):
        # Instance-ip for pods are ALWAYS allocated from pod ipam on this
        # VN. Get the subnet uuid of the pod ipam on this VN, so we can request
        # an IP from it.
        vn = VirtualNetworkKM.find_by_name_or_uuid(vn_obj.get_uuid())
        pod_ipam_subnet_uuid = vn.get_ipam_subnet_uuid(
            vnc_kube_config.pod_ipam_fq_name())

        # Create instance-ip.
        display_name = VncCommon.make_display_name(pod_namespace, pod_name)
        iip_uuid = str(uuid.uuid1())
        iip_name = VncCommon.make_name(pod_name, iip_uuid)
        iip_obj = InstanceIp(name=iip_name,
                             subnet_uuid=pod_ipam_subnet_uuid,
                             display_name=display_name)
        iip_obj.uuid = iip_uuid
        iip_obj.add_virtual_network(vn_obj)

        # Creation of iip requires the vmi vnc object.
        vmi_obj = self._vnc_lib.virtual_machine_interface_read(
            fq_name=vmi.fq_name)
        iip_obj.add_virtual_machine_interface(vmi_obj)

        self.add_annotations(iip_obj, InstanceIpKM.kube_fq_name_key,
                             pod_namespace, pod_name)

        try:
            self._vnc_lib.instance_ip_create(iip_obj)
        except RefsExistError:
            self._vnc_lib.instance_ip_update(iip_obj)
        InstanceIpKM.locate(iip_obj.uuid)
        return iip_obj
Beispiel #3
0
 def _get_pod_ipam_subnet_uuid(self, vn_obj):
     pod_ipam_subnet_uuid = None
     fq_name = vnc_kube_config.pod_ipam_fq_name()
     vn = VirtualNetworkKM.find_by_name_or_uuid(vn_obj.get_uuid())
     pod_ipam_subnet_uuid = vn.get_ipam_subnet_uuid(fq_name)
     if pod_ipam_subnet_uuid is None:
         self._logger.error("%s - %s Not Found" % (self._name, fq_name))
     return pod_ipam_subnet_uuid
 def _get_pod_ipam_subnet_uuid(self, vn_obj):
     pod_ipam_subnet_uuid = None
     fq_name = vnc_kube_config.pod_ipam_fq_name()
     vn = VirtualNetworkKM.find_by_name_or_uuid(vn_obj.get_uuid())
     pod_ipam_subnet_uuid = vn.get_ipam_subnet_uuid(fq_name)
     if pod_ipam_subnet_uuid is None:
         self._logger.error("%s - %s Not Found" %(self._name, fq_name))
     return pod_ipam_subnet_uuid
Beispiel #5
0
 def _get_pod_ipam_subnet_uuid(self, ns_name, vn_obj):
     pod_ipam_subnet_uuid = None
     if self._is_network_isolated(ns_name):
         vn_namespace = ns_name
     else:
         vn_namespace = 'default'
     if self._is_ip_fabric_forwarding_enabled(vn_namespace):
         ipam_fq_name = vnc_kube_config.ip_fabric_ipam_fq_name()
     else:
         ipam_fq_name = vnc_kube_config.pod_ipam_fq_name()
     vn = VirtualNetworkKM.find_by_name_or_uuid(vn_obj.get_uuid())
     pod_ipam_subnet_uuid = vn.get_ipam_subnet_uuid(ipam_fq_name)
     if pod_ipam_subnet_uuid is None:
         self._logger.error("%s - %s Not Found" %(self._name, ipam_fq_name))
     return pod_ipam_subnet_uuid
    def _create_isolated_ns_virtual_network(self, ns_name, vn_name, proj_obj):
        """
        Create a virtual network for this namespace.
        """
        vn = VirtualNetwork(name=vn_name, parent_obj=proj_obj,
            virtual_network_properties=VirtualNetworkType(forwarding_mode='l3'),
            address_allocation_mode='flat-subnet-only')

        # Add annotatins on this isolated virtual-network.
        VirtualNetworkKM.add_annotations(self, vn, namespace=ns_name,
            name=ns_name, isolated='True')

        try:
            vn_uuid = self._vnc_lib.virtual_network_create(vn)
        except RefsExistError:
            vn_obj = self._vnc_lib.virtual_network_read(
                fq_name=vn.get_fq_name())
            vn_uuid = vn_obj.uuid

        # Instance-Ip for pods on this VN, should be allocated from
        # cluster pod ipam. Attach the cluster pod-ipam object
        # to this virtual network.
        ipam_obj = self._vnc_lib.network_ipam_read(
            fq_name=vnc_kube_config.pod_ipam_fq_name())
        vn.add_network_ipam(ipam_obj, VnSubnetsType([]))

        # Update VN.
        self._vnc_lib.virtual_network_update(vn)

        # Cache the virtual network.
        VirtualNetworkKM.locate(vn_uuid)

        # Cache network info in namespace entry.
        self._set_namespace_virtual_network(ns_name, vn.get_fq_name())

        return vn_uuid