-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: gatici <[email protected]>
- Loading branch information
Showing
8 changed files
with
302 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,55 @@ | ||
*.idea | ||
.vscode/ | ||
.coverage | ||
.tox/ | ||
venv/ | ||
build/ | ||
*.charm | ||
.coverage | ||
tests/integration/*-tester/lib/ | ||
|
||
# Python | ||
**/venv/** | ||
*.pyc | ||
.python-version | ||
.mypy_cache/ | ||
__pycache__/ | ||
*.py[cod] | ||
.tox | ||
.idea/ | ||
tests/integration/*-tester/lib/ | ||
.env | ||
|
||
# Charmcraft | ||
*.charm | ||
|
||
# Local .terraform directories | ||
**/.terraform/* | ||
|
||
# .tfstate files | ||
*.tfstate | ||
*.tfstate.* | ||
|
||
# Crash log files | ||
crash.log | ||
crash.*.log | ||
|
||
# Exclude all .tfvars files, which are likely to contain sensitive data, such as | ||
# password, private keys, and other secrets. These should not be part of version | ||
# control as they are data points which are potentially sensitive and subject | ||
# to change depending on the environment. | ||
*.tfvars | ||
*.tfvars.json | ||
|
||
# Ignore override files as they are usually used to override resources locally and so | ||
# are not checked in | ||
override.tf | ||
override.tf.json | ||
*_override.tf | ||
*_override.tf.json | ||
|
||
# Include override files you do wish to add to version control using negated pattern | ||
# !example_override.tf | ||
|
||
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan | ||
# example: *tfplan* | ||
|
||
# Ignore CLI configuration files | ||
.terraformrc | ||
terraform.rc | ||
.terraform.lock.hcl | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
# Contributing | ||
|
||
## Development environment | ||
|
||
### Prerequisites | ||
|
||
Make sure the following software and tools are installed in the development | ||
environment. | ||
|
||
- `microk8s` | ||
- `juju` | ||
- `terraform` | ||
|
||
### Prepare Development Environment | ||
|
||
Install Microk8s: | ||
|
||
```console | ||
sudo snap install microk8s --channel=1.27-strict/stable | ||
sudo usermod -a -G snap_microk8s $USER | ||
newgrp snap_microk8s | ||
``` | ||
|
||
Enable `storage` plugin for Microk8s: | ||
|
||
```console | ||
sudo microk8s enable hostpath-storage | ||
``` | ||
|
||
Install Juju: | ||
|
||
```console | ||
sudo snap install juju --channel=3.1/stable | ||
``` | ||
|
||
Install Terraform: | ||
|
||
```console | ||
sudo snap install --classic terraform | ||
``` | ||
|
||
Bootstrap the Juju Controller using Microk8s: | ||
|
||
```console | ||
juju bootstrap microk8s | ||
``` | ||
|
||
Add a Juju model: | ||
|
||
```console | ||
juju add model <model-name> | ||
```` | ||
|
||
### Terraform provider | ||
|
||
The Terraform module uses the Juju provider to provision Juju resources. Please refer to the [Juju provider documentation](https://registry.terraform.io/providers/juju/juju/latest/docs) for more information. | ||
|
||
A Terraform working directory needs to be initialized at the beginning. | ||
|
||
Initialise the provider: | ||
|
||
```console | ||
terraform init | ||
``` | ||
|
||
## Testing | ||
|
||
Terraform CLI provides various ways to do formatting and validation. | ||
|
||
Formats to a canonical format and style: | ||
|
||
```console | ||
terraform fmt | ||
``` | ||
|
||
Check the syntactical validation: | ||
|
||
```console | ||
terraform validate | ||
``` | ||
|
||
Preview the changes: | ||
|
||
```console | ||
terraform plan | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# Grafana-agent-k8s Terraform Module | ||
|
||
This Grafana-agent-k8s Terraform module aims to deploy the [grafana-agent-k8s charm](https://charmhub.io/grafana-agent-k8s) via Terraform. | ||
|
||
## Getting Started | ||
|
||
### Prerequisites | ||
|
||
The following software and tools needs to be installed and should be running in the local environment. | ||
|
||
- `microk8s` | ||
- `juju 3.x` | ||
- `terrafom` | ||
|
||
### Deploy the grafana-agent-k8s charm using Terraform | ||
|
||
Make sure that `storage` plugin is enabled for Microk8s: | ||
|
||
```console | ||
sudo microk8s enable hostpath-storage | ||
``` | ||
|
||
Add a Juju model: | ||
|
||
```console | ||
juju add model <model-name> | ||
``` | ||
|
||
Initialise the provider: | ||
|
||
```console | ||
terraform init | ||
``` | ||
|
||
Customize the configuration inputs under `terraform.tfvars` file according to requirement. | ||
|
||
Replace the values in the `terraform.tfvars` file: | ||
|
||
```yaml | ||
# Mandatory Config Options | ||
model_name = "put your model-name here" | ||
``` | ||
|
||
Run Terraform Plan by providing var-file: | ||
|
||
```console | ||
terraform plan -var-file="terraform.tfvars" | ||
``` | ||
|
||
Deploy the resources, skip the approval: | ||
|
||
```console | ||
terraform apply -auto-approve | ||
``` | ||
|
||
### Check the Output | ||
|
||
Run `juju switch <juju model>` to switch to the target Juju model and observe the status of the application. | ||
|
||
```console | ||
juju status --relations | ||
``` | ||
|
||
### Clean Up | ||
|
||
Remove the application: | ||
|
||
```console | ||
terraform destroy -auto-approve | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
resource "juju_application" "grafana-agent-k8s" { | ||
name = "grafana-agent-k8s" | ||
model = var.model_name | ||
|
||
charm { | ||
name = "grafana-agent-k8s" | ||
channel = var.channel | ||
base = "[email protected]" | ||
} | ||
config = var.grafana-config | ||
units = 1 | ||
trust = true | ||
} | ||
|
||
resource "juju_integration" "prometheus-remote-write" { | ||
count = var.metrics_remote_write_offer_url != "" ? 1 : 0 | ||
model = var.model_name | ||
|
||
application { | ||
name = juju_application.grafana-agent-k8s.name | ||
endpoint = "send-remote-write" | ||
} | ||
|
||
application { | ||
offer_url = var.metrics_remote_write_offer_url | ||
} | ||
} | ||
|
||
resource "juju_integration" "loki-logging" { | ||
count = var.logging_offer_url != "" ? 1 : 0 | ||
model = var.model_name | ||
|
||
application { | ||
name = juju_application.grafana-agent-k8s.name | ||
endpoint = "logging-consumer" | ||
} | ||
|
||
application { | ||
offer_url = var.logging_offer_url | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
output "grafana_application_name" { | ||
description = "Name of the deployed application." | ||
value = juju_application.grafana-agent-k8s.name | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Copyright 2023 Canonical Ltd. | ||
# See LICENSE file for licensing details. | ||
|
||
terraform { | ||
required_providers { | ||
juju = { | ||
source = "juju/juju" | ||
version = "~> 0.10.1" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# Mandatory Config Options | ||
model_name = "put your model-name here" | ||
|
||
# Optional Configuration | ||
channel = "put the charm channel here" | ||
metrics_remote_write_offer_url = "Put the URL here" | ||
logging_offer_url = "Put the URL here" | ||
grafana-config = { | ||
tls_insecure_skip_verify = "put True not to skip the TLS verification" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
variable "model_name" { | ||
description = "Name of Juju model to deploy application to" | ||
type = string | ||
default = "" | ||
} | ||
|
||
variable "channel" { | ||
description = "The channel to use when deploying a charm " | ||
type = string | ||
default = "latest/stable" | ||
} | ||
|
||
variable "grafana-config" { | ||
description = "Additional configuration for the Grafana" | ||
default = {} | ||
} | ||
|
||
variable "metrics_remote_write_offer_url" { | ||
description = "Prometheus offer URL for `send-remote-write` endpoint" | ||
type = string | ||
default = "" | ||
} | ||
|
||
variable "logging_offer_url" { | ||
description = "Loki offer URL for `logging-consumer` endpoint" | ||
type = string | ||
default = "" | ||
} |