Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
feat: Allow using inline policy for controller role (#3512)
Signed-off-by: Alexis Sellier <3765063+alexissellier@users.noreply.github.com>
  • Loading branch information
alexissellier committed Oct 27, 2025
commit a3d14d8d3ee6794646afce865cb300384abf1f30
2 changes: 2 additions & 0 deletions modules/karpenter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ No modules.
| [aws_iam_policy.controller](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_policy) | resource |
| [aws_iam_role.controller](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role.node](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
| [aws_iam_role_policy.controller](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |
| [aws_iam_role_policy_attachment.controller](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.controller_additional](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
| [aws_iam_role_policy_attachment.node](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
Expand Down Expand Up @@ -139,6 +140,7 @@ No modules.
| <a name="input_create_instance_profile"></a> [create\_instance\_profile](#input\_create\_instance\_profile) | Whether to create an IAM instance profile | `bool` | `false` | no |
| <a name="input_create_node_iam_role"></a> [create\_node\_iam\_role](#input\_create\_node\_iam\_role) | Determines whether an IAM role is created or to use an existing IAM role | `bool` | `true` | no |
| <a name="input_create_pod_identity_association"></a> [create\_pod\_identity\_association](#input\_create\_pod\_identity\_association) | Determines whether to create pod identity association | `bool` | `true` | no |
| <a name="input_enable_controller_inline_policy"></a> [enable\_controller\_inline\_policy](#input\_enable\_controller\_inline\_policy") | Determines whether controller role policy is inlined| `bool` | `false` | no |
| <a name="input_enable_spot_termination"></a> [enable\_spot\_termination](#input\_enable\_spot\_termination) | Determines whether to enable native spot termination handling | `bool` | `true` | no |
| <a name="input_iam_policy_description"></a> [iam\_policy\_description](#input\_iam\_policy\_description) | IAM policy description | `string` | `"Karpenter controller IAM policy"` | no |
| <a name="input_iam_policy_name"></a> [iam\_policy\_name](#input\_iam\_policy\_name) | Name of the IAM policy | `string` | `"KarpenterController"` | no |
Expand Down
14 changes: 12 additions & 2 deletions modules/karpenter/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,18 @@ resource "aws_iam_role" "controller" {
tags = merge(var.tags, var.iam_role_tags)
}

resource "aws_iam_role_policy" "controller" {
count = local.create_iam_role && var.enable_controller_inline_policy ? 1 : 0

name = var.iam_policy_use_name_prefix ? null : var.iam_policy_name
name_prefix = var.iam_policy_use_name_prefix ? "${var.iam_policy_name}-" : null
role = aws_iam_role.controller[0].name
policy = data.aws_iam_policy_document.controller[0].json

}

resource "aws_iam_policy" "controller" {
count = local.create_iam_role ? 1 : 0
count = local.create_iam_role && !var.enable_controller_inline_policy ? 1 : 0

name = var.iam_policy_use_name_prefix ? null : var.iam_policy_name
name_prefix = var.iam_policy_use_name_prefix ? "${var.iam_policy_name}-" : null
Expand All @@ -83,7 +93,7 @@ resource "aws_iam_policy" "controller" {
}

resource "aws_iam_role_policy_attachment" "controller" {
count = local.create_iam_role ? 1 : 0
count = local.create_iam_role && !var.enable_controller_inline_policy ? 1 : 0

role = aws_iam_role.controller[0].name
policy_arn = aws_iam_policy.controller[0].arn
Expand Down
7 changes: 7 additions & 0 deletions modules/karpenter/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ variable "create_iam_role" {
default = true
}

variable "enable_controller_inline_policy" {
description = "Determines whether controller role policy is inlined"
type = bool
default = false
}


variable "iam_role_name" {
description = "Name of the IAM role"
type = string
Expand Down