diff --git a/docker/osm-krm-functions/scripts/library/helper-functions.rc b/docker/osm-krm-functions/scripts/library/helper-functions.rc
index f5e4a55..03614d1 100644
--- a/docker/osm-krm-functions/scripts/library/helper-functions.rc
+++ b/docker/osm-krm-functions/scripts/library/helper-functions.rc
@@ -379,6 +379,47 @@
     "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${KUSTOMIZATION_NAME}\")"
 }
 
+function patch_add_value_as_list() {
+  local KEY_PATH="$1"
+  local VALUE="$2"
+  local TARGET_FILTERS="${3:-}"
+
+  yq "(.items[]${TARGET_FILTERS})${KEY_PATH} += [${VALUE}]"
+}
+
+function add_patch_to_kustomization_as_list() {
+  local KUSTOMIZATION_NAME="$1"
+  local PATCH_VALUE="$2"
+
+  local VALUE_AS_JSON=$(echo "$PATCH_VALUE" | yq -o json -I0)
+
+  patch_add_value_as_list \
+    ".spec.patches" \
+    "${VALUE_AS_JSON}" \
+    "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${KUSTOMIZATION_NAME}\")"
+}
+
+function add_component_to_kustomization_as_list() {
+  local KUSTOMIZATION_NAME="$1"
+  shift
+  local COMPONENT=("$@")
+
+  local COMPONENT_JSON=$(printf '"%s",' "${COMPONENT[@]}" | sed 's/,$//')
+
+  patch_add_value_as_list \
+    ".spec.components" \
+    "${COMPONENT_JSON}" \
+    "| select(.kind == \"Kustomization\") | select(.metadata.name == \"${KUSTOMIZATION_NAME}\")"
+}
+
+function add_config_to_kustomization() {
+  local KUSTOMIZATION_NAME="$1"
+
+  yq '
+    (.items[] | select(.kind == "Kustomization") | select(.metadata.name == "'"${KUSTOMIZATION_NAME}"'"))
+    .spec.postBuild.substituteFrom = [{"kind": "ConfigMap", "name": "'"${KUSTOMIZATION_NAME}"'-parameters"}]
+  '
+}
 
 # Helper function to produce a JSON Patch as specified in RFC 6902
 function as_json_patch() {
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}"
 
