Feature: 11055 Support of several node groups in clusters created by OSM
Change-Id: I8c02465364c4b465a6503b19c8983e1587eaa5d4
Signed-off-by: yshah <shahithya.y@tataelxsi.co.in>
diff --git a/docker/osm-krm-functions/scripts/library/krm-functions.rc b/docker/osm-krm-functions/scripts/library/krm-functions.rc
index 1a3c0bd..1d45705 100644
--- a/docker/osm-krm-functions/scripts/library/krm-functions.rc
+++ b/docker/osm-krm-functions/scripts/library/krm-functions.rc
@@ -112,6 +112,179 @@
}
+# Create remote NodeGroup in AWS
+function create_nodegroup() {
+ local NODEGROUP_NAME="$1"
+ local NODEGROUP_KUSTOMIZATION_NAME="$2"
+ local CLUSTER_NAME="$3"
+ local CLUSTER_TYPE="$4"
+ local PROVIDERCONFIG_NAME="${5:-default}"
+ local VM_SIZE="$6"
+ local NODE_COUNT="$7"
+ local CLUSTER_LOCATION="$8"
+ local CONFIGMAP_NAME="${9}"
+ local NODEGROUP_ROLE="${10}"
+ local PUBLIC_KEY_MGMT="${11:-"${PUBLIC_KEY_MGMT}"}"
+ local PUBLIC_KEY_NEW_CLUSTER="${12}"
+ local PRIVATE_KEY_NEW_CLUSTER="${13:-"${PRIVATE_KEY_NEW_CLUSTER}"}"
+ local AKS_RG_NAME="${14:-""}"
+ local GKE_PREEMPTIBLE_NODES="${15:-""}"
+ local FLEET_REPO_DIR="${16:-"${FLEET_REPO_DIR}"}"
+ local FLEET_REPO_URL="${17:-""}"
+ local SW_CATALOGS_REPO_DIR="${18:-"${SW_CATALOGS_REPO_DIR}"}"
+ local SW_CATALOGS_REPO_URL="${19:-""}"
+ local SKIP_BOOTSTRAP="${20:"false"}"
+ local MGMT_PROJECT_NAME="${21:-"osm_admin"}"
+ local MGMT_CLUSTER_NAME="${22:-"_management"}"
+ local BASE_TEMPLATES_PATH="${23:-"cloud-resources"}"
+ local TEMPLATE_MANIFEST_FILENAME="${24:-"nodegroup.yaml"}"
+ local MANIFEST_FILENAME="${25:-"${NODEGROUP_NAME}.yaml"}"
+
+ # Is the provider type supported?
+ local VALID_PROVIDERS=("eks" "aks" "gke")
+ CLUSTER_TYPE="${CLUSTER_TYPE,,}"
+ [[ ! ($(echo ${VALID_PROVIDERS[@]} | grep -w "${CLUSTER_TYPE}")) ]] && return 1
+
+ # Determines the source dir for the templates and the target folder in Fleet
+ local TEMPLATES_DIR="${SW_CATALOGS_REPO_DIR}/${BASE_TEMPLATES_PATH}/eks-nodegroup/templates"
+ local TARGET_FOLDER="${FLEET_REPO_DIR}/${MGMT_PROJECT_NAME}/managed-resources/${MGMT_CLUSTER_NAME}/${CLUSTER_NAME}"
+
+ local IS_NODEGROUP_ROLE=$([[ "${NODEGROUP_ROLE}" != "default" ]]; echo $?)
+ local IS_DEFAULT_NODEGROUP_ROLE=$([[ "${NODEGROUP_ROLE}" == "default" ]]; echo $?)
+
+ local PATCH_VALUE=""
+ local COMPONENT=()
+ if [[ "${IS_NODEGROUP_ROLE}" == "0" ]];
+ then
+ PATCH_VALUE=$(cat <<EOF
+patch: |
+ apiVersion: eks.aws.upbound.io/v1beta1
+ kind: NodeGroup
+ metadata:
+ name: \${nodegroup_name}
+ spec:
+ forProvider:
+ nodeRoleArn: \${role}
+EOF
+)
+ else
+ COMPONENT=("../role")
+ fi
+
+ # Pipeline of transformations to create the cluster resource
+ export NODEGROUP_KUSTOMIZATION_NAME
+ # export OVERLAY_FOLDER
+ folder2list \
+ "${TEMPLATES_DIR}" | \
+ replace_env_vars \
+ '${NODEGROUP_KUSTOMIZATION_NAME}' | \
+ patch_replace \
+ ".spec.postBuild.substitute.nodegroup_name" \
+ "${NODEGROUP_NAME}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ patch_replace \
+ ".spec.postBuild.substitute.cluster_name" \
+ "${CLUSTER_NAME}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ patch_replace \
+ ".spec.postBuild.substitute.cluster_location" \
+ "${CLUSTER_LOCATION}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ patch_replace \
+ ".spec.postBuild.substitute.vm_size" \
+ "${VM_SIZE}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ patch_replace \
+ ".spec.postBuild.substitute.node_count" \
+ "${NODE_COUNT}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ patch_replace \
+ ".spec.postBuild.substitute.providerconfig_name" \
+ "${PROVIDERCONFIG_NAME}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ patch_replace \
+ ".spec.postBuild.substituteFrom[0].name" \
+ "${CONFIGMAP_NAME}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ patch_replace \
+ ".spec.postBuild.substitute.role" \
+ "${NODEGROUP_ROLE}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ transform_if \
+ "${IS_NODEGROUP_ROLE}" \
+ add_patch_to_kustomization_as_list \
+ "${NODEGROUP_KUSTOMIZATION_NAME}" \
+ "${PATCH_VALUE}" | \
+ transform_if \
+ "${IS_DEFAULT_NODEGROUP_ROLE}" \
+ add_component_to_kustomization_as_list \
+ "${NODEGROUP_KUSTOMIZATION_NAME}" \
+ "${COMPONENT}" | \
+ rename_file_in_items \
+ "${TEMPLATE_MANIFEST_FILENAME}" \
+ "${MANIFEST_FILENAME}" | \
+ prepend_folder_path "${NODEGROUP_KUSTOMIZATION_NAME}/" | \
+ list2folder_cp_over \
+ "${TARGET_FOLDER}"
+}
+
+function scale_nodegroup() {
+ local NODEGROUP_NAME="$1"
+ local NODEGROUP_KUSTOMIZATION_NAME="$2"
+ local CLUSTER_NAME="$3"
+ local CLUSTER_TYPE="$4"
+ local NODE_COUNT="$5"
+ local PUBLIC_KEY_MGMT="${6:-"${PUBLIC_KEY_MGMT}"}"
+ local PUBLIC_KEY_NEW_CLUSTER="${7}"
+ local PRIVATE_KEY_NEW_CLUSTER="${8:-"${PRIVATE_KEY_NEW_CLUSTER}"}"
+ ## `FLEET_REPO_DIR` is the result of:
+ ## "{{inputs.parameters.fleet_mount_path}}/{{inputs.parameters.cloned_fleet_folder_name}}"
+ local FLEET_REPO_DIR="${9:-"${FLEET_REPO_DIR}"}"
+ local FLEET_REPO_URL="${10:-""}"
+ ## `SW_CATALOGS_REPO_DIR` is the result of:
+ ## "{{inputs.parameters.sw_catalogs_mount_path}}/{{inputs.parameters.cloned_sw_catalogs_folder_name}}"
+ local SW_CATALOGS_REPO_DIR="${11:-"${SW_CATALOGS_REPO_DIR}"}"
+ local SW_CATALOGS_REPO_URL="${12:-""}"
+ # Only change if absolutely needeed
+ local MGMT_PROJECT_NAME="${13:-"osm_admin"}"
+ local MGMT_CLUSTER_NAME="${14:-"_management"}"
+ local BASE_TEMPLATES_PATH="${15:-"cloud-resources"}"
+ local MANIFEST_FILENAME="${16:-"${NODEGROUP_NAME}"}"
+
+ # Is the provider type supported?
+ local VALID_PROVIDERS=("eks" "aks" "gke")
+ CLUSTER_TYPE="${CLUSTER_TYPE,,}"
+ [[ ! ($(echo ${VALID_PROVIDERS[@]} | grep -w "${CLUSTER_TYPE}")) ]] && return 1
+
+ # Determines the folder in Fleet
+ local TARGET_FOLDER="${FLEET_REPO_DIR}/${MGMT_PROJECT_NAME}/managed-resources/${MGMT_CLUSTER_NAME}/${CLUSTER_NAME}/${NODEGROUP_KUSTOMIZATION_NAME}"
+
+ # Pipeline of transformations to create the cluster resource
+ export NODEGROUP_KUSTOMIZATION_NAME
+ folder2list \
+ "${TARGET_FOLDER}" | \
+ patch_replace \
+ ".spec.postBuild.substitute.node_count" \
+ "${NODE_COUNT}" \
+ "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${NODEGROUP_KUSTOMIZATION_NAME}\")" | \
+ list2folder_cp_over \
+ "${TARGET_FOLDER}"
+}
+
+# Delete nodegroup
+function delete_nodegroup() {
+ local NODEGROUP_KUSTOMIZATION_NAME="$1"
+ local CLUSTER_NAME="$2"
+ local PROJECT_NAME="${3:-"${MGMT_PROJECT_NAME}"}"
+ local FLEET_REPO_DIR="${4:-"${FLEET_REPO_DIR}"}"
+ local MGMT_RESOURCES_DIR="${5:-"${MGMT_RESOURCES_DIR}"}"
+
+ local NODEGROUP_DIR="${MGMT_RESOURCES_DIR}/${CLUSTER_NAME}/${NODEGROUP_KUSTOMIZATION_NAME}"
+
+ # Delete node Kustomizations
+ rm -rf "${NODEGROUP_DIR}"
+}
+
# TODO: Deprecated
# Create AKS cluster (without bootstrap)
function create_cluster_aks() {