Skip to content

Commit

Permalink
feat(terraform): kubernetes image resources support (#16029)
Browse files Browse the repository at this point in the history
* add tests

* add support for kubernetes image resources

* Update lib/modules/manager/terraform/extract.ts

Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>

* added unknown resource

* added Kubernetes to Readme

* missed one spot in the Readme

* Update lib/modules/manager/terraform/readme.md

Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>

* switch to toMatchObject() in tests

Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
Co-authored-by: Rhys Arkins <rhys@arkins.net>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
  • Loading branch information
4 people committed Jun 14, 2022
1 parent 6a78436 commit a420576
Show file tree
Hide file tree
Showing 8 changed files with 427 additions and 69 deletions.
6 changes: 3 additions & 3 deletions lib/modules/manager/terraform/__fixtures__/docker.tf
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# docker_image resources
# https://www.terraform.io/docs/providers/docker/r/image.html
# https://registry.terraform.io/providers/kreuzwerker/docker/latest/docs/resources/image
resource "docker_image" "nginx" {
name = "nginx:1.7.8"
}
Expand All @@ -14,7 +14,7 @@ resource "docker_image" "ignore_variable" {


# docker_container resources
# https://www.terraform.io/docs/providers/docker/r/container.html
# https://registry.terraform.io/providers/kreuzwerker/docker/latest/docs/resources/container
resource "docker_container" "foo" {
name = "foo"
image = "nginx:1.7.8"
Expand All @@ -26,7 +26,7 @@ resource "docker_container" "invalid" {


# docker_service resources
# https://www.terraform.io/docs/providers/docker/r/service.html
# https://registry.terraform.io/providers/kreuzwerker/docker/latest/docs/resources/service
resource "docker_service" "foo" {
name = "foo-service"

Expand Down
255 changes: 255 additions & 0 deletions lib/modules/manager/terraform/__fixtures__/kubernetes.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,255 @@
resource "kubernetes_cron_job_v1" "demo" {
metadata {}
spec {
job_template {
metadata {}
spec {
template {
metadata {}
spec {
container {
name = "kaniko"
image = "gcr.io/kaniko-project/executor:v1.7.0@sha256:8504bde9a9a8c9c4e9a4fe659703d265697a36ff13607b7669a4caa4407baa52"
}
}
}
}
}
schedule = ""
}
}

resource "kubernetes_cron_job" "demo" {
metadata {}
spec {
job_template {
metadata {}
spec {
template {
metadata {}
spec {
container {
name = "kaniko"
image = "gcr.io/kaniko-project/executor:v1.8.0@sha256:8504bde9a9a8c9c4e9a4fe659703d265697a36ff13607b7669a4caa4407baa52"
}
}
}
}
}
schedule = ""
}
}

resource "kubernetes_daemon_set_v1" "example" {
metadata {}
spec {
template {
metadata {}
spec {
container {
image = "nginx:1.21.1"
name = "example1"
}
}
}
}
}

resource "kubernetes_daemonset" "example" {
metadata {}
spec {
template {
metadata {}
spec {
container {
image = "nginx:1.21.2"
name = "example2"
}
}
}
}
}

resource "kubernetes_deployment" "example" {
metadata {}
spec {
template {
metadata {}
spec {
container {
image = "nginx:1.21.3"
name = "example3"
}
}
}
}
}

resource "kubernetes_deployment_v1" "example" {
metadata {}
spec {
template {
metadata {}
spec {
container {
image = "nginx:1.21.4"
name = "example4"
}
}
}
}
}

resource "kubernetes_job" "demo" {
metadata {}
spec {
template {
metadata {}
spec {
container {
name = "example5"
image = "nginx:1.21.5"
}
}
}
}
}

resource "kubernetes_job" "demo_invalid" {
metadata {}
spec {
template {
metadata {}
spec {
container {
name = "example5-invalid"
}
}
}
}
}

resource "kubernetes_job_invalid" "demo_invalid2" {
metadata {}
spec {
template {
metadata {}
spec {
container {
name = "example5"
image = "nginx:1.21.6"
}
}
}
}
}

resource "kubernetes_job_v1" "demo" {
metadata {}
spec {
template {
metadata {}
spec {
container {
name = "example6"
image = "nginx:1.21.6"
}
}
}
}
}

resource "kubernetes_pod" "test" {
metadata {}
spec {
container {
image = "nginx:1.21.7"
name = "example7"
}
}
}

resource "kubernetes_pod_v1" "test" {
metadata {}
spec {
container {
image = "nginx:1.21.8"
name = "example8"
}
}
}

resource "kubernetes_replication_controller" "example" {
metadata {}
spec {
selector = {}
template {
metadata {}
spec {
container {
image = "nginx:1.21.9"
name = "example9"
}
}
}
}
}

resource "kubernetes_replication_controller_v1" "example" {
metadata {}
spec {
selector = {}
template {
metadata {}
spec {
container {
image = "nginx:1.21.10"
name = "example10"
}
}
}
}
}

resource "kubernetes_stateful_set" "prometheus" {
metadata {}
spec {
template {
metadata {}
spec {
init_container {
name = "example11"
image = "nginx:1.21.11"
}
container {
name = "prometheus-server1"
image = "prom/prometheus:v2.2.1"
}
}
}
service_name = ""
selector {}
}
}

resource "kubernetes_stateful_set_v1" "prometheus" {
metadata {}
spec {
template {
metadata {}
spec {
init_container {
name = "example12"
image = "nginx:1.21.12"
}

container {
name = "prometheus-server2"
image = "prom/prometheus:v2.2.2"
}
}
}
service_name = ""
selector {}
}
}
54 changes: 30 additions & 24 deletions lib/modules/manager/terraform/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,33 @@ export enum TerraformDependencyTypes {
terraform_version = 'terraform_version',
}

// eslint-disable-next-line typescript-enum/no-enum
export enum TerraformResourceTypes {
unknown = 'unknown',
/**
* https://www.terraform.io/docs/providers/docker/r/container.html
*/
docker_container = 'docker_container',
/**
* https://www.terraform.io/docs/providers/docker/r/image.html
*/
docker_image = 'docker_image',
/**
* https://www.terraform.io/docs/providers/docker/r/service.html
*/
docker_service = 'docker_service',
/**
* https://www.terraform.io/docs/providers/helm/r/release.html
*/
helm_release = 'helm_release',
/**
* https://registry.terraform.io/providers/hashicorp/tfe/latest/docs/resources/workspace
*/
tfe_workspace = 'tfe_workspace',
}
export const TerraformResourceTypes: Record<string, string[]> = {
unknown: ['unknown'],
generic_image_resource: [
// Docker provider: https://registry.terraform.io/providers/kreuzwerker/docker
'docker_container',
'docker_service',
// Kubernetes provider: https://registry.terraform.io/providers/hashicorp/kubernetes
'kubernetes_cron_job',
'kubernetes_cron_job_v1',
'kubernetes_daemon_set',
'kubernetes_daemon_set_v1',
'kubernetes_daemonset',
'kubernetes_deployment',
'kubernetes_deployment_v1',
'kubernetes_job',
'kubernetes_job_v1',
'kubernetes_pod',
'kubernetes_pod_v1',
'kubernetes_replication_controller',
'kubernetes_replication_controller_v1',
'kubernetes_stateful_set',
'kubernetes_stateful_set_v1',
],
// https://registry.terraform.io/providers/kreuzwerker/docker/latest/docs/resources/image
docker_image: ['docker_image'],
// https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release
helm_release: ['helm_release'],
// https://registry.terraform.io/providers/hashicorp/tfe/latest/docs/resources/workspace
tfe_workspace: ['tfe_workspace'],
};

0 comments on commit a420576

Please sign in to comment.