in source/eksfedctl/create_script.py [0:0]
def create_federated_clusters(config):
metadata = config.yaml["metadata"]
[region1, region2] = metadata["regions"]
zones = [get_availability_zones(region1), get_availability_zones(region2)]
logs.log(
f"Deploying federated Amazon EKS clusters in {region1} and {region2}..."
)
root_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")
os.chdir(f"{root_path}/cdk-vpc-peering/")
exec_command(["npm", "install", "--quiet", "--no-progress", "--no-fund"])
clusters = []
output_config = dict()
for idx, region in enumerate(metadata["regions"]):
cluster_name = f"{metadata['name']}-{idx+1}"
output_config[f"CLUSTER{idx+1}_NAME"] = cluster_name
output_config[f"CLUSTER{idx+1}_REGION"] = region
logs.log(f"Deploying cluster {cluster_name} to {region}")
eks = boto3.client("eks", region_name=region)
if cluster_name in eks.list_clusters()["clusters"]:
raise Exception(f"Cluster \"{cluster_name}\" already exists")
cluster_template = copy.deepcopy(config.spec)
cluster_template["metadata"]["name"] = cluster_name
cluster_template["metadata"]["region"] = region
cluster_template["vpc"]["cidr"] = get_cidr_for_vpc(idx+1)
cluster_template["availabilityZones"] = zones[idx]
cluster_yaml = yaml.dump(cluster_template)
exec_command(["eksctl", "create", "cluster", "-f", "-"], cluster_yaml)
cluster_details = eks.describe_cluster(name=cluster_name)["cluster"]
clusters.append(cluster_details)
create_identity_mapping(config, region, cluster_details)
vpc1id = clusters[0]["resourcesVpcConfig"]["vpcId"]
vpc2id = clusters[1]["resourcesVpcConfig"]["vpcId"]
logs.log(f"Creating VPC peering")
bastion = config.bastion
create_vpc_peering(config, f"{metadata['name']}-peering-clusters",
region1, vpc1id, get_cidr_for_vpc(1),
region2, vpc2id, get_cidr_for_vpc(2))
create_vpc_peering(config, f"{metadata['name']}-peering-bastion-{vpc1id}",
bastion.region, bastion.vpcid, bastion.vpccidr,
region1, vpc1id, get_cidr_for_vpc(1))
create_vpc_peering(config, f"{metadata['name']}-peering-bastion-{vpc2id}",
bastion.region, bastion.vpcid, bastion.vpccidr,
region2, vpc2id, get_cidr_for_vpc(2))
os.chdir("..")
clusters_disable_public_access(config, clusters)
logs.log(f"Joining clusters into federation")
clusters_join_federation(config, clusters)
output_config["BASE_NAME"] = metadata["name"]
output_config["BASTION_REGION"] = bastion.region
write_output_config(config, output_config)
logs.log("Done. Federated EKS clusters has been created")