Skip to content

Commit 406850c

Browse files
authored
Merge pull request #1 from quixio/dev
Updated the docs and changed the
2 parents cba93eb + aabcfbb commit 406850c

File tree

9 files changed

+242
-82
lines changed

9 files changed

+242
-82
lines changed

.github/gitcliff.toml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# git-cliff configuration for release changelog
2+
# Docs: https://github.com/orhun/git-cliff
3+
4+
[changelog]
5+
header = ""
6+
body = "{{#each groups}}{{#if commits}}\n### {{title}}\n{{#each commits}}- {{this.message | trim}} ({{this.sha}})\n{{/each}}{{/if}}{{/each}}\n"
7+
footer = ""
8+
trim = true
9+
10+
[git]
11+
conventional_commits = true
12+
filter_unconventional = true
13+
14+
commit_parsers = [
15+
{ message = "feat\(.*\):", group = "Features" },
16+
{ message = "fix\(.*\):", group = "Bug Fixes" },
17+
{ message = "perf\(.*\):", group = "Performance" },
18+
{ message = "refactor\(.*\):", group = "Refactors" },
19+
{ message = "docs\(.*\):", group = "Documentation" },
20+
{ message = "chore\(.*\):", group = "Chores" },
21+
{ message = "test\(.*\):", group = "Tests" },
22+
{ message = "ci\(.*\):", group = "CI" }
23+
]
24+
25+
protect_breaking_changes = true
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
name: quix-aks module CI/CD
2+
3+
on:
4+
push:
5+
branches: [ main, dev ]
6+
paths:
7+
- 'modules/quix-aks/**'
8+
- '.github/workflows/terraform-module.yml'
9+
workflow_dispatch:
10+
inputs:
11+
bump:
12+
description: 'Version bump (patch, minor, major)'
13+
required: true
14+
default: 'minor'
15+
type: choice
16+
options: [patch, minor, major]
17+
18+
permissions:
19+
contents: write
20+
21+
jobs:
22+
validate:
23+
name: Validate Terraform
24+
runs-on: ubuntu-latest
25+
defaults:
26+
run:
27+
working-directory: modules/quix-aks
28+
steps:
29+
- name: Checkout
30+
uses: actions/checkout@v4
31+
with:
32+
fetch-depth: 0
33+
34+
- name: Setup Terraform
35+
uses: hashicorp/setup-terraform@v3
36+
with:
37+
terraform_version: 1.6.6
38+
39+
- name: Terraform fmt
40+
run: terraform fmt -check -recursive
41+
42+
- name: Terraform init (no backend)
43+
run: terraform init -backend=false
44+
45+
- name: Terraform validate
46+
run: terraform validate
47+
48+
- name: Generate terraform-docs (inject & commit)
49+
uses: terraform-docs/[email protected]
50+
with:
51+
working-dir: modules/quix-aks
52+
output-file: README.md
53+
output-method: inject
54+
config-file: ''
55+
git-push: true
56+
57+
release:
58+
name: Tag release
59+
runs-on: ubuntu-latest
60+
needs: validate
61+
# Only release on manual dispatch with bump==minor
62+
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.bump == 'minor' }}
63+
steps:
64+
- name: Checkout
65+
uses: actions/checkout@v4
66+
with:
67+
fetch-depth: 0
68+
69+
- name: Create tag (SemVer bump)
70+
id: tag
71+
uses: anothrNick/[email protected]
72+
env:
73+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
74+
DEFAULT_BUMP: ${{ github.event.inputs.bump }}
75+
TAG_PREFIX: 'v'
76+
77+
- name: Create GitHub Release
78+
uses: softprops/action-gh-release@v2
79+
if: steps.tag.outputs.new_tag != ''
80+
with:
81+
tag_name: ${{ steps.tag.outputs.new_tag }}
82+
name: ${{ steps.tag.outputs.new_tag }}
83+
generate_release_notes: true
84+
env:
85+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

README.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Terraform Modules (Azure)
22

3-
Repository of production-ready Terraform modules. The primary module is `azure/modules/quix-aks` (full AKS with networking, NAT, RBAC, and optional Bastion/jumpbox).
3+
Repository of production-ready Terraform modules for installing quix-platform.
44

55
## Structure
66

@@ -58,3 +58,53 @@ Access a private AKS: see `BASTION_ACCESS.md`.
5858
## Module versioning
5959

6060
Publish SemVer tags and reference the module with `?ref=vX.Y.Z` when consuming from git.
61+
62+
### Using this module from another repo with a Git tag
63+
64+
HTTPS example:
65+
66+
```hcl
67+
module "quix_aks" {
68+
source = "git::https://github.com/quixio/terraform-quixplatform-azure.git//modules/quix-aks?ref=0.0.2"
69+
70+
name = "my-aks"
71+
location = "westeurope"
72+
resource_group_name = "rg-my-aks"
73+
create_resource_group = true
74+
75+
vnet_name = "vnet-my-aks"
76+
vnet_address_space = ["10.240.0.0/16"]
77+
nodes_subnet_name = "Subnet-Nodes"
78+
nodes_subnet_cidr = "10.240.0.0/22"
79+
80+
nat_identity_name = "my-nat-id"
81+
public_ip_name = "my-nat-ip"
82+
nat_gateway_name = "my-nat"
83+
availability_zone = "1"
84+
85+
kubernetes_version = "1.32.4"
86+
network_profile = {
87+
network_plugin_mode = "vnet"
88+
service_cidr = "172.22.0.0/16"
89+
dns_service_ip = "172.22.0.10"
90+
}
91+
92+
node_pools = {
93+
default = {
94+
name = "default"
95+
type = "system"
96+
node_count = 1
97+
vm_size = "Standard_D4ds_v5"
98+
}
99+
}
100+
}
101+
```
102+
103+
SSH example:
104+
105+
```hcl
106+
module "quix_aks" {
107+
source = "git::ssh://[email protected]/quixio/terraform-quixplatform-azure.git//modules/quix-aks?ref=0.0.2"
108+
# ...same inputs as above
109+
}
110+
```

examples/private-quix-infr/main.tf

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ resource "azurerm_resource_group" "this" {
2020
module "aks" {
2121
source = "../../modules/quix-aks"
2222

23-
name = "quix-aks-private"
24-
location = "westeurope"
25-
resource_group_name = "rg-quix-private"
26-
create_resource_group = false
27-
kubernetes_version = "1.32.4"
28-
sku_tier = "Standard"
23+
name = "quix-aks-private"
24+
location = "westeurope"
25+
resource_group_name = "rg-quix-private"
26+
create_resource_group = false
27+
kubernetes_version = "1.32.4"
28+
sku_tier = "Standard"
2929
private_cluster_enabled = true
3030

3131
vnet_name = "vnet-quix-private"
@@ -40,21 +40,21 @@ module "aks" {
4040

4141
enable_credentials_fetch = true
4242
node_pools = {
43-
default = {
44-
name = "default"
45-
type = "system"
46-
node_count = 2
47-
vm_size = "Standard_D4ds_v5"
48-
}
49-
quix_controller = {
50-
name = "quixcontroller"
51-
type = "user"
52-
node_count = 1
53-
vm_size = "Standard_D4ds_v5"
54-
taints = ["dedicated=controller:NoSchedule"]
55-
labels = { role = "controller" }
56-
}
43+
default = {
44+
name = "default"
45+
type = "system"
46+
node_count = 2
47+
vm_size = "Standard_D4ds_v5"
5748
}
49+
quix_controller = {
50+
name = "quixcontroller"
51+
type = "user"
52+
node_count = 1
53+
vm_size = "Standard_D4ds_v5"
54+
taints = ["dedicated=controller:NoSchedule"]
55+
labels = { role = "controller" }
56+
}
57+
}
5858

5959
network_profile = {
6060
network_plugin_mode = "overlay"

examples/public-quix-infr/main.tf

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ provider "azurerm" {
1414
module "aks" {
1515
source = "../../modules/quix-aks"
1616

17-
name = "quix-aks-public"
18-
location = "westeurope"
19-
resource_group_name = "rg-quix-public"
20-
create_resource_group = true
21-
kubernetes_version = "1.32.4"
22-
sku_tier = "Standard"
17+
name = "quix-aks-public"
18+
location = "westeurope"
19+
resource_group_name = "rg-quix-public"
20+
create_resource_group = true
21+
kubernetes_version = "1.32.4"
22+
sku_tier = "Standard"
2323
private_cluster_enabled = false
2424

2525
vnet_name = "vnet-quix-public"
@@ -35,28 +35,28 @@ module "aks" {
3535
enable_credentials_fetch = true
3636

3737
node_pools = {
38-
default = {
39-
name = "default"
40-
type = "system"
41-
node_count = 1
42-
vm_size = "Standard_D4ds_v5"
43-
},
44-
quix_controller = {
45-
name = "quixcontroller"
46-
type = "user"
47-
node_count = 1
48-
vm_size = "Standard_D4ds_v5"
49-
taints = ["dedicated=controller:NoSchedule"]
50-
labels = { role = "controller" }
51-
}
52-
quix_deployments = {
53-
name = "quixdeployment"
54-
type = "user"
55-
node_count = 1
56-
vm_size = "Standard_D4ds_v5"
57-
taints = ["dedicated=controller:NoSchedule"]
58-
labels = { role = "controller" }
59-
}
38+
default = {
39+
name = "default"
40+
type = "system"
41+
node_count = 1
42+
vm_size = "Standard_D4ds_v5"
43+
},
44+
quix_controller = {
45+
name = "quixcontroller"
46+
type = "user"
47+
node_count = 1
48+
vm_size = "Standard_D4ds_v5"
49+
taints = ["dedicated=controller:NoSchedule"]
50+
labels = { role = "controller" }
51+
}
52+
quix_deployments = {
53+
name = "quixdeployment"
54+
type = "user"
55+
node_count = 1
56+
vm_size = "Standard_D4ds_v5"
57+
taints = ["dedicated=controller:NoSchedule"]
58+
labels = { role = "controller" }
59+
}
6060
}
6161

6262
network_profile = {

modules/quix-aks/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
| Name | Version |
1212
|------|---------|
13-
| <a name="provider_azurerm"></a> [azurerm](#provider\_azurerm) | >= 3.112.0, < 4.0.0 |
14-
| <a name="provider_null"></a> [null](#provider\_null) | n/a |
13+
| <a name="provider_azurerm"></a> [azurerm](#provider\_azurerm) | 3.117.1 |
14+
| <a name="provider_null"></a> [null](#provider\_null) | 3.2.4 |
1515

1616
## Modules
1717

@@ -65,8 +65,8 @@ No modules.
6565
| <a name="input_name"></a> [name](#input\_name) | Name of the AKS cluster | `string` | n/a | yes |
6666
| <a name="input_nat_gateway_name"></a> [nat\_gateway\_name](#input\_nat\_gateway\_name) | Name of the NAT Gateway | `string` | n/a | yes |
6767
| <a name="input_nat_identity_name"></a> [nat\_identity\_name](#input\_nat\_identity\_name) | Name of the managed identity for NAT | `string` | n/a | yes |
68-
| <a name="input_network_profile"></a> [network\_profile](#input\_network\_profile) | AKS network profile | <pre>object({<br/> network_plugin_mode = string # "overlay" or "vnet"<br/> service_cidr = string<br/> dns_service_ip = string<br/> pod_cidr = optional(string)<br/> network_policy = optional(string, "calico")<br/> outbound_type = optional(string, "userAssignedNATGateway")<br/> })</pre> | n/a | yes |
69-
| <a name="input_node_pools"></a> [node\_pools](#input\_node\_pools) | Map of additional node pools (include a 'system' pool to override default) | <pre>map(object({<br/> name = string<br/> type = string # system | user<br/> node_count = number<br/> vm_size = string<br/> max_pods = optional(number)<br/> taints = optional(list(string))<br/> labels = optional(map(string))<br/> mode = optional(string) # system | user (overrides type)<br/> }))</pre> | `{}` | no |
68+
| <a name="input_network_profile"></a> [network\_profile](#input\_network\_profile) | AKS network profile | <pre>object({<br/> network_plugin_mode = string # "overlay" or "vnet"<br/> service_cidr = string<br/> dns_service_ip = string<br/> pod_cidr = optional(string)<br/> network_policy = optional(string, "calico")<br/> outbound_type = optional(string, "userAssignedNATGateway")<br/> })</pre> | n/a | yes |
69+
| <a name="input_node_pools"></a> [node\_pools](#input\_node\_pools) | Map of additional node pools (include a 'system' pool to override default) | <pre>map(object({<br/> name = string<br/> type = string # system | user<br/> node_count = number<br/> vm_size = string<br/> max_pods = optional(number)<br/> taints = optional(list(string))<br/> labels = optional(map(string))<br/> mode = optional(string) # system | user (overrides type)<br/> }))</pre> | `{}` | no |
7070
| <a name="input_nodes_subnet_cidr"></a> [nodes\_subnet\_cidr](#input\_nodes\_subnet\_cidr) | CIDR for the AKS nodes subnet | `string` | n/a | yes |
7171
| <a name="input_nodes_subnet_name"></a> [nodes\_subnet\_name](#input\_nodes\_subnet\_name) | Name of the AKS nodes subnet | `string` | n/a | yes |
7272
| <a name="input_oidc_issuer_enabled"></a> [oidc\_issuer\_enabled](#input\_oidc\_issuer\_enabled) | Enable OIDC issuer | `bool` | `true` | no |

modules/quix-aks/aks.tf

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
################################################################################
44

55
resource "azurerm_kubernetes_cluster" "this" {
6-
name = var.name
7-
location = local.rg_location
8-
resource_group_name = local.rg_name_effective
9-
dns_prefix = "${var.name}-dns"
10-
kubernetes_version = var.kubernetes_version
11-
sku_tier = var.sku_tier
6+
name = var.name
7+
location = local.rg_location
8+
resource_group_name = local.rg_name_effective
9+
dns_prefix = "${var.name}-dns"
10+
kubernetes_version = var.kubernetes_version
11+
sku_tier = var.sku_tier
1212
private_cluster_enabled = var.private_cluster_enabled
1313

1414
oidc_issuer_enabled = var.oidc_issuer_enabled
@@ -53,9 +53,9 @@ resource "azurerm_kubernetes_cluster" "this" {
5353
}
5454

5555
resource "azurerm_kubernetes_cluster_node_pool" "additional" {
56-
for_each = { for k, p in var.node_pools : k => p if k != (length(local.system_pool_keys) > 0 ? local.system_pool_keys[0] : "__none__") }
56+
for_each = { for k, p in var.node_pools : k => p if k != (length(local.system_pool_keys) > 0 ? local.system_pool_keys[0] : "__none__") }
5757
# Sanitize name: lowercase, alphanum only, start with letter, max 12
58-
name = substr(
58+
name = substr(
5959
(
6060
can(regex("^[a-z]", (replace(lower(each.value.name), "[^a-z0-9]", "") != "" ? replace(lower(each.value.name), "[^a-z0-9]", "") : "pool")))
6161
? (replace(lower(each.value.name), "[^a-z0-9]", "") != "" ? replace(lower(each.value.name), "[^a-z0-9]", "") : "pool")
@@ -77,7 +77,7 @@ resource "azurerm_kubernetes_cluster_node_pool" "additional" {
7777
drain_timeout_in_minutes = 0
7878
node_soak_duration_in_minutes = 0
7979
}
80-
tags = var.tags
80+
tags = var.tags
8181
}
8282

8383
################################################################################

modules/quix-aks/main.tf

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
################################################################################
44

55
locals {
6-
is_overlay = var.network_profile.network_plugin_mode == "overlay"
6+
is_overlay = var.network_profile.network_plugin_mode == "overlay"
77
system_pool_keys = [for k, p in var.node_pools : k if lower(coalesce(p.mode, p.type)) == "system"]
88
system_pool = length(local.system_pool_keys) > 0 ? var.node_pools[local.system_pool_keys[0]] : null
99
# Sanitize system pool name: lowercase, alphanum only, start with letter, max 12
10-
system_pool_name_base = replace(lower(local.system_pool.name), "[^a-z0-9]", "")
11-
system_pool_name_nonempty = local.system_pool_name_base != "" ? local.system_pool_name_base : "system"
12-
system_pool_name_prefixed = can(regex("^[a-z]", local.system_pool_name_nonempty)) ? local.system_pool_name_nonempty : "p${local.system_pool_name_nonempty}"
13-
system_pool_name = substr(local.system_pool_name_prefixed, 0, 12)
14-
rg_id = var.create_resource_group ? azurerm_resource_group.this[0].id : data.azurerm_resource_group.existing[0].id
15-
rg_name_effective = var.resource_group_name
16-
rg_location = var.create_resource_group ? azurerm_resource_group.this[0].location : data.azurerm_resource_group.existing[0].location
10+
system_pool_name_base = replace(lower(local.system_pool.name), "[^a-z0-9]", "")
11+
system_pool_name_nonempty = local.system_pool_name_base != "" ? local.system_pool_name_base : "system"
12+
system_pool_name_prefixed = can(regex("^[a-z]", local.system_pool_name_nonempty)) ? local.system_pool_name_nonempty : "p${local.system_pool_name_nonempty}"
13+
system_pool_name = substr(local.system_pool_name_prefixed, 0, 12)
14+
rg_id = var.create_resource_group ? azurerm_resource_group.this[0].id : data.azurerm_resource_group.existing[0].id
15+
rg_name_effective = var.resource_group_name
16+
rg_location = var.create_resource_group ? azurerm_resource_group.this[0].location : data.azurerm_resource_group.existing[0].location
1717
}
1818

1919
################################################################################

0 commit comments

Comments
 (0)