aws-ia / terraform-aws-eks-blueprints

Configure and deploy complete EKS clusters.
https://aws-ia.github.io/terraform-aws-eks-blueprints/
Apache License 2.0
2.7k stars 1.42k forks source link

Unable to run terraform apply on `kubernetes_addons` to add App to Workloads Repo #1377

Closed jomakori closed 1 year ago

jomakori commented 1 year ago

Description

When attempting to apply the module "kubernetes_addons" from source, I keep receiving this "Error in function call" that's preventing me on making changes to this module.

Error (Looped several times, same line/block of code)

│ Error: Error in function call
│ 
│   on .terraform/modules/kubernetes_addons/modules/kubernetes-addons/argocd/main.tf line 98, in resource "kubectl_manifest" "argocd_kustomize_application":
│   98:   for_each = { for k, v in var.applications : k => merge(local.default_argocd_application, v) if merge(local.default_argocd_application, v).type == "kustomize" }
│     ├────────────────
│     │ local.default_argocd_application is object with 7 attributes
│ 
│ Call to function "merge" failed: arguments must be maps or objects, got "bool".

Manifest in issue

module "kubernetes_addons" {
  source = "github.com/aws-ia/terraform-aws-eks-blueprints?ref=v4.18.1/modules/kubernetes-addons"

  eks_cluster_id     = module.eks_blueprints.eks_cluster_id
  eks_cluster_endpoint         = module.eks_blueprints.eks_cluster_endpoint
  eks_oidc_provider            = module.eks_blueprints.oidc_provider
  eks_cluster_version          = module.eks_blueprints.eks_cluster_version
  eks_worker_security_group_id = module.eks_blueprints.worker_node_security_group_id
  #---------------------------------------------------------------
  # ARGO CD Setup
  #---------------------------------------------------------------

  enable_argocd         = true
  argocd_manage_add_ons = true # Indicates that ArgoCD is responsible for managing/deploying Add-ons.

  argocd_applications = {
    #---------------------------------------------------------------
    # Helm Charts - Addons
    #---------------------------------------------------------------
    addons = {
      path               = "chart"
      repo_url           = "https://github.com/richcontext/k8s-hyphenservices.git"
      add_on_application = true
    }
    #---------------------------------------------------------------
    # Helm Charts - Workload Applications
    #---------------------------------------------------------------
    workloads = {
        path               = "envs/dev"
        repo_url           = "https://github.com/aws-samples/eks-blueprints-workloads.git"
        add_on_application  = true
      }

  argocd_helm_config = {
    set = [
      {
        name  = "server.service.type"
        value = "LoadBalancer"
      }
    ]
  }

  #---------------------------------------------------------------
  # ADD-ONS - You can add additional addons here
  # https://aws-ia.github.io/terraform-aws-eks-blueprints/add-ons/
  #---------------------------------------------------------------
              ####    GitOps Managed    ####
          enable_ingress_nginx                 = true
          enable_cert_manager                  = true
          enable_metrics_server                = true
          enable_karpenter                     = true
          enable_vpa                           = true
          enable_external_secrets              = true
          enable_kube_prometheus_stack         = true
          enable_aws_node_termination_handler  = true

              ####    AWS Managed       ####
          enable_amazon_eks_kube_proxy         = true
          enable_amazon_eks_aws_ebs_csi_driver = true
  }
}

# Deploying default provisioner and default-lt (using launch template) for Karpenter autoscaler
data "kubectl_path_documents" "karpenter_provisioners" {
  pattern = "${path.module}/provisioners/*"
  vars = {
    azs                     = join(",", var.azs)
    iam-instance-profile-id = "${var.cluster_name}-${var.cluster_name}-ng"
    eks-cluster-id          = "${var.cluster_name}"
    eks-vpc_name            = module.vpc.vpc_id
  }
}

resource "kubectl_manifest" "karpenter_provisioner" {
  for_each  = toset(data.kubectl_path_documents.karpenter_provisioners.documents)
  yaml_body = each.value
}

If your request is for a new feature, please use the Feature request template.

Versions

Steps to reproduce the behavior:

Expected behaviour

Actual behaviour

bryantbiggs commented 1 year ago

these:

          enable_ingress_nginx                 = true
          enable_cert_manager                  = true
          enable_metrics_server                = true
          enable_karpenter                     = true
          enable_vpa                           = true
          enable_external_secrets              = true
          enable_kube_prometheus_stack         = true
          enable_aws_node_termination_handler  = true

              ####    AWS Managed       ####
          enable_amazon_eks_kube_proxy         = true
          enable_amazon_eks_aws_ebs_csi_driver = true

Do not go inside the argocd_applications = { ... }

jomakori commented 1 year ago

AH - Thanks Bryant!! Easy fix, confusing diagnosis haha!