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)
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)
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)
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)