Feature 11055: Update cluster configuration to support the feature

Change-Id: I7a92c29a943d8767524ed40636eb204bd4ec2718
Signed-off-by: rshri <shrinithi.r@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 61f6b69..1a3c0bd 100644
--- a/docker/osm-krm-functions/scripts/library/krm-functions.rc
+++ b/docker/osm-krm-functions/scripts/library/krm-functions.rc
@@ -621,8 +621,13 @@
   local MGMT_PROJECT_NAME="${19:-"osm_admin"}"
   local MGMT_CLUSTER_NAME="${20:-"_management"}"
   local BASE_TEMPLATES_PATH="${21:-"cloud-resources"}"
-  local TEMPLATE_MANIFEST_FILENAME="${22:-"${CLUSTER_TYPE,,}01.yaml"}"
-  local MANIFEST_FILENAME="${23:-"${CLUSTER_TYPE,,}-${CLUSTER_NAME}.yaml"}"
+  # EKS only
+  local CLUSTER_IAM_ROLE="${22}"
+  local CLUSTER_PRIVATE_SUBNETS_ID="${23}"
+  local CLUSTER_PUBLIC_SUBNETS_ID="${24}"
+  local CONFIGMAP_NAME="${25}"
+  local TEMPLATE_MANIFEST_FILENAME="${26:-"${CLUSTER_TYPE,,}01.yaml"}"
+  local MANIFEST_FILENAME="${27:-"${CLUSTER_TYPE,,}-${CLUSTER_NAME}.yaml"}"
 
 
   # Is the provider type supported?
@@ -630,14 +635,90 @@
   CLUSTER_TYPE="${CLUSTER_TYPE,,}"
   [[ ! ($(echo ${VALID_PROVIDERS[@]} | grep -w "${CLUSTER_TYPE}")) ]] && return 1
 
+  # Determine which optional steps may be needed
+  local IS_EKS=$([[ "${CLUSTER_TYPE}" == "eks" ]]; echo $?)
+  local IS_AKS=$([[ "${CLUSTER_TYPE}" == "aks" ]]; echo $?)
+  local IS_GCP=$([[ "${CLUSTER_TYPE}" == "gcp" ]]; echo $?)
+
+  local IS_EKS_AND_IAM=1
+  local IAM_COMPONENTS=()
+  local PATCH_SUBNET=0
+  local PATCH_IAM=0
+  local PATCH_VALUE=""
+  local PATCH=1
+  local CONFIG=1
+
+  if [[ "$IS_EKS" -eq 0 ]]; then
+
+    # Check for subnet config
+    if [[ "$CLUSTER_PRIVATE_SUBNETS_ID" == "default" ]]; then
+      IS_EKS_AND_IAM=0
+      IAM_COMPONENTS+=("../network")
+    else
+      PATCH_SUBNET=1
+    fi
+
+    # Check for IAM role config
+    if [[ "$CLUSTER_IAM_ROLE" == "default" ]]; then
+      IS_EKS_AND_IAM=0
+      IAM_COMPONENTS+=("../iam")
+    else
+      PATCH_IAM=1
+    fi
+
+    # Set PATCH flag if patch is required
+    if [[ $PATCH_SUBNET -eq 1 || $PATCH_IAM -eq 1 ]]; then
+      # PATCH=1
+      echo "Generating patch..."
+
+      PATCH_VALUE=$(cat <<EOF
+  patch: |
+    apiVersion: eks.aws.upbound.io/v1beta1
+    kind: Cluster
+    metadata:
+      name: \${cluster_resource_name}-cluster
+    spec:
+      forProvider:
+EOF
+  )
+
+      # Append subnet block if needed
+      if [[ $PATCH_SUBNET -eq 1 ]]; then
+        PATCH_VALUE+=$(cat <<EOF
+
+        vpcConfig:
+          - endpointPrivateAccess: true
+            endpointPublicAccess: true
+            subnetIds: \${private_subnets}
+EOF
+  )
+      fi
+
+      # Append IAM role block if needed
+      if [[ $PATCH_IAM -eq 1 ]]; then
+        PATCH_VALUE+=$(cat <<EOF
+
+        roleArn: \${cluster_iam_role}
+EOF
+  )
+      fi
+    fi
+
+    # Set PATCH flag
+    if [[ "$PATCH_SUBNET" -eq 1 || "$PATCH_IAM" -eq 1 ]]; then
+      PATCH=0
+    fi
+
+    # Set CONFIG flag
+    if [[ "$CONFIGMAP_NAME" != "default" ]]; then
+      CONFIG=0
+    fi
+  fi
+
   # Determines the source dir for the templates and the target folder in Fleet
   local TEMPLATES_DIR="${SW_CATALOGS_REPO_DIR}/${BASE_TEMPLATES_PATH}/${CLUSTER_TYPE}/templates"
   local TARGET_FOLDER="${FLEET_REPO_DIR}/${MGMT_PROJECT_NAME}/managed-resources/${MGMT_CLUSTER_NAME}"
 
-  # Determine which optional steps may be needed
-  local IS_AKS=$([[ "${CLUSTER_TYPE}" == "aks" ]]; echo $?)
-  local IS_GCP=$([[ "${CLUSTER_TYPE}" == "gcp" ]]; echo $?)
-
   # Pipeline of transformations to create the cluster resource
   export CLUSTER_KUSTOMIZATION_NAME
   folder2list \
@@ -665,6 +746,10 @@
     "${K8S_VERSION}" \
     "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${CLUSTER_KUSTOMIZATION_NAME}\")" | \
   patch_replace \
+    ".spec.postBuild.substitute.cluster_iam_role" \
+    "${CLUSTER_IAM_ROLE}" \
+    "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${CLUSTER_KUSTOMIZATION_NAME}\")" | \
+  patch_replace \
     ".spec.postBuild.substitute.providerconfig_name" \
     "${PROVIDERCONFIG_NAME}" \
     "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${CLUSTER_KUSTOMIZATION_NAME}\")" | \
@@ -680,10 +765,24 @@
       ".spec.postBuild.substitute.preemptible_nodes" \
       "${GKE_PREEMPTIBLE_NODES}" \
       "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${CLUSTER_KUSTOMIZATION_NAME}\")" | \
+  transform_if \
+    "${PATCH}" \
+    add_patch_to_kustomization_as_list \
+      "${CLUSTER_KUSTOMIZATION_NAME}" \
+      "${PATCH_VALUE}" | \
+  transform_if \
+    "${IS_EKS_AND_IAM}" \
+    add_component_to_kustomization_as_list \
+      "${CLUSTER_KUSTOMIZATION_NAME}" \
+      "${IAM_COMPONENTS[@]}" | \
+  transform_if \
+    "${CONFIG}" \
+    add_config_to_kustomization \
+      "${CLUSTER_KUSTOMIZATION_NAME}" | \
   rename_file_in_items \
     "${TEMPLATE_MANIFEST_FILENAME}" \
     "${MANIFEST_FILENAME}" | \
-  prepend_folder_path "${CLUSTER_KUSTOMIZATION_NAME}/" | \
+  prepend_folder_path "${CLUSTER_KUSTOMIZATION_NAME}/clusterbase/" | \
   list2folder_cp_over \
     "${TARGET_FOLDER}"