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))
def validate_multus_network_macvlan_params(config):
    """
    Checks the presence of Macvlan parameters also check Macvlan
    network name format and validations of "type"
    """
    logger.info("checking Macvlan params")
    macvlan_nets = config_utils.get_multus_cni_macvlan_cfgs(config)
    if len(macvlan_nets) == 0:
        raise ValidationException('At least one macvlan network required')

    for macvlan_net in macvlan_nets:
        macvlan_conf = macvlan_net[consts.MACVLAN_NET_DTLS_KEY]
        validate_dict_data(macvlan_conf, consts.MACVLAN_PARENT_INTF_KEY)
        validate_dict_data(macvlan_conf, consts.HOSTNAME_KEY)
        validate_dict_data(macvlan_conf, consts.IP_KEY)
        validate_dict_data(macvlan_conf, consts.NODE_TYPE_MASTER)
        validate_dict_data(macvlan_conf, consts.TYPE_KEY)
        validate_dict_data(macvlan_conf, consts.NETWORK_NAME_KEY)

        net_name = macvlan_conf[consts.NETWORK_NAME_KEY]
        to_find = "_"
        count = net_name.find(to_find)
        count2 = len(filter(lambda x: x in string.uppercase, net_name))

        if not (count < 1 and count2 < 1):
            raise ValidationException("Network_name value format is wrong ")

        if macvlan_conf[consts.TYPE_KEY] == consts.NET_TYPE_LOCAL_TYPE:
            validate_dict_data(macvlan_conf, consts.RANGE_END_KEY)
            validate_dict_data(macvlan_conf, consts.RANGE_START_KEY)
            validate_dict_data(macvlan_conf, consts.ROUTES_DST_KEY)
            validate_dict_data(macvlan_conf, consts.SUBNET_KEY)
            validate_dict_data(macvlan_conf, consts.GATEWAY_KEY)
Esempio n. 3
0
 def test_multus_cni_macvlan_cfgs(self):
     """
     Ensures Macvlan network values are properly parsed
     """
     macvlan_cfg = config_utils.get_multus_cni_macvlan_cfgs(self.config)
     multus_cni = self.network_list[1][consts.MULTUS_NET_KEY][1][
         consts.MULTUS_CNI_CONFIG_KEY]
     expected = multus_cni[2][consts.MACVLAN_NET_TYPE]
     self.assertEqual(expected, macvlan_cfg)
Esempio n. 4
0
def __remove_macvlan_networks(k8s_conf):
    """
    This method is used for remove macvlan network after multus
    :param k8s_conf: input configuration file
    """
    mvlan_cfgs = config_utils.get_multus_cni_macvlan_cfgs(k8s_conf)
    for mvlan_cfg in mvlan_cfgs:
        iface_dict = mvlan_cfg[consts.MACVLAN_NET_DTLS_KEY]
        ansible_utils.apply_playbook(
            consts.K8_MACVLAN_NETWORK_REMOVAL_PATH,
            variables={
                'network_name': iface_dict[consts.NETWORK_NAME_KEY],
                'PROJ_ARTIFACT_DIR': config_utils.get_project_artifact_dir(
                    k8s_conf),
            })
def __removal_macvlan_interface(k8s_conf):
    """
    This method is used for create macvlan network after multus
    :param k8s_conf :input configuration file
    """
    mac_vlans = config_utils.get_multus_cni_macvlan_cfgs(k8s_conf)
    for mac_vlan in mac_vlans:
        iface_dict = mac_vlan[consts.MACVLAN_NET_DTLS_KEY]
        pb_vars = {
            'parentInterface': iface_dict.get(consts.MACVLAN_PARENT_INTF_KEY),
            'vlanId': str(iface_dict.get("vlanid")),
        }
        ansible_utils.apply_playbook(consts.K8_VLAN_INTERFACE_REMOVAL_PATH,
                                     [iface_dict.get("hostname")],
                                     consts.NODE_USER,
                                     variables=pb_vars)
def __config_macvlan_intf(k8s_conf):
    """
    This method is used for create macvlan interface list after multus
    :param k8s_conf :input configuration file
    """
    macvlan_cfgs = config_utils.get_multus_cni_macvlan_cfgs(k8s_conf)
    for macvlan_networks in macvlan_cfgs:
        iface_dict = macvlan_networks.get(consts.MACVLAN_NET_DTLS_KEY)
        hostname = iface_dict.get(consts.HOSTNAME_KEY)
        ip = iface_dict.get(consts.IP_KEY)
        pb_vars = {
            'parentInterface': iface_dict.get(consts.MACVLAN_PARENT_INTF_KEY),
            'vlanId': str(iface_dict['vlanid']),
            'ip': ip,
        }
        ansible_utils.apply_playbook(consts.K8_VLAN_INTERFACE_PATH, [hostname],
                                     consts.NODE_USER,
                                     variables=pb_vars)
Esempio n. 7
0
def __config_macvlan_networks(k8s_conf):
    """
    This method is used for create macvlan network after multus
    :param k8s_conf: input configuration file
    """
    macvlan_nets = config_utils.get_multus_cni_macvlan_cfgs(k8s_conf)
    for mvlan_net in macvlan_nets:
        iface_dict = mvlan_net.get(consts.MACVLAN_NET_DTLS_KEY)
        macvlan_masterplugin = iface_dict.get(consts.MASTER_PLUGIN_KEY)
        macvlan_type = iface_dict['type']
        pb_vars = {
            'network_name': iface_dict.get(consts.NETWORK_NAME_KEY),
            'interface_node': iface_dict.get("master"),
            'subnet': iface_dict.get(consts.SUBNET_KEY),
            'rangeStart': iface_dict.get("rangeStart"),
            'rangeEnd': iface_dict.get("rangeEnd"),
            'dst': iface_dict.get("routes_dst"),
            'gateway': iface_dict.get("gateway"),
            'PROJ_ARTIFACT_DIR':
            config_utils.get_project_artifact_dir(k8s_conf),
        }
        pb_vars.update(config_utils.get_proxy_dict(k8s_conf))
        if macvlan_masterplugin == "true":
            if macvlan_type == "host-local":
                ansible_utils.apply_playbook(
                    consts.K8_MACVLAN_MASTER_NETWORK_PATH,
                    config_utils.get_node_user(k8s_conf),
                    variables=pb_vars)
            elif macvlan_type == consts.DHCP_TYPE:
                ansible_utils.apply_playbook(
                    consts.K8_MACVLAN_MASTER_NETWORK_DHCP_PATH,
                    config_utils.get_node_user(k8s_conf),
                    variables=pb_vars)
        elif macvlan_masterplugin == "false":
            if macvlan_type == "host-local":
                ansible_utils.apply_playbook(
                    consts.K8_MACVLAN_NETWORK_PATH,
                    config_utils.get_node_user(k8s_conf),
                    variables=pb_vars)
            elif macvlan_type == consts.DHCP_TYPE:
                ansible_utils.apply_playbook(
                    consts.K8_MACVLAN_NETWORK_DHCP_PATH,
                    config_utils.get_node_user(k8s_conf),
                    variables=pb_vars)