Skip to content

Instantly share code, notes, and snippets.

@xandout
Last active January 12, 2025 19:50
Show Gist options
  • Save xandout/463276898ec6d4d86fb7e3d9d0f38d9e to your computer and use it in GitHub Desktop.
Save xandout/463276898ec6d4d86fb7e3d9d0f38d9e to your computer and use it in GitHub Desktop.
Prompt template to analyze Terraform plan output against a business use case with rules engine

This gist shows a prompt to analyze terraform plan output according to plain english rules.

An example is given for a pass scenario and a fail scenario with the same ruleset.

Role: You are an expert in infrastructure-as-code and Terraform. Your task is to evaluate a Terraform plan output to ensure it complies with defined expectations.
Input Parameters:
1. Terraform Plan Output:
<TFPLAN_CONTENT> # EDIT
2. Business Context:
<BUSINESS_CONTEXT> # EDIT
3. Evaluation Rules:
- Name: <RULE_NAME> # EDIT
Description: <RULE_DESCRIPTION> # EDIT
Severity: <ERROR|WARN> # EDIT
----LLM INSTRUCTIONS----
Instructions:
1. Compare the Terraform plan output against each rule.
2. Verify that all expected changes are present in the plan.
3. Identify any changes in the plan that weren't listed in expected changes.
4. Apply rules based on their severity:
- ERROR: Must pass for overall success
- WARN: Generate warning but don't cause failure
5. Provide specific reasons for any rule violations.
Output Format(IMPORTANT - OUTPUT MUST BE IN THIS FORMAT, NO EXTRA):
Rule Evaluations:
- Rule: <RULE_NAME>
Status: <PASS|FAIL|WARN>
Details: <Not present if passed, explanation if failed/warning>
Expected Changes Review:
- All expected changes present: <YES|NO>
- Unexpected changes found: <YES|NO>
- Details: <List any missing or unexpected changes>
Overall Result: <PASS|FAIL>
Role: You are an expert in infrastructure-as-code and Terraform. Your task is to evaluate a Terraform plan output to ensure it complies with defined expectations.
Input Parameters:
1. Terraform Plan Output:
module.compute_nodegroup_az[0].aws_eks_node_group.this[0] will be updated in-place
resource "aws_eks_node_group" "this" {
id = "mitchellturner-stg-cluster:compute-1a-20241222161614381000000015"
~ labels = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (3 unchanged elements hidden)
}
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1a"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (18 unchanged elements hidden)
}
# (14 unchanged attributes hidden)
~ launch_template {
id = "lt-r3d4ct3d7414d9d"
name = "compute-1a-eks-node-group-2024122216160806680000000f"
~ version = "3" -> (known after apply)
}
# (4 unchanged blocks hidden)
}
module.compute_nodegroup_az[0].aws_iam_role.this[0] will be updated in-place
resource "aws_iam_role" "this" {
id = "compute-1a-eks-node-group-20241222161606514700000002"
name = "compute-1a-eks-node-group-20241222161606514700000002"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (11 unchanged attributes hidden)
}
module.compute_nodegroup_az[0].aws_launch_template.this[0] will be updated in-place
resource "aws_launch_template" "this" {
~ default_version = 3 -> (known after apply)
id = "lt-r3d4ct3d7414d9d"
~ image_id = "ami-00a2c6fcb070edafc" -> "ami-013a08cedb97e8b25"
~ latest_version = 3 -> (known after apply)
name = "compute-1a-eks-node-group-2024122216160806680000000f"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (15 unchanged attributes hidden)
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1a"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1a"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1a"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
# (3 unchanged blocks hidden)
}
module.compute_nodegroup_az[1].aws_eks_node_group.this[0] will be updated in-place
resource "aws_eks_node_group" "this" {
id = "mitchellturner-stg-cluster:compute-1b-20241222161614381000000013"
~ labels = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (3 unchanged elements hidden)
}
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1b"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (18 unchanged elements hidden)
}
# (14 unchanged attributes hidden)
~ launch_template {
id = "lt-r3d4ct3d86298b2"
name = "compute-1b-eks-node-group-20241222161608066900000011"
~ version = "3" -> (known after apply)
}
# (4 unchanged blocks hidden)
}
module.compute_nodegroup_az[1].aws_iam_role.this[0] will be updated in-place
resource "aws_iam_role" "this" {
id = "compute-1b-eks-node-group-20241222161606514800000003"
name = "compute-1b-eks-node-group-20241222161606514800000003"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (11 unchanged attributes hidden)
}
module.compute_nodegroup_az[1].aws_launch_template.this[0] will be updated in-place
resource "aws_launch_template" "this" {
~ default_version = 3 -> (known after apply)
id = "lt-r3d4ct3d86298b2"
~ image_id = "ami-00a2c6fcb070edafc" -> "ami-013a08cedb97e8b25"
~ latest_version = 3 -> (known after apply)
name = "compute-1b-eks-node-group-20241222161608066900000011"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (15 unchanged attributes hidden)
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1b"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1b"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1b"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
# (3 unchanged blocks hidden)
}
module.compute_nodegroup_az[2].aws_eks_node_group.this[0] will be updated in-place
resource "aws_eks_node_group" "this" {
id = "mitchellturner-stg-cluster:compute-1c-20241222161614381000000017"
~ labels = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (3 unchanged elements hidden)
}
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1c"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (18 unchanged elements hidden)
}
# (14 unchanged attributes hidden)
~ launch_template {
id = "lt-r3d4ct3d9ac322b"
name = "compute-1c-eks-node-group-2024122216160806680000000d"
~ version = "3" -> (known after apply)
}
# (4 unchanged blocks hidden)
}
module.compute_nodegroup_az[2].aws_iam_role.this[0] will be updated in-place
resource "aws_iam_role" "this" {
id = "compute-1c-eks-node-group-20241222161606514700000001"
name = "compute-1c-eks-node-group-20241222161606514700000001"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (11 unchanged attributes hidden)
}
module.compute_nodegroup_az[2].aws_launch_template.this[0] will be updated in-place
resource "aws_launch_template" "this" {
~ default_version = 3 -> (known after apply)
id = "lt-r3d4ct3d9ac322b"
~ image_id = "ami-00a2c6fcb070edafc" -> "ami-013a08cedb97e8b25"
~ latest_version = 3 -> (known after apply)
name = "compute-1c-eks-node-group-2024122216160806680000000d"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (15 unchanged attributes hidden)
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1c"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1c"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1c"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
# (3 unchanged blocks hidden)
}
2. Business Context:
We perform weekly node refreshes
3. Evaluation Rules:
- Name: NodeRefreshMesssageUpdated
Description: "Node refresh message should be updated to todays date"
Severity: ERROR
Examples:
- Provided: jan-12-2025
Result: PASS
- Provided: jan-5-2025
Result: PASS
- Provided: January 12, 2025
Result: FAIL
- Provided: January 5, 2025
Result: FAIL
- Provided: 1736709342
Result: FAIL
- Name: AMIUpdated
Description: "AMI ID should be updated"
Severity: ERROR
- Name: LaunchTemplateUpdates
Description: "Launch templates should be updated with new tag and AMI ID"
Severity: ERROR
- Name: NoUnexpectedChanges
Description: "No unexpected changes should be present in the plan"
Severity: ERROR
Instructions:
1. Compare the Terraform plan output against each rule.
2. Verify that all expected changes are present in the plan.
3. Identify any changes in the plan that weren't listed in expected changes.
4. Apply rules based on their severity:
- ERROR: Must pass for overall success
- WARN: Generate warning but don't cause failure
5. Provide specific reasons for any rule violations.
Output Format(IMPORTANT - OUTPUT MUST BE IN THIS FORMAT, NO EXTRA):
```yaml
Rule Evaluations:
- Rule: <RULE_NAME>
Status: <PASS|FAIL|WARN>
Details: <"OK" if passed, explanation if failed/warning>
Expected Changes Review:
- All expected changes present: <YES|NO>
- Unexpected changes found: <YES|NO>
- Details: <List any missing or unexpected changes>
Overall Result: <PASS|FAIL>
```
Rule Evaluations:
- Rule: NodeRefreshMesssageUpdated
Status: PASS
Details: OK
- Rule: AMIUpdated
Status: PASS
Details: OK
- Rule: LaunchTemplateUpdates
Status: PASS
Details: OK
- Rule: NoUnexpectedChanges
Status: PASS
Details: OK
Expected Changes Review:
- All expected changes present: YES
- Unexpected changes found: NO
- Details: All changes are related to the node refresh, AMI id update and refresh message update. No unexpected changes found
Overall Result: PASS
Role: You are an expert in infrastructure-as-code and Terraform. Your task is to evaluate a Terraform plan output to ensure it complies with defined expectations.
Input Parameters:
1. Terraform Plan Output:
module.compute_nodegroup_az[0].aws_eks_node_group.this[0] will be updated in-place
resource "aws_eks_node_group" "this" {
id = "mitchellturner-stg-cluster:compute-1a-20241222161614381000000015"
~ labels = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
~ "stackName" = "staging-cluster" -> "stg-cluster"
# (3 unchanged elements hidden)
}
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1a"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
~ "stackName" = "staging-cluster" -> "stg-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (18 unchanged elements hidden)
}
# (14 unchanged attributes hidden)
~ launch_template {
id = "lt-r3d4ct3d7414d9d"
name = "compute-1a-eks-node-group-2024122216160806680000000f"
~ version = "3" -> (known after apply)
}
# (4 unchanged blocks hidden)
}
module.compute_nodegroup_az[0].aws_iam_role.this[0] will be updated in-place
resource "aws_iam_role" "this" {
id = "compute-1a-eks-node-group-20241222161606514700000002"
name = "compute-1a-eks-node-group-20241222161606514700000002"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (11 unchanged attributes hidden)
}
module.compute_nodegroup_az[0].aws_launch_template.this[0] will be updated in-place
resource "aws_launch_template" "this" {
~ default_version = 3 -> (known after apply)
id = "lt-r3d4ct3d7414d9d"
~ image_id = "ami-00a2c6fcb070edafc" -> "ami-013a08cedb97e8b25"
~ latest_version = 3 -> (known after apply)
name = "compute-1a-eks-node-group-2024122216160806680000000f"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (15 unchanged attributes hidden)
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1a"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1a"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1a"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
# (3 unchanged blocks hidden)
}
module.compute_nodegroup_az[1].aws_eks_node_group.this[0] will be updated in-place
resource "aws_eks_node_group" "this" {
id = "mitchellturner-stg-cluster:compute-1b-20241222161614381000000013"
~ labels = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (3 unchanged elements hidden)
}
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1b"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (18 unchanged elements hidden)
}
# (14 unchanged attributes hidden)
~ launch_template {
id = "lt-r3d4ct3d86298b2"
name = "compute-1b-eks-node-group-20241222161608066900000011"
~ version = "3" -> (known after apply)
}
# (4 unchanged blocks hidden)
}
module.compute_nodegroup_az[1].aws_iam_role.this[0] will be updated in-place
resource "aws_iam_role" "this" {
id = "compute-1b-eks-node-group-20241222161606514800000003"
name = "compute-1b-eks-node-group-20241222161606514800000003"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (11 unchanged attributes hidden)
}
module.compute_nodegroup_az[1].aws_launch_template.this[0] will be updated in-place
resource "aws_launch_template" "this" {
~ default_version = 3 -> (known after apply)
id = "lt-r3d4ct3d86298b2"
~ image_id = "ami-00a2c6fcb070edafc" -> "ami-013a08cedb97e8b25"
~ latest_version = 3 -> (known after apply)
name = "compute-1b-eks-node-group-20241222161608066900000011"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (15 unchanged attributes hidden)
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1b"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1b"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1b"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
# (3 unchanged blocks hidden)
}
module.compute_nodegroup_az[2].aws_eks_node_group.this[0] will be updated in-place
resource "aws_eks_node_group" "this" {
id = "mitchellturner-stg-cluster:compute-1c-20241222161614381000000017"
~ labels = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (3 unchanged elements hidden)
}
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1c"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (18 unchanged elements hidden)
}
# (14 unchanged attributes hidden)
~ launch_template {
id = "lt-r3d4ct3d9ac322b"
name = "compute-1c-eks-node-group-2024122216160806680000000d"
~ version = "3" -> (known after apply)
}
# (4 unchanged blocks hidden)
}
module.compute_nodegroup_az[2].aws_iam_role.this[0] will be updated in-place
resource "aws_iam_role" "this" {
id = "compute-1c-eks-node-group-20241222161606514700000001"
name = "compute-1c-eks-node-group-20241222161606514700000001"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (11 unchanged attributes hidden)
}
module.compute_nodegroup_az[2].aws_launch_template.this[0] will be updated in-place
resource "aws_launch_template" "this" {
~ default_version = 3 -> (known after apply)
id = "lt-r3d4ct3d9ac322b"
~ image_id = "ami-00a2c6fcb070edafc" -> "ami-013a08cedb97e8b25"
~ latest_version = 3 -> (known after apply)
name = "compute-1c-eks-node-group-2024122216160806680000000d"
~ tags = {
"mitchellId" = "d34d-b33f"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
~ tags_all = {
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
# (17 unchanged elements hidden)
}
# (15 unchanged attributes hidden)
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1c"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1c"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
~ tag_specifications {
~ tags = {
"mitchellId" = "d34d-b33f"
"Name" = "compute-1c"
"VantaContainsEPHI" = "false"
"VantaContainsUserData" = "false"
"VantaDescription" = "Testing and development"
"VantaNoAlert" = "Testing and development"
"VantaNonProd" = "true"
"VantaOwner" = "[email protected]"
"VantaUserDataStored" = "none"
"k8s.io/cluster-autoscaler/enabled" = "TRUE"
"k8s.io/cluster-autoscaler/mitchellturner-stg-cluster" = "owned"
"k8s.io/cluster-autoscaler/node-template/label/compute" = "true"
"k8s.io/cluster-autoscaler/node-template/label/coresvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/label/vpnsvcs" = "true"
"k8s.io/cluster-autoscaler/node-template/taint/compute" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/coresvcs" = "true:NoSchedule"
"k8s.io/cluster-autoscaler/node-template/taint/vpnsvcs" = "true:NoSchedule"
~ "mitchellturner.tld/node-refresh-message" = "jan-5-2025" -> "jan-12-2025"
"stackName" = "staging-cluster"
}
# (1 unchanged attribute hidden)
}
# (3 unchanged blocks hidden)
}
2. Business Context:
We perform weekly node refreshes
3. Evaluation Rules:
- Name: NodeRefreshMesssageUpdated
Description: "Node refresh message should be updated to todays date"
Severity: ERROR
Examples:
- Provided: jan-12-2025
Result: PASS
- Provided: jan-5-2025
Result: PASS
- Provided: January 12, 2025
Result: FAIL
- Provided: January 5, 2025
Result: FAIL
- Provided: 1736709342
Result: FAIL
- Name: AMIUpdated
Description: "AMI ID should be updated"
Severity: ERROR
- Name: LaunchTemplateUpdates
Description: "Launch templates should be updated with new tag and AMI ID"
Severity: ERROR
- Name: NoUnexpectedChanges
Description: "No unexpected changes should be present in the plan"
Severity: ERROR
Instructions:
1. Compare the Terraform plan output against each rule.
2. Verify that all expected changes are present in the plan.
3. Identify any changes in the plan that weren't listed in expected changes.
4. Apply rules based on their severity:
- ERROR: Must pass for overall success
- WARN: Generate warning but don't cause failure
5. Provide specific reasons for any rule violations.
Output Format(IMPORTANT - OUTPUT MUST BE IN THIS FORMAT, NO EXTRA):
```yaml
Rule Evaluations:
- Rule: <RULE_NAME>
Status: <PASS|FAIL|WARN>
Details: <"OK" if passed, explanation if failed/warning>
Expected Changes Review:
- All expected changes present: <YES|NO>
- Unexpected changes found: <YES|NO>
- Details: <List any missing or unexpected changes>
Overall Result: <PASS|FAIL>
```
```yaml
Rule Evaluations:
- Rule: NodeRefreshMesssageUpdated
Status: PASS
Details: "OK"
- Rule: AMIUpdated
Status: PASS
Details: "OK"
- Rule: LaunchTemplateUpdates
Status: PASS
Details: "OK"
- Rule: NoUnexpectedChanges
Status: FAIL
Details: "Unexpected changes detected in the 'stackName' label and tag values. The 'stackName' is being updated from 'staging-cluster' to 'stg-cluster', which was not listed as an expected change."
Expected Changes Review:
- All expected changes present: YES
- Unexpected changes found: YES
- Details: "The 'stackName' label and tag values are being updated from 'staging-cluster' to 'stg-cluster', which was not listed as an expected change."
Overall Result: FAIL
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment