Loops in templates with yamlencode

Hi @apparentlymart,

I tried as per your suggestions by moving the merge pattern under spec.

${yamlencode({
    "apiVersion": "core.gardener.cloud/v1beta1",
    "kind": "Shoot",
    "metadata": {
        "name": shoot_cluster_name,
        "namespace": project_name,
    },
    "timeouts": {
        "create": create_timeout,
        "update": update_timeout,
        "delete": delete_timeout,
    },
    merge({
    "spec": {
        "addons": {
            "kubernetesDashboard": {
                "authenticationMode": "token",
                "enabled": dashboard_enabled,
            },
            "nginxIngress": {
                "enabled": nginx_enabled,
                "externalTrafficPolicy": "Cluster",
            }
        },
        "cloudProfileName": target_profile,
        "hibernation": {
            "enabled": false,
        },
        "kubernetes": {
            "allowPrivilegedContainers": true,
            "version": kubernetes_version,
        },
        "maintenance": {
            "autoUpdate": {
                "kubernetesVersion": maintenance_k8s_version_enabled,
                "machineImageVersion": maintenance_machine_image_version_enabled,
            },
            "timeWindow": {
                "begin": "210000+0000",
                "end": "220000+0000",
            }
        },
        "networking": {
            "nodes": networking_nodes,
            "pods": networking_pods,
            "services": networking_services,
            "type": networking_type,
        },
        "provider": {
            "infrastructureConfig": {
                "apiVersion": "aws.provider.extensions.gardener.cloud/v1alpha1",
                "kind": "InfrastructureConfig",
                "networks": {
                    "vpc": {
                        "cidr": vnetcidr,
                    },
                    "zones": [
                        for subnet in subnets : {
                            internal = subnet.internal
                            name     = subnet.name
                            public   = subnet.public
                            workers  = subnet.workers
                        }
                    ]
                }
            },
            "type": cloud_provider,
            "workers": [
                {
                    "machine": {
                        "image":{
                            "name": machine_image_name,
                            "version": machine_image_version,
                        },
                        "type": machine_type,
                    },
                    "maxSurge": worker_max_surge,
                    "maxUnavailable": worker_max_unavailable,
                    "maximum": worker_maximum,
                    "minimum": worker_minimum,
                    "name": worker_name,
                    "volume": {
                        "size": disk_size,
                        "type": disk_type,
                    },
                    "zones": zones,
                }
            ]
        },
        "purpose": "evaluation",
        "region": location,
        "secretBindingName": target_secret,
    }
    gardener_dns_management ? {
    "spec": {
        "dns": {
            "domain" : "${shoot_cluster_name}.${element(split("-",project_name),1)}.${gardenerdomain}",
            "providers": [
                {
                    "domains": {
                        "include": included_dns_domains,
                    },
                    "secretName": dns_secret_name,
                    "type": dns_type,
                }
            ]
        },
        "extensions": [
            {
                "type": "shoot-dns-service",
            }
      ]
    },
    } : {},    ---->  ERROR on this line. 
    gardener_dns_ssl_management ? {
    "spec": {
      "dns": {
            "domain" : "${shoot_cluster_name}.${element(split("-",project_name),1)}.${gardenerdomain}",
            "providers": [
                {
                    "domains": {
                        "include": included_dns_domains,
                    },
                    "secretName": dns_secret_name,
                    "type": dns_type,
                }
            ]
      },
      "extensions": [
          {
                "type": "shoot-dns-service",
          },
          {
                "providerConfig": {
                    "apiVersion": "service.cert.extensions.gardener.cloud/v1alpha1",
                    "issuers": [
                        {
                            "email": email_id,
                            "name": subdomain,
                            "server": "https://acme-v02.api.letsencrypt.org/directory",
                        }
                    ],
                },
                "type": "shoot-cert-service",
          }
       ]
    },
    } : {},
   })
})}

Error as follows

Call to function "templatefile" failed:
./templates/gardener-shoot.yaml_wip.tmpl:114,11-12: Missing attribute value;
Expected an attribute value, introduced by an equals sign ("=")..

I am not confident if i am doing it correct .

Kevin