Skip to content

Commit 27678c4

Browse files
tomas-balazdojci
andauthored
Unify module design (#7)
Unify module design Co-authored-by: Martin Dojcak <[email protected]>
1 parent 8303efa commit 27678c4

File tree

15 files changed

+926
-402
lines changed

15 files changed

+926
-402
lines changed

.github/workflows/main.yml

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ name: Terraform validation
22

33
on:
44
push:
5-
branches: [ master ]
5+
branches: [ main ]
66
pull_request:
7-
branches: [ master ]
7+
branches: [ main ]
88

99
env:
10-
TERRAFORM_DOCS_VERSION: "v0.15.0"
11-
TFLINT_VERSION: "v0.25.0"
12-
TFSEC_VERSION: "v0.39.6"
10+
TERRAFORM_DOCS_VERSION: "v0.16.0"
11+
TFLINT_VERSION: "v0.35.0"
12+
TFSEC_VERSION: "v1.6.2"
1313

1414
jobs:
1515
terraform-validation:
@@ -71,6 +71,11 @@ jobs:
7171
run: |
7272
pip install detect-secrets
7373
74+
- shell: bash
75+
name: "INSTALL: checkov"
76+
run: |
77+
pip install checkov
78+
7479
- shell: bash
7580
name: "INSTALL: tflint"
7681
if: steps.cache-tflint.outputs.cache-hit != 'true'
@@ -84,6 +89,10 @@ jobs:
8489
name: "SETUP: tflint path"
8590
run: echo '~/tflint/bin/' >> $GITHUB_PATH
8691

92+
- shell: bash
93+
name: "INIT: TFLint"
94+
run: tflint --init
95+
8796
- uses: actions/cache@v2
8897
id: cache-tfsec
8998
name: "CACHE: tfsec"

.pre-commit-config.yaml

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/pre-commit/pre-commit-hooks
3-
rev: v4.0.1
3+
rev: v4.1.0
44
hooks:
55
- id: trailing-whitespace
66
- id: check-merge-conflict
@@ -9,29 +9,25 @@ repos:
99
- id: detect-private-key
1010
- id: end-of-file-fixer
1111

12-
- repo: https://github.com/gruntwork-io/pre-commit
13-
rev: v0.1.12
14-
hooks:
15-
- id: tflint
16-
- id: terraform-validate
17-
18-
- repo: git://github.com/antonbabenko/pre-commit-terraform
19-
rev: v1.50.0
12+
- repo: https://github.com/antonbabenko/pre-commit-terraform
13+
rev: v1.64.1
2014
hooks:
2115
- id: terraform_fmt
2216
- id: terraform_tflint
23-
#- id: terraform_tfsec
17+
- id: terraform_validate
18+
- id: checkov
2419
- id: terraform_docs
2520
args:
2621
- '--args=--hide providers --sort-by required'
2722

28-
- repo: git://github.com/pecigonzalo/pre-commit-terraform-vars
23+
- repo: https://github.com/pecigonzalo/pre-commit-terraform-vars
2924
rev: v1.0.0
3025
hooks:
3126
- id: terraform-vars
3227

3328
- repo: https://github.com/Yelp/detect-secrets
34-
rev: v1.1.0
29+
rev: v1.2.0
3530
hooks:
3631
- id: detect-secrets
3732
args: ['--baseline', '.secrets.baseline']
33+
exclude: terraform.tfstate

.tflint.hcl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
plugin "aws" {
2+
enabled = true
3+
version = "0.13.2"
4+
source = "github.com/terraform-linters/tflint-ruleset-aws"
5+
}

README.md

Lines changed: 82 additions & 35 deletions
Large diffs are not rendered by default.

argo.tf

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
locals {
2+
argo_application_metadata = {
3+
"labels" : try(var.argo_metadata.labels, {}),
4+
"annotations" : try(var.argo_metadata.annotations, {}),
5+
"finalizers" : try(var.argo_metadata.finalizers, [])
6+
}
27
argo_application_values = {
38
"project" : var.argo_project
49
"source" : {
@@ -8,48 +13,73 @@ locals {
813
"helm" : {
914
"releaseName" : var.helm_release_name
1015
"parameters" : [for k, v in var.settings : tomap({ "forceString" : true, "name" : k, "value" : v })]
11-
"values" : data.utils_deep_merge_yaml.values[0].output
16+
"values" : var.enabled ? data.utils_deep_merge_yaml.values[0].output : ""
1217
}
1318
}
1419
"destination" : {
1520
"server" : var.argo_destionation_server
16-
"namespace" : var.k8s_namespace
21+
"namespace" : var.namespace
1722
}
1823
"syncPolicy" : var.argo_sync_policy
1924
"info" : var.argo_info
2025
}
2126
}
2227

23-
data "utils_deep_merge_yaml" "argo_application_values" {
24-
count = var.enabled && var.argo_application_enabled && var.argo_application_use_helm ? 1 : 0
28+
data "utils_deep_merge_yaml" "argo_helm_values" {
29+
count = var.enabled && var.argo_enabled && var.argo_helm_enabled ? 1 : 0
2530
input = compact([
26-
yamlencode(local.argo_application_values),
27-
var.argo_application_values
31+
yamlencode({
32+
"apiVersion" : var.argo_apiversion
33+
}),
34+
yamlencode({
35+
"spec" : local.argo_application_values
36+
}),
37+
yamlencode({
38+
"spec" : var.argo_spec
39+
}),
40+
yamlencode(
41+
local.argo_application_metadata
42+
)
2843
])
2944
}
3045

31-
resource "helm_release" "argocd_application" {
32-
count = var.enabled && var.argo_application_enabled && var.argo_application_use_helm ? 1 : 0
46+
resource "helm_release" "argo_application" {
47+
count = var.enabled && var.argo_enabled && var.argo_helm_enabled ? 1 : 0
3348

3449
chart = "${path.module}/helm/argocd-application"
3550
name = var.helm_release_name
3651
namespace = var.argo_namespace
3752

3853
values = [
39-
data.utils_deep_merge_yaml.argo_application_values[0].output
54+
data.utils_deep_merge_yaml.argo_helm_values[0].output,
55+
var.argo_helm_values
4056
]
4157
}
4258

43-
44-
resource "kubernetes_manifest" "self" {
45-
count = var.enabled && var.argo_application_enabled && !var.argo_application_use_helm ? 1 : 0
59+
resource "kubernetes_manifest" "this" {
60+
count = var.enabled && var.argo_enabled && !var.argo_helm_enabled ? 1 : 0
4661
manifest = {
47-
"apiVersion" = "argoproj.io/v1alpha1"
62+
"apiVersion" = var.argo_apiversion
4863
"kind" = "Application"
49-
"metadata" = {
50-
"name" = var.helm_release_name
51-
"namespace" = var.argo_namespace
52-
}
53-
"spec" = local.argo_application_values
64+
"metadata" = merge(
65+
local.argo_application_metadata,
66+
{ "name" = var.helm_release_name },
67+
{ "namespace" = var.argo_namespace },
68+
)
69+
"spec" = merge(
70+
local.argo_application_values,
71+
var.argo_spec
72+
)
73+
}
74+
75+
computed_fields = var.argo_kubernetes_manifest_computed_fields
76+
77+
field_manager {
78+
name = var.argo_kubernetes_manifest_field_manager_name
79+
force_conflicts = var.argo_kubernetes_manifest_field_manager_force_conflicts
80+
}
81+
82+
wait_for = {
83+
fields = var.argo_kubernetes_manifest_wait_for_fields
5484
}
5585
}

examples/basic/README.md

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,22 @@
22

33
The code in this example shows how to use the module with basic configuration and minimal set of other resources.
44

5+
## Deployment methods
6+
7+
### Helm
8+
Deploy helm chart by helm (default method, set `enabled = true`)
9+
10+
### Argo kubernetes
11+
Deploy helm chart as argo application by kubernetes manifest (set `enabled = true` and `argo_enabled = true`)
12+
13+
### Argo helm
14+
Create helm release resource and deploy it as argo application (set `enabled = true`, `argo_enabled = true` and `argo_helm_enabled = true`)
15+
16+
## AWS IAM resources
17+
18+
To disable of creation IRSA role and IRSA policy, set `irsa_role_create = false` and `irsa_policy_enabled = false`, respectively
19+
20+
521
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
622
## Requirements
723

@@ -11,10 +27,15 @@ No requirements.
1127

1228
| Name | Source | Version |
1329
|------|--------|---------|
14-
| <a name="module_eks_cluster"></a> [eks\_cluster](#module\_eks\_cluster) | cloudposse/eks-cluster/aws | 0.43.2 |
15-
| <a name="module_eks_node_group"></a> [eks\_node\_group](#module\_eks\_node\_group) | cloudposse/eks-node-group/aws | 0.25.0 |
16-
| <a name="module_lb_controller"></a> [lb\_controller](#module\_lb\_controller) | ../../ | n/a |
17-
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | 3.6.0 |
30+
| <a name="module_eks_cluster"></a> [eks\_cluster](#module\_eks\_cluster) | cloudposse/eks-cluster/aws | 0.45.0 |
31+
| <a name="module_eks_node_group"></a> [eks\_node\_group](#module\_eks\_node\_group) | cloudposse/eks-node-group/aws | 0.28.0 |
32+
| <a name="module_lb_controller_argo_helm"></a> [lb\_controller\_argo\_helm](#module\_lb\_controller\_argo\_helm) | ../../ | n/a |
33+
| <a name="module_lb_controller_argo_kubernetes"></a> [lb\_controller\_argo\_kubernetes](#module\_lb\_controller\_argo\_kubernetes) | ../../ | n/a |
34+
| <a name="module_lb_controller_helm"></a> [lb\_controller\_helm](#module\_lb\_controller\_helm) | ../../ | n/a |
35+
| <a name="module_lbc_disabled"></a> [lbc\_disabled](#module\_lbc\_disabled) | ../../ | n/a |
36+
| <a name="module_lbc_without_irsa_policy"></a> [lbc\_without\_irsa\_policy](#module\_lbc\_without\_irsa\_policy) | ../../ | n/a |
37+
| <a name="module_lbc_without_irsa_role"></a> [lbc\_without\_irsa\_role](#module\_lbc\_without\_irsa\_role) | ../../ | n/a |
38+
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | 3.13.0 |
1839

1940
## Resources
2041

examples/basic/main.tf

Lines changed: 92 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module "vpc" {
22
source = "terraform-aws-modules/vpc/aws"
3-
version = "3.6.0"
3+
version = "3.13.0"
44

55
name = "lb_controller-vpc"
66
cidr = "10.0.0.0/16"
@@ -11,7 +11,7 @@ module "vpc" {
1111

1212
module "eks_cluster" {
1313
source = "cloudposse/eks-cluster/aws"
14-
version = "0.43.2"
14+
version = "0.45.0"
1515

1616
region = "eu-central-1"
1717
subnet_ids = module.vpc.public_subnets
@@ -21,7 +21,7 @@ module "eks_cluster" {
2121

2222
module "eks_node_group" {
2323
source = "cloudposse/eks-node-group/aws"
24-
version = "0.25.0"
24+
version = "0.28.0"
2525

2626
cluster_name = "lb_controller"
2727
instance_types = ["t3.medium"]
@@ -32,10 +32,98 @@ module "eks_node_group" {
3232
depends_on = [module.eks_cluster.kubernetes_config_map_id]
3333
}
3434

35-
module "lb_controller" {
35+
module "lbc_disabled" {
3636
source = "../../"
3737

38+
enabled = false
39+
3840
cluster_name = module.eks_cluster.eks_cluster_id
3941
cluster_identity_oidc_issuer = module.eks_cluster.eks_cluster_identity_oidc_issuer
4042
cluster_identity_oidc_issuer_arn = module.eks_cluster.eks_cluster_identity_oidc_issuer_arn
43+
44+
}
45+
46+
module "lbc_without_irsa_role" {
47+
source = "../../"
48+
49+
irsa_role_create = false
50+
cluster_name = module.eks_cluster.eks_cluster_id
51+
cluster_identity_oidc_issuer = module.eks_cluster.eks_cluster_identity_oidc_issuer
52+
cluster_identity_oidc_issuer_arn = module.eks_cluster.eks_cluster_identity_oidc_issuer_arn
53+
54+
}
55+
56+
module "lbc_without_irsa_policy" {
57+
source = "../../"
58+
59+
irsa_policy_enabled = false
60+
cluster_name = module.eks_cluster.eks_cluster_id
61+
cluster_identity_oidc_issuer = module.eks_cluster.eks_cluster_identity_oidc_issuer
62+
cluster_identity_oidc_issuer_arn = module.eks_cluster.eks_cluster_identity_oidc_issuer_arn
63+
}
64+
65+
66+
module "lb_controller_helm" {
67+
source = "../../"
68+
69+
enabled = true
70+
argo_enabled = false
71+
argo_helm_enabled = false
72+
73+
cluster_name = module.eks_cluster.eks_cluster_id
74+
cluster_identity_oidc_issuer = module.eks_cluster.eks_cluster_identity_oidc_issuer
75+
cluster_identity_oidc_issuer_arn = module.eks_cluster.eks_cluster_identity_oidc_issuer_arn
76+
77+
helm_release_name = "aws-lbc-helm"
78+
namespace = "aws-lb-controller-helm"
79+
80+
values = yamlencode({
81+
"podLabels" : {
82+
"app" : "aws-lbc-helm"
83+
}
84+
})
85+
86+
helm_timeout = 240
87+
helm_wait = true
88+
}
89+
90+
module "lb_controller_argo_kubernetes" {
91+
source = "../../"
92+
93+
enabled = true
94+
argo_enabled = true
95+
argo_helm_enabled = false
96+
97+
cluster_name = module.eks_cluster.eks_cluster_id
98+
cluster_identity_oidc_issuer = module.eks_cluster.eks_cluster_identity_oidc_issuer
99+
cluster_identity_oidc_issuer_arn = module.eks_cluster.eks_cluster_identity_oidc_issuer_arn
100+
101+
helm_release_name = "aws-lbc-argo-kubernetes"
102+
namespace = "aws-lb-controller-argo-kubernetes"
103+
104+
argo_sync_policy = {
105+
"automated" : {}
106+
"syncOptions" = ["CreateNamespace=true"]
107+
}
108+
}
109+
110+
module "lb_controller_argo_helm" {
111+
source = "../../"
112+
113+
enabled = true
114+
argo_enabled = true
115+
argo_helm_enabled = true
116+
117+
cluster_name = module.eks_cluster.eks_cluster_id
118+
cluster_identity_oidc_issuer = module.eks_cluster.eks_cluster_identity_oidc_issuer
119+
cluster_identity_oidc_issuer_arn = module.eks_cluster.eks_cluster_identity_oidc_issuer_arn
120+
121+
helm_release_name = "aws-lbc-argo-helm"
122+
namespace = "aws-lb-controller-argo-helm"
123+
124+
argo_namespace = "argo"
125+
argo_sync_policy = {
126+
"automated" : {}
127+
"syncOptions" = ["CreateNamespace=true"]
128+
}
41129
}

0 commit comments

Comments
 (0)