Skip to content

Commit 3f666c1

Browse files
authored
Merge pull request #888 from nebius/feature/opa_gatekeeper
feat: enables installing OPA opa_gatekeeper
2 parents 1b030d3 + 8113180 commit 3f666c1

File tree

7 files changed

+67
-1
lines changed

7 files changed

+67
-1
lines changed

k8s-training/applications.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,9 @@ module "kuberay-service" {
4444
min_gpu_replicas = var.kuberay_min_gpu_replicas
4545
max_gpu_replicas = var.kuberay_max_gpu_replicas
4646
serve_config_v2 = var.kuberay_serve_config_v2
47-
}
47+
}
48+
49+
module "opa_gatekeeper" {
50+
source = "../modules/opa_gatekeeper"
51+
count = var.enable_opa_gatekeeper ? 1 : 0
52+
}

k8s-training/terraform.tfvars

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,5 @@ kuberay_max_gpu_replicas = 8
9999
# Enable to deploy KubeRay Operator with RayService CR
100100
enable_kuberay_service = false
101101

102+
# enable OPA gatekeeper (default: false)
103+
# enable_opa_gatekeeper = true

k8s-training/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,3 +423,9 @@ variable "filesystem_csi" {
423423
})
424424
default = {}
425425
}
426+
427+
variable "enable_opa_gatekeeper" {
428+
description = "Enable OPA Gatekeeper"
429+
type = bool
430+
default = false
431+
}

modules/opa_gatekeeper/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Module for OPA Gatekeeper
2+
3+
This is module for `k8s-training` that installs OPA Gatekeeper and
4+
optionally install a config/manifest of configs for it.

modules/opa_gatekeeper/main.tf

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
data "http" "gatekeeper_url" {
2+
url = "https://raw.githubusercontent.com/open-policy-agent/gatekeeper/${var.gk_version}/deploy/gatekeeper.yaml"
3+
}
4+
5+
data "kubectl_file_documents" "gatekeeper_install_documents" {
6+
content = data.http.gatekeeper_url.response_body
7+
}
8+
9+
# Use kubectl_file_documents to split multi-document into the kubectl_manifest resource
10+
resource "kubectl_manifest" "gatekeeper_manifests" {
11+
for_each = data.kubectl_file_documents.gatekeeper_install_documents.manifests
12+
yaml_body = each.value
13+
}
14+
15+
data "kubectl_file_documents" "gatekeeper_config_manifests" {
16+
content = var.configs
17+
}
18+
19+
resource "kubectl_manifest" "gatekeeper_configs" {
20+
for_each = data.kubectl_file_documents.gatekeeper_config_manifests.manifests
21+
yaml_body = each.value
22+
depends_on = [
23+
kubectl_manifest.gatekeeper_manifests
24+
]
25+
}

modules/opa_gatekeeper/provider.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
terraform {
2+
required_providers {
3+
http = {
4+
source = "hashicorp/http"
5+
version = "3.5.0"
6+
}
7+
kubectl = {
8+
source = "gavinbunney/kubectl"
9+
version = ">=1.19.0"
10+
}
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
variable "configs" {
2+
description = "A YAML file representing a config manifest for Gatekeeper"
3+
type = string
4+
default = ""
5+
}
6+
7+
variable "gk_version" {
8+
description = "A gatekeeper version string"
9+
type = string
10+
default = "v3.21.0"
11+
}
12+

0 commit comments

Comments
 (0)