def create_cluster_role(k8s_conf): """ This function is used to launch multus cni """ logger.info('EXECUTING CREATE CLUSTER ROLE PLAY') pb_vars = { 'PROJ_ARTIFACT_DIR': config_utils.get_project_artifact_dir(k8s_conf) } ansible_utils.apply_playbook(consts.K8_MULTUS_SET_MASTER, variables=pb_vars) logger.info('Setting nodes in cluster role definition') node_configs = config_utils.get_node_configs(k8s_conf) if node_configs and len(node_configs) > 0: for node_config in node_configs: host = node_config[consts.HOST_KEY] pb_vars = { 'hostname': host[consts.HOSTNAME_KEY], 'PROJ_ARTIFACT_DIR': config_utils.get_project_artifact_dir(k8s_conf) } ansible_utils.apply_playbook(consts.K8_MULTUS_CLUSTER_ROLE_DEFINE, variables=pb_vars) logger.info('EXECUTING cluster role creation') pb_vars = { 'PROJ_ARTIFACT_DIR': config_utils.get_project_artifact_dir(k8s_conf) } ansible_utils.apply_playbook(consts.K8_MULTUS_CLUSTER_ROLE_CREATION, variables=pb_vars)
def validate_api_ext_loadbalancer_tag_params(config): logger.info("checking api_ext_loadbalancer_tag") k8s_dict = config_utils.get_k8s_dict(config) node_configs = config_utils.get_node_configs(config) ha_configs = config_utils.get_ha_config(config) for ha_config in ha_configs: validate_dict_data(k8s_dict, consts.HA_CONFIG_KEY) validate_dict_data(ha_config, consts.HA_API_EXT_LB_KEY) ha_lb_conf = ha_config[consts.HA_API_EXT_LB_KEY] validate_dict_data(ha_lb_conf, consts.IP_KEY) validate_dict_data(node_configs[0], consts.HOST_KEY) for node_conf in node_configs: if (node_conf.get(consts.HOST_KEY)[consts.IP_KEY] == ha_lb_conf[ consts.IP_KEY]): raise ValidationException( 'Bootstrap ip should never match with the master or node') validate_dict_data(ha_lb_conf, consts.USER_KEY) validate_dict_data(ha_lb_conf, consts.PASSWORD_KEY) validate_dict_data(ha_lb_conf, consts.PORT_KEY) ha_lb_port = ha_lb_conf.get(consts.PORT_KEY) if not ha_lb_port or ha_lb_port == "" or ha_lb_port == 6443: raise ValidationException('Port shoud not be empty or 6443')
def validate_node_config_params(config): """ Checks the presence of node configuration parameters """ logger.info("checking node configuration params") node_configs = config_utils.get_node_configs(config) validate_dict_data(node_configs[0], consts.HOST_KEY) for node_conf in node_configs: host_conf = node_conf[consts.HOST_KEY] validate_dict_data(host_conf, consts.HOSTNAME_KEY) validate_dict_data(host_conf, consts.IP_KEY) validate_dict_data(host_conf, consts.NODE_TYPE_KEY) validate_dict_data(host_conf, consts.LABEL_KEY) validate_dict_data(host_conf, consts.LBL_VAL_KEY) if consts.REG_PORT_KEY in host_conf: node_type = host_conf[consts.NODE_TYPE_KEY] if not (node_type != consts.NODE_TYPE_MASTER or node_type != consts.NODE_TYPE_MINION): raise ValidationException( 'Node type should be either master or minion') validate_dict_data(host_conf, consts.PASSWORD_KEY) validate_dict_data(host_conf, consts.USER_KEY)
def test_get_node_configs(self): """ Ensures node configuration settings are properly parsed """ node_configs = config_utils.get_node_configs(self.config) expected = self.config[consts.K8S_KEY][consts.NODE_CONF_KEY] self.assertEqual(expected, node_configs)
def __label_nodes(k8s_conf): node_cfgs = config_utils.get_node_configs(k8s_conf) for node_cfg in node_cfgs: node = node_cfg[consts.HOST_KEY] ansible_utils.apply_playbook( consts.K8_NODE_LABELING, variables={ 'hostname': node.get(consts.HOSTNAME_KEY), 'label_key': node.get(consts.LABEL_KEY), 'label_value': node.get(consts.LBL_VAL_KEY), 'PROJ_ARTIFACT_DIR': config_utils.get_project_artifact_dir( k8s_conf), })
def provision_preparation(k8s_conf): """ This method is responsible for setting up this host for k8s provisioning :param k8s_conf: the configuration dict object """ node_configs = config_utils.get_node_configs(k8s_conf) if node_configs and len(node_configs) > 0: for node_config in node_configs: host = node_config[consts.HOST_KEY] pb_vars = {'hostname': host[consts.HOSTNAME_KEY], 'ip': host[consts.IP_KEY]} ansible_utils.apply_playbook(consts.SETUP_ETC_HOSTS, variables=pb_vars) else: raise Exception('No hosts to deploy - Aborting')
def validate_count_master_minion(config): logger.info("checking count master and minion") master_count = 0 minion_count = 0 node_configs = config_utils.get_node_configs(config) validate_dict_data(node_configs[0], consts.HOST_KEY) for node_config in node_configs: host = node_config[consts.HOST_KEY] if host[consts.NODE_TYPE_KEY] == consts.NODE_TYPE_MASTER: master_count = master_count + 1 if host[consts.NODE_TYPE_KEY] == "minion": minion_count = minion_count + 1 if minion_count > 0: pass else: raise ValidationException("At least one minion is required") if master_count > 0: pass else: raise ValidationException("At least master is required")
def test_get_password(self): node_confs = config_utils.get_node_configs(self.config) for node_conf in node_confs: password = config_utils.get_node_password( self.config, node_conf[consts.HOST_KEY][consts.HOSTNAME_KEY]) self.assertEqual('password', password)