Skip to content

Commit

Permalink
feat: add variable to set resources with default values (#31)
Browse files Browse the repository at this point in the history
* feat: add variable to set resources with default values

Having default values is good practice to prevent that our components could eventually starve other workloads on the cluster. However, these should probably be adapted in production clusters and are only a safeguard in case someone forgets to set them.

* docs(terraform-docs): generate docs and write to README.adoc

---------

Co-authored-by: lentidas <lentidas@users.noreply.github.com>
  • Loading branch information
lentidas and lentidas authored Apr 17, 2024
1 parent f56b82c commit 74c4327
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 2 deletions.
81 changes: 79 additions & 2 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ Description: Override of target revision of the application chart.

Type: `string`

Default: `"v2.4.0"`
Default: `"v3.1.0"`

==== [[input_helm_values]] <<input_helm_values,helm_values>>

Expand Down Expand Up @@ -248,6 +248,44 @@ Type: `map(string)`

Default: `{}`

==== [[input_resources]] <<input_resources,resources>>

Description: Resource limits and requests for aws-efs-csi-driver's components. Follow the style on https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[official documentation] to understand the format of the values."

NOTE: These are the same values as the defaults on the Helm chart aws-efs-csi-driver.

Type:
[source,hcl]
----
object({
controller = optional(object({
requests = optional(object({
cpu = optional(string, "10m")
memory = optional(string, "40Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "256Mi")
}), {})
}), {})
node = optional(object({
requests = optional(object({
cpu = optional(string, "10m")
memory = optional(string, "40Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "256Mi")
}), {})
}), {})
})
----

Default: `{}`

==== [[input_iam_role_arn]] <<input_iam_role_arn,iam_role_arn>>

Description: ARN of an OIDC assumable IAM role that has access to the EFS filesystem. When specified, this is added as an annotation to the EFS CSI driver controller ServiceAccount, to allow the driver to manage EFS access points for dynamic volumes provisioning.
Expand Down Expand Up @@ -353,7 +391,7 @@ Description: ID to pass other modules in order to refer to this module as a depe
|[[input_target_revision]] <<input_target_revision,target_revision>>
|Override of target revision of the application chart.
|`string`
|`"v2.4.0"`
|`"v3.1.0"`
|no
|[[input_helm_values]] <<input_helm_values,helm_values>>
Expand Down Expand Up @@ -394,6 +432,45 @@ object({
|`{}`
|no
|[[input_resources]] <<input_resources,resources>>
|Resource limits and requests for aws-efs-csi-driver's components. Follow the style on https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[official documentation] to understand the format of the values."
NOTE: These are the same values as the defaults on the Helm chart aws-efs-csi-driver.
|
[source]
----
object({
controller = optional(object({
requests = optional(object({
cpu = optional(string, "10m")
memory = optional(string, "40Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "256Mi")
}), {})
}), {})
node = optional(object({
requests = optional(object({
cpu = optional(string, "10m")
memory = optional(string, "40Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "256Mi")
}), {})
}), {})
})
----
|`{}`
|no
|[[input_efs_file_system_id]] <<input_efs_file_system_id,efs_file_system_id>>
|EFS Filesystem ID to use by the CSI driver to create volumes.
|`string`
Expand Down
10 changes: 10 additions & 0 deletions locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,16 @@ locals {
"eks.amazonaws.com/role-arn" = var.iam_role_arn != null ? var.iam_role_arn : module.iam_assumable_role_efs.iam_role_arn
}
}
resources = {
requests = { for k, v in var.resources.controller.requests : k => v if v != null }
limits = { for k, v in var.resources.controller.limits : k => v if v != null }
}
}
node = {
resources = {
requests = { for k, v in var.resources.node.requests : k => v if v != null }
limits = { for k, v in var.resources.node.limits : k => v if v != null }
}
}
}
}]
Expand Down
34 changes: 34 additions & 0 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,40 @@ variable "dependency_ids" {
## Module variables
#######################

variable "resources" {
description = <<-EOT
Resource limits and requests for aws-efs-csi-driver's components. Follow the style on https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/[official documentation] to understand the format of the values."
NOTE: These are the same values as the defaults on the Helm chart aws-efs-csi-driver.
EOT
type = object({

controller = optional(object({
requests = optional(object({
cpu = optional(string, "10m")
memory = optional(string, "40Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "256Mi")
}), {})
}), {})

node = optional(object({
requests = optional(object({
cpu = optional(string, "10m")
memory = optional(string, "40Mi")
}), {})
limits = optional(object({
cpu = optional(string)
memory = optional(string, "256Mi")
}), {})
}), {})

})
default = {}
}

variable "efs_file_system_id" {
description = "EFS Filesystem ID to use by the CSI driver to create volumes."
type = string
Expand Down

0 comments on commit 74c4327

Please sign in to comment.