Skip to content

Commit

Permalink
feat: Add terraform modules for katib-{controller,db-manager,ui} (#240)
Browse files Browse the repository at this point in the history
Create a `terraform/` directory for each of the charms that hosts their individual Terraform modules. It follows the structure proposed in [this spec](https://docs.google.com/document/d/1EG71A2pJ244PQRaGVzGj7Mx2B_bzE4U_OSqx4eeVI1E/edit) and it is based on what was done in canonical/argo-operators#198.

Ref #236 
Ref #237 
Ref #239
  • Loading branch information
orfeas-k committed Sep 24, 2024
1 parent 92f9beb commit 31bef12
Show file tree
Hide file tree
Showing 20 changed files with 432 additions and 1 deletion.
14 changes: 13 additions & 1 deletion .github/workflows/integrate.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,19 @@ jobs:
- uses: actions/checkout@v3
- run: python3 -m pip install tox
- run: tox -e ${{ matrix.charm }}-unit


terraform-checks:
name: Terraform
uses: canonical/charmed-kubeflow-workflows/.github/workflows/terraform-checks.yaml@main
strategy:
matrix:
charm:
- katib-controller
- katib-db-manager
- katib-ui
with:
charm-path: ./charms/${{ matrix.charm }}

charm-integration:
name: Integration tests (microk8s)
runs-on: ubuntu-20.04
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ __pycache__/
.tox
.vscode
venv/
.terraform*
*.tfstate*
60 changes: 60 additions & 0 deletions charms/katib-controller/terraform/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Terraform module for katib-controller

This is a Terraform module facilitating the deployment of the katib-controller charm, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs).

## Requirements
This module requires a `juju` model to be available. Refer to the [usage section](#usage) below for more details.

## API

### Inputs
The module offers the following configurable inputs:

| Name | Type | Description | Required |
| - | - | - | - |
| `app_name`| string | Application name | False |
| `channel`| string | Channel that the charm is deployed from | False |
| `config`| map(string) | Map of the charm configuration options | False |
| `model_name`| string | Name of the model that the charm is deployed on | True |
| `resources`| map(string) | Map of the charm resources | False |
| `revision`| number | Revision number of the charm name | False |

### Outputs
Upon applied, the module exports the following outputs:

| Name | Description |
| - | - |
| `app_name`| Application name |
| `provides`| Map of `provides` endpoints |
| `requires`| Map of `reqruires` endpoints |

## Usage

This module is intended to be used as part of a higher-level module. When defining one, users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. There are two options to do so when creating a high-level module:

### Define a `juju_model` resource
Define a `juju_model` resource and pass to the `model_name` input a reference to the `juju_model` resource's name. For example:

```
resource "juju_model" "testing" {
name = kubeflow
}
module "katib-controller" {
source = "<path-to-this-directory>"
model_name = juju_model.testing.name
}
```

### Define a `data` source
Define a `data` source and pass to the `model_name` input a reference to the `data.juju_model` resource's name. This will enable Terraform to look for a `juju_model` resource with a name attribute equal to the one provided, and apply only if this is present. Otherwise, it will fail before applying anything.
```
data "juju_model" "testing" {
name = var.model_name
}
module "katib-controller" {
source = "<path-to-this-directory>"
model_name = data.juju_model.testing.name
}
```
13 changes: 13 additions & 0 deletions charms/katib-controller/terraform/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
resource "juju_application" "katib_controller" {
charm {
name = "katib-controller"
channel = var.channel
revision = var.revision
}
config = var.config
model = var.model_name
name = var.app_name
resources = var.resources
trust = true
units = 1
}
17 changes: 17 additions & 0 deletions charms/katib-controller/terraform/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
output "app_name" {
value = juju_application.katib_controller.name
}

output "provides" {
value = {
metrics_endpoint = "metrics-endpoint",
grafana_dashboard = "grafana-dashboard",
}
}

output "requires" {
value = {
k8s_service_info = "k8s-service-info"
logging = "logging"
}
}
34 changes: 34 additions & 0 deletions charms/katib-controller/terraform/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
variable "app_name" {
description = "Application name"
type = string
default = "katib-controller"
}

variable "channel" {
description = "Charm channel"
type = string
default = null
}

variable "config" {
description = "Map of charm configuration options"
type = map(string)
default = {}
}

variable "model_name" {
description = "Model name"
type = string
}

variable "resources" {
description = "Map of resources"
type = map(string)
default = null
}

variable "revision" {
description = "Charm revision"
type = number
default = null
}
9 changes: 9 additions & 0 deletions charms/katib-controller/terraform/versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
terraform {
required_version = ">= 1.6"
required_providers {
juju = {
source = "juju/juju"
version = "~> 0.14.0"
}
}
}
7 changes: 7 additions & 0 deletions charms/katib-controller/tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,13 @@ deps =
-r requirements-lint.txt
description = Check code against coding style standards

[testenv:tflint]
allowlist_externals =
tflint
commands =
tflint --chdir=terraform --recursive
description = Check Terraform code against coding style standards

[testenv:unit]
commands =
coverage run --source={[vars]src_path} \
Expand Down
60 changes: 60 additions & 0 deletions charms/katib-db-manager/terraform/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Terraform module for katib-db-manager

This is a Terraform module facilitating the deployment of the katib-db-manager charm, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs).

## Requirements
This module requires a `juju` model to be available. Refer to the [usage section](#usage) below for more details.

## API

### Inputs
The module offers the following configurable inputs:

| Name | Type | Description | Required |
| - | - | - | - |
| `app_name`| string | Application name | False |
| `channel`| string | Channel that the charm is deployed from | False |
| `config`| map(string) | Map of the charm configuration options | False |
| `model_name`| string | Name of the model that the charm is deployed on | True |
| `resources`| map(string) | Map of the charm resources | False |
| `revision`| number | Revision number of the charm name | False |

### Outputs
Upon applied, the module exports the following outputs:

| Name | Description |
| - | - |
| `app_name`| Application name |
| `provides`| Map of `provides` endpoints |
| `requires`| Map of `reqruires` endpoints |

## Usage

This module is intended to be used as part of a higher-level module. When defining one, users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. There are two options to do so when creating a high-level module:

### Define a `juju_model` resource
Define a `juju_model` resource and pass to the `model_name` input a reference to the `juju_model` resource's name. For example:

```
resource "juju_model" "testing" {
name = kubeflow
}
module "katib-db-manager" {
source = "<path-to-this-directory>"
model_name = juju_model.testing.name
}
```

### Define a `data` source
Define a `data` source and pass to the `model_name` input a reference to the `data.juju_model` resource's name. This will enable Terraform to look for a `juju_model` resource with a name attribute equal to the one provided, and apply only if this is present. Otherwise, it will fail before applying anything.
```
data "juju_model" "testing" {
name = var.model_name
}
module "katib-db-manager" {
source = "<path-to-this-directory>"
model_name = data.juju_model.testing.name
}
```
13 changes: 13 additions & 0 deletions charms/katib-db-manager/terraform/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
resource "juju_application" "katib_db_manager" {
charm {
name = "katib-db-manager"
channel = var.channel
revision = var.revision
}
config = var.config
model = var.model_name
name = var.app_name
resources = var.resources
trust = true
units = 1
}
16 changes: 16 additions & 0 deletions charms/katib-db-manager/terraform/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
output "app_name" {
value = juju_application.katib_db_manager.name
}

output "provides" {
value = {
k8s_service_info = "k8s-service-info"
}
}

output "requires" {
value = {
relational_db = "relational-db"
logging = "logging"
}
}
34 changes: 34 additions & 0 deletions charms/katib-db-manager/terraform/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
variable "app_name" {
description = "Application name"
type = string
default = "katib-db-manager"
}

variable "channel" {
description = "Charm channel"
type = string
default = null
}

variable "config" {
description = "Map of charm configuration options"
type = map(string)
default = {}
}

variable "model_name" {
description = "Model name"
type = string
}

variable "resources" {
description = "Map of resources"
type = map(string)
default = null
}

variable "revision" {
description = "Charm revision"
type = number
default = null
}
9 changes: 9 additions & 0 deletions charms/katib-db-manager/terraform/versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
terraform {
required_version = ">= 1.6"
required_providers {
juju = {
source = "juju/juju"
version = "~> 0.14.0"
}
}
}
7 changes: 7 additions & 0 deletions charms/katib-db-manager/tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,13 @@ deps =
-r requirements-lint.txt
description = Check code against coding style standards

[testenv:tflint]
allowlist_externals =
tflint
commands =
tflint --chdir=terraform --recursive
description = Check Terraform code against coding style standards

[testenv:unit]
commands =
coverage run --source={[vars]src_path} \
Expand Down
60 changes: 60 additions & 0 deletions charms/katib-ui/terraform/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Terraform module for katib-ui

This is a Terraform module facilitating the deployment of the katib-ui charm, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs).

## Requirements
This module requires a `juju` model to be available. Refer to the [usage section](#usage) below for more details.

## API

### Inputs
The module offers the following configurable inputs:

| Name | Type | Description | Required |
| - | - | - | - |
| `app_name`| string | Application name | False |
| `channel`| string | Channel that the charm is deployed from | False |
| `config`| map(string) | Map of the charm configuration options | False |
| `model_name`| string | Name of the model that the charm is deployed on | True |
| `resources`| map(string) | Map of the charm resources | False |
| `revision`| number | Revision number of the charm name | False |

### Outputs
Upon applied, the module exports the following outputs:

| Name | Description |
| - | - |
| `app_name`| Application name |
| `provides`| Map of `provides` endpoints |
| `requires`| Map of `reqruires` endpoints |

## Usage

This module is intended to be used as part of a higher-level module. When defining one, users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. There are two options to do so when creating a high-level module:

### Define a `juju_model` resource
Define a `juju_model` resource and pass to the `model_name` input a reference to the `juju_model` resource's name. For example:

```
resource "juju_model" "testing" {
name = kubeflow
}
module "katib-ui" {
source = "<path-to-this-directory>"
model_name = juju_model.testing.name
}
```

### Define a `data` source
Define a `data` source and pass to the `model_name` input a reference to the `data.juju_model` resource's name. This will enable Terraform to look for a `juju_model` resource with a name attribute equal to the one provided, and apply only if this is present. Otherwise, it will fail before applying anything.
```
data "juju_model" "testing" {
name = var.model_name
}
module "katib-ui" {
source = "<path-to-this-directory>"
model_name = data.juju_model.testing.name
}
```
Loading

0 comments on commit 31bef12

Please sign in to comment.