Skip to content
This repository was archived by the owner on Dec 16, 2020. It is now read-only.

Commit fb4271f

Browse files
authored
Merge pull request #28 from gruntwork-io/yori-conditional-namespace
Implement create_resources flag for k8s-namespace and k8s-namespace-roles
2 parents 31a1e30 + 8492ff2 commit fb4271f

File tree

6 files changed

+36
-19
lines changed

6 files changed

+36
-19
lines changed

modules/k8s-namespace-roles/main.tf

+12-8
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ resource "null_resource" "dependency_getter" {
3737
# ---------------------------------------------------------------------------------------------------------------------
3838

3939
resource "kubernetes_role" "rbac_role_access_all" {
40+
count = "${var.create_resources ? 1 : 0}"
41+
depends_on = ["null_resource.dependency_getter"]
42+
4043
metadata {
4144
name = "${var.namespace}-access-all"
4245
namespace = "${var.namespace}"
@@ -49,11 +52,12 @@ resource "kubernetes_role" "rbac_role_access_all" {
4952
resources = ["*"]
5053
verbs = ["*"]
5154
}
52-
53-
depends_on = ["null_resource.dependency_getter"]
5455
}
5556

5657
resource "kubernetes_role" "rbac_role_access_read_only" {
58+
count = "${var.create_resources ? 1 : 0}"
59+
depends_on = ["null_resource.dependency_getter"]
60+
5761
metadata {
5862
name = "${var.namespace}-access-read-only"
5963
namespace = "${var.namespace}"
@@ -66,15 +70,16 @@ resource "kubernetes_role" "rbac_role_access_read_only" {
6670
resources = ["*"]
6771
verbs = ["get", "list", "watch"]
6872
}
69-
70-
depends_on = ["null_resource.dependency_getter"]
7173
}
7274

7375
# These RBAC role permissions are based on the official example regarding deploying Tiller in a namespace to manage
7476
# resources in another namespace.
7577
# See https://docs.helm.sh/using_helm/#example-deploy-tiller-in-a-namespace-restricted-to-deploying-resources-in-another-namespace
7678

7779
resource "kubernetes_role" "rbac_tiller_metadata_access" {
80+
count = "${var.create_resources ? 1 : 0}"
81+
depends_on = ["null_resource.dependency_getter"]
82+
7883
metadata {
7984
name = "${var.namespace}-tiller-metadata-access"
8085
namespace = "${var.namespace}"
@@ -87,11 +92,12 @@ resource "kubernetes_role" "rbac_tiller_metadata_access" {
8792
resources = ["secrets"]
8893
verbs = ["*"]
8994
}
90-
91-
depends_on = ["null_resource.dependency_getter"]
9295
}
9396

9497
resource "kubernetes_role" "rbac_tiller_resource_access" {
98+
count = "${var.create_resources ? 1 : 0}"
99+
depends_on = ["null_resource.dependency_getter"]
100+
95101
metadata {
96102
name = "${var.namespace}-tiller-resource-access"
97103
namespace = "${var.namespace}"
@@ -121,6 +127,4 @@ resource "kubernetes_role" "rbac_tiller_resource_access" {
121127
resources = ["poddisruptionbudgets"]
122128
verbs = ["*"]
123129
}
124-
125-
depends_on = ["null_resource.dependency_getter"]
126130
}
+4-4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
output "rbac_access_all_role" {
22
description = "The name of the RBAC role that grants admin level permissions on the namespace."
3-
value = "${kubernetes_role.rbac_role_access_all.metadata.0.name}"
3+
value = "${element(concat(kubernetes_role.rbac_role_access_all.*.metadata.0.name, list("")), 0)}"
44
}
55

66
output "rbac_access_read_only_role" {
77
description = "The name of the RBAC role that grants read only permissions on the namespace."
8-
value = "${kubernetes_role.rbac_role_access_read_only.metadata.0.name}"
8+
value = "${element(concat(kubernetes_role.rbac_role_access_read_only.*.metadata.0.name, list("")), 0)}"
99
}
1010

1111
output "rbac_tiller_metadata_access_role" {
1212
description = "The name of the RBAC role that grants minimal permissions for Tiller to manage its metadata. Use this role if Tiller will be deployed into this namespace."
13-
value = "${kubernetes_role.rbac_tiller_metadata_access.metadata.0.name}"
13+
value = "${element(concat(kubernetes_role.rbac_tiller_metadata_access.*.metadata.0.name, list("")), 0)}"
1414
}
1515

1616
output "rbac_tiller_resource_access_role" {
1717
description = "The name of the RBAC role that grants minimal permissions for Tiller to manage resources in this namespace."
18-
value = "${kubernetes_role.rbac_tiller_resource_access.metadata.0.name}"
18+
value = "${element(concat(kubernetes_role.rbac_tiller_resource_access.*.metadata.0.name, list("")), 0)}"
1919
}

modules/k8s-namespace-roles/variables.tf

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ variable "annotations" {
2424
default = {}
2525
}
2626

27+
variable "create_resources" {
28+
description = "Set to false to have this module create no resources. This weird parameter exists solely because Terraform does not support conditional modules. Therefore, this is a hack to allow you to conditionally decide if the Namespace roles should be created or not."
29+
default = true
30+
}
31+
2732
# ---------------------------------------------------------------------------------------------------------------------
2833
# MODULE DEPENDENCIES
2934
# Workaround Terraform limitation where there is no module depends_on.

modules/k8s-namespace/main.tf

+9-6
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,14 @@ resource "null_resource" "dependency_getter" {
3131
# ---------------------------------------------------------------------------------------------------------------------
3232

3333
resource "kubernetes_namespace" "namespace" {
34+
count = "${var.create_resources ? 1 : 0}"
35+
depends_on = ["null_resource.dependency_getter"]
36+
3437
metadata {
3538
name = "${var.name}"
3639
labels = "${var.labels}"
3740
annotations = "${var.annotations}"
3841
}
39-
40-
depends_on = ["null_resource.dependency_getter"]
4142
}
4243

4344
# ---------------------------------------------------------------------------------------------------------------------
@@ -48,8 +49,10 @@ resource "kubernetes_namespace" "namespace" {
4849
module "namespace_roles" {
4950
source = "../k8s-namespace-roles"
5051

51-
namespace = "${kubernetes_namespace.namespace.id}"
52-
labels = "${var.labels}"
53-
annotations = "${var.annotations}"
54-
dependencies = ["${var.dependencies}"]
52+
namespace = "${kubernetes_namespace.namespace.id}"
53+
labels = "${var.labels}"
54+
annotations = "${var.annotations}"
55+
56+
create_resources = "${var.create_resources}"
57+
dependencies = ["${var.dependencies}"]
5558
}

modules/k8s-namespace/outputs.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
output "name" {
22
description = "The name of the created namespace."
3-
value = "${kubernetes_namespace.namespace.id}"
3+
value = "${element(concat(kubernetes_namespace.namespace.*.id, list("")), 0)}"
44
}
55

66
output "rbac_access_all_role" {

modules/k8s-namespace/variables.tf

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ variable "annotations" {
2424
default = {}
2525
}
2626

27+
variable "create_resources" {
28+
description = "Set to false to have this module create no resources. This weird parameter exists solely because Terraform does not support conditional modules. Therefore, this is a hack to allow you to conditionally decide if the Namespace should be created or not."
29+
default = true
30+
}
31+
2732
# ---------------------------------------------------------------------------------------------------------------------
2833
# MODULE DEPENDENCIES
2934
# Workaround Terraform limitation where there is no module depends_on.

0 commit comments

Comments
 (0)