def __dhcp_cleanup(k8s_conf):
    logger.info('REMOVING DHCP')
    multus_elems = config_utils.get_multus_net_elems(k8s_conf)
    if consts.DHCP_TYPE in multus_elems:
        ips = config_utils.get_minion_node_ips(k8s_conf)
        ansible_utils.apply_playbook(consts.K8_DHCP_REMOVAL_PATH, ips,
                                     consts.NODE_USER)
def validate_dhcpmandatory(config):
    """
    Checks the presence of DHCP CNI Plugin with Multus, if SRIOV or Multus
    uses dhcp as network type
    """
    logger.info("checking dhcp mandatory values")
    has_dhcp = False
    macvlan_nets = config_utils.get_multus_cni_macvlan_cfgs(config)
    for macvlan_net in macvlan_nets:
        macvlan_conf = macvlan_net[consts.MACVLAN_NET_DTLS_KEY]
        if macvlan_conf[consts.TYPE_KEY] == consts.DHCP_TYPE:
            has_dhcp = True
            break

    if not has_dhcp:
        sriov_nets = config_utils.get_multus_cni_sriov_cfgs(config)
        for sriov_net in sriov_nets:
            sriov_conf = sriov_net[consts.HOST_KEY]
            sriov_net_confs = sriov_conf[consts.SRIOV_NETWORKS_KEY]
            for sriov_net_conf in sriov_net_confs:
                if sriov_net_conf[consts.TYPE_KEY] == consts.DHCP_TYPE:
                    has_dhcp = True
                    break

    if has_dhcp:
        cni_types = config_utils.get_multus_net_elems(config)
        if consts.DHCP_TYPE not in cni_types:
            raise ValidationException('DHCP must be in the {} list'.format(
                consts.MULTUS_CNI_KEY))
Esempio n. 3
0
def __create_multus_cni(k8s_conf):
    multus_enabled = config_utils.is_multus_cni_enabled(k8s_conf)
    if multus_enabled:
        multus_elems = config_utils.get_multus_net_elems(k8s_conf)
        if consts.DHCP_TYPE in multus_elems:
            __dhcp_installation(k8s_conf)

        if consts.SRIOV_TYPE in multus_elems:
            aconf.launch_sriov_cni_configuration(k8s_conf)
            aconf.launch_sriov_network_creation(k8s_conf)

        if consts.FLANNEL_TYPE in multus_elems:
            aconf.create_flannel_interface(k8s_conf)

        if consts.WEAVE_TYPE in multus_elems:
            __launch_weave_interface(k8s_conf)

        if consts.MACVLAN_TYPE in multus_elems:
            __macvlan_installation(k8s_conf)

        ips = config_utils.get_minion_node_ips(k8s_conf)
        networking_plugin = config_utils.get_networking_plugin(k8s_conf)
        ansible_utils.apply_playbook(
            consts.K8_CONF_FILES_DELETION_AFTER_MULTUS, ips,
            config_utils.get_node_user(k8s_conf),
            variables={
                'networking_plugin': networking_plugin,
                'KUBERNETES_PATH': consts.NODE_K8S_PATH,
                'PROJ_ARTIFACT_DIR': config_utils.get_project_artifact_dir(
                    k8s_conf),
            })
    else:
        logger.info('MULTUS CNI IS DISABLED')
Esempio n. 4
0
 def test_get_multus_net_elems(self):
     """
     Ensures Multus CNI elements are properly parsed
     """
     multus_net_elems = config_utils.get_multus_net_elems(self.config)
     expected = self.network_list[1][consts.MULTUS_NET_KEY][0][
         consts.MULTUS_CNI_KEY]
     self.assertEqual(expected, multus_net_elems)
def __clean_up_flannel(k8s_conf):
    """
    This function is used to clean the flannel additional plugin
    """
    networking_plugin = config_utils.get_networking_plugin(k8s_conf)
    mult_elems = config_utils.get_multus_net_elems(k8s_conf)
    if (networking_plugin != consts.FLANNEL_TYPE
            and consts.FLANNEL_TYPE in mult_elems):
        aconf.delete_flannel_interfaces(k8s_conf)
def __macvlan_cleanup(k8s_conf):
    logger.info("MACVLAN PLUGIN REMOVAL")
    if consts.MACVLAN_TYPE in config_utils.get_multus_net_elems(k8s_conf):
        logger.info('REMOVING MACVLAN')
        __removal_macvlan_interface(k8s_conf)
        __remove_macvlan_networks(k8s_conf)
    else:
        logger.info(
            'MAC-VLAN CONFIGURATION  EXIT , REASON--> MACVLAN  IS DISABLED ')
def __get_multus_cni_value_for_dynamic_node(k8s_conf):
    """
    This function is used to get multus cni value for dynamic node
    """
    multus_cni_elems = config_utils.get_multus_net_elems(k8s_conf)
    for multus_cni_elem in multus_cni_elems:
        if multus_cni_elem == consts.FLANNEL_TYPE:
            return True
        if multus_cni_elem == consts.WEAVE_TYPE:
            return True
    return False
def __clean_up_weave(k8s_conf):
    """
    This function is used to clean the weave additional plugin
    """
    networking_plugin = config_utils.get_networking_plugin(k8s_conf)
    if networking_plugin != consts.WEAVE_TYPE:
        logger.info('DEFAULT NETWOKRING PLUGUN IS NOT WEAVE.. '
                    'CHECK MULTUS CNI PLUGINS')
        if (consts.MULTUS_NET_KEY
                in config_utils.get_multus_net_elems(k8s_conf)):
            aconf.delete_weave_interface(k8s_conf)
    else:
        logger.info('WEAVE IS DEFAULT PLUGIN')
        aconf.delete_default_weave_interface(k8s_conf)
def validate_duplicatein_cni_and_networkplugin(config):
    """
    Checks if there exists the same plugin in both default network
    plugin tag and in Cni parameters
    """
    logger.info("checking duplicate values")
    net_configs = config_utils.get_networks(config)
    networkpluginvalue = net_configs[0].values()[0][consts.NET_PLUGIN_KEY]

    net_elems = config_utils.get_multus_net_elems(config)
    if (consts.WEAVE_TYPE in net_elems
            and consts.WEAVE_TYPE == networkpluginvalue):
        raise ValidationException("duplicate weave")
    if (consts.FLANNEL_TYPE in net_elems
            and consts.FLANNEL_TYPE == networkpluginvalue):
        raise ValidationException("duplicate flannel")
    if (consts.SRIOV_TYPE in net_elems
            and consts.SRIOV_TYPE == networkpluginvalue):
        raise ValidationException("duplicate Sriov")
    if (consts.MACVLAN_TYPE in net_elems
            and consts.MACVLAN_TYPE == networkpluginvalue):
        raise ValidationException("duplicate macvlan")