alert-zebra-27114
02/16/2022, 11:24 AMprehistoric-activity-61023
02/16/2022, 11:31 AMalert-zebra-27114
02/16/2022, 11:56 AM"""An AWS Python Pulumi program"""
import pulumi
import pulumi_aws_quickstart_vpc as aws_vpc
import pulumi_eks as eks
import pulumi_kubernetes as k8s
profile = pulumi.Config('aws').require('profile')
region = pulumi.Config('aws').require('region')
variant = pulumi.Config().require('variant')
<http://pulumi.log.info|pulumi.log.info>(f"{variant=}")
# No default VPC
vpc = aws_vpc.Vpc('vpc',
cidr_block='20.20.0.0/16',
availability_zone_config=[
aws_vpc.AvailabilityZoneArgs(
availability_zone=f"{region}a",
public_subnet_cidr="20.20.0.0/24",
private_subnet_a_cidr="20.20.1.0/24",
), aws_vpc.AvailabilityZoneArgs(
availability_zone=f"{region}b",
private_subnet_a_cidr="20.20.3.0/24",
)]
)
cluster = eks.Cluster("eks",
vpc_id=vpc.vpc_id,
public_subnet_ids=vpc.public_subnet_ids,
private_subnet_ids=vpc.private_subnet_ids,
provider_credential_opts=eks.KubeconfigOptionsArgs(profile_name=profile))
kubernetes_provider = k8s.Provider("kubernetes_provider", kubeconfig=cluster.kubeconfig)
rname = 'coredns-conf'
# Just to see the difference
wanted_coredns_conf = """# CHANGED
.:53 {
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
errors
health
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
"""
if variant == 'just-import':
k8s.core.v1.ConfigMap(
rname,
metadata={
'namespace': 'kube-system',
'name': 'coredns',
},
opts=pulumi.ResourceOptions(
provider=kubernetes_provider,
import_='kube-system/coredns',
ignore_changes=['data', 'metadata.annotations', 'metadata.labels']
)
)
elif variant == 'declare':
k8s.core.v1.ConfigMap(
rname,
metadata={
'namespace': 'kube-system',
'name': 'coredns',
},
data={
'Corefile': wanted_coredns_conf
},
opts=pulumi.ResourceOptions(
provider=kubernetes_provider,
ignore_changes=['metadata.annotations', 'metadata.labels'],
)
)
I run this project twice via automation.
• First with variant="just-import", which will import the wanted ConfigMap
• Then with variant="declare", which will change the data of the map
For unknown reasons it does a delete-create operation instead of a fix... but at least it works for now.