Aks terraform ha python

From UVOO Tech Wiki
Jump to navigation Jump to search
import os
import json
from jinja2 import Template

# Define variables for your AKS cluster
resource_group_name = "my-aks-rg"
location = "eastus"
cluster_name = "my-aks-cluster"
node_pool_name = "default-nodepool"
vm_size = "Standard_D2_v4"
kubernetes_version = "1.26"
dns_prefix = "myakscluster" 

# Load Terraform template
with open("aks_ha_template.tf", "r") as f:
    template_string = f.read()
    template = Template(template_string)

# Generate Terraform configuration
terraform_config = template.render(
    resource_group_name=resource_group_name, 
    location=location,
    cluster_name=cluster_name,
    node_pool_name=node_pool_name,
    vm_size=vm_size,
    kubernetes_version=kubernetes_version,
    dns_prefix=dns_prefix
)

# Write generated Terraform code to a file
with open("main.tf", "w") as f:
    f.write(terraform_config)

# Execute Terraform commands (replace with your actual execution method)
os.system("terraform init")
os.system("terraform plan")
os.system("terraform apply")

Another

import os
import subprocess

# Configuration: specify regions and AKS cluster parameters
regions = ["eastus", "westus", "northeurope"]  # Modify as needed
aks_params = {
    "cluster_name": "my-aks-cluster",
    "resource_group": "my-aks-resource-group",
    "node_count": 3,
    "kubernetes_version": "1.26.3"
}

# Terraform template directory
terraform_dir = "./terraform"  # Path to your Terraform configuration files

# Ensure Terraform is installed
def check_terraform_installed():
    try:
        subprocess.run(["terraform", "--version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        print("Terraform is installed.")
    except FileNotFoundError:
        print("Terraform is not installed. Please install Terraform before running this script.")
        exit(1)

# Initialize and apply Terraform for each region
def deploy_aks_clusters():
    for region in regions:
        print(f"Deploying AKS cluster in {region}...")
        # Set environment variables for Terraform
        env = os.environ.copy()
        env.update({
            "TF_VAR_region": region,
            "TF_VAR_cluster_name": f"{aks_params['cluster_name']}-{region}",
            "TF_VAR_resource_group": f"{aks_params['resource_group']}-{region}",
            "TF_VAR_node_count": str(aks_params['node_count']),
            "TF_VAR_kubernetes_version": aks_params["kubernetes_version"]
        })

        # Terraform commands
        try:
            # Initialize Terraform
            subprocess.run(["terraform", "init"], cwd=terraform_dir, check=True, env=env)

            # Apply Terraform configuration
            subprocess.run(["terraform", "apply", "-auto-approve"], cwd=terraform_dir, check=True, env=env)

            print(f"Successfully deployed AKS cluster in {region}.")
        except subprocess.CalledProcessError as e:
            print(f"Error deploying AKS cluster in {region}: {e}")
            continue

if __name__ == "__main__":
    check_terraform_installed()
    deploy_aks_clusters()

maint.tf

provider "azurerm" {
  features {}
}

variable "region" {}
variable "cluster_name" {}
variable "resource_group" {}
variable "node_count" {}
variable "kubernetes_version" {}

resource "azurerm_resource_group" "aks" {
  name     = var.resource_group
  location = var.region
}

resource "azurerm_kubernetes_cluster" "aks" {
  name                = var.cluster_name
  location            = var.region
  resource_group_name = azurerm_resource_group.aks.name
  kubernetes_version  = var.kubernetes_version

  default_node_pool {
    name       = "default"
    node_count = var.node_count
    vm_size    = "Standard_DS2_v2"
  }

  identity {
    type = "SystemAssigned"
  }
}