Skip to content

Commit

Permalink
TOPS-100 Git branch subnet mapping in Terraform (#60)
Browse files Browse the repository at this point in the history
* feat: Added module example

* fix: renamed modules

* fix: moved provider location?

* fix: init --migrate

* fix: how did this get rolled back?

* fix: aaaaa

* fix: blocks ?

* fix: blocks ?

* fix: blocks ?

* fix: remove dhcp.tf for now

* fix: testing changes

* feat: qemu-kvm module

* fix: rip forgot provisioner block

* fix: type in node config

* fix: type in node config

* fix: type in node config

* feat: more vm params set now

* fix: int -> number

* fix: Added 'G' to disk, 4096 ram for example VM.

* fix: disable qemu for now

* Introduce the common config (#40)

* feat: update .gitignore

* feat: add base and test VMs

* fix: update variable names to match existing scheme

* feat: add missing terraform pre-commit

* fix: update workflow

* fix: re-add tflint

* Use forked Proxmox API and Terraform provider with HA container support (#44)

* Add script to manually install Proxmox plugin

- Add Bash script to download and install forked version of Terraform
  Proxmox plugin
- Add script to before_script stage of GitLab CI config
- Update minimum Proxmox plugin version to ensure we get the newer
  forked plugin

* Add Proxmox provider setup to GitHub CI

* Use Bash to run Proxmox provider script

Can't guarantee that permissions will be right to run the script
directly.

* Specify full local path to Proxmox provider script

There's a default `working-directory` statement but I don't know if it's
working.

* Flail some more

- Add an `ls` to see where this stuff is actually running

* Fix Proxmox provider script name

oh wow it really was that stupid wasn't it

* Clone the Proxmox provider repo

* Use HTTPS to clone repo

* Remove check parameter for `terraform fmt`

This causes GitHub action to fail when formatting changes are required.

* Comment out version check for now

The install process finds my fork of the plugin as version v0.0.0.
Instead of making a new tag in the forked repo, just comment out the
version for now.  (Hopefully this works.)

* Fix plugin path, required_providers

* Run Proxmox plugin install with Bash in GitLab too

* Fix GitHub pre-commit pipeline

* Fix pre-commit complaining about my script lol

* Make sure proxmox-api-go updates get installed

* Use go get instead

* Add hastate parameter to default container and VM

* Clean Go module cache before installing

* Specify proxmox-api-go version

* Change plugin provider name

* Remove extraneous step

* Run terraform init in proxmox provider script

* Remove -migrate-state parameter to terraform init

It broke the custom provider location stuff

* Try local terraform.d directory

* Try the directory Terraform complains about

* Revert to original module to test

I want to see where the modules are being installed now...

* Fix provider directory

I forgot about a cd...

* Cleanup directory location before creating

* Try the plugin directory again

* Re-add newer version requirement

* Try the documented plugin dir again

Also force the newer version again to make sure we're getting the
modified plugin.

* Fix working directory for pre-commit GitHub CI

* fix: truthy on -> no

* Also copy provider into module directories

* Fix variable ordering

* Probably fix module path

* why u no work

* no quotes doofus

* NEWLINE

Co-authored-by: Aaron Saderholm <[email protected]>

* Switch to upstream repos (#45)

* Possibly fix builds? (#46)

* Switch back to my fork for testing

* Don't manually install my fork of proxmox-api-go

* Switch back to upstream

* Only run create, Ansible, destroy on main branch

* Be more specific regarding rules

Changes tested using CI linter at
https://gitlab.magevent.net/magfest/bridges/-/ci/lint

* Rsyslog-server base playbook (#41)

* feat: update .gitignore

* feat: add base and test VMs

* fix: update variable names to match existing scheme

* feat: add missing terraform pre-commit

* fix: update workflow

* fix: re-add tflint

* feat: add playbook for rsyslog

* fix: move back to telmate proxmox provider

* feat: add firewall rules and cron entry to compress logs

* Remove terraform provider script (#51)

* fix: remove now outdated script

* fix: remove old pre-commit workflot option

* feat: setup timesyncd (#54)

* feat: add ufw rule for ssh and enable (#53)

* Add rsyslog to common ubuntu role for all clients (#49)

* feat: add client rsyslog config

* feat: update module to be a template

* fix: update IP in vault

* feat: add cups server buildout (#56)

* Remove remnants of Terraform plugin hack (#58)

The script has been gone for a while, but both CI systems are still
trying to run it.

* TOPS-100 First pass at subnet / domain logic

* TOPS-100 First pass at subnet / domain logic

* TOPS-100  not

* TOPS-100 rebase fluke

* TOPS-100 Updated Telemate/proxmox var in a few places

* TOPS-100 simplify python subnet file

* TOPS-100 ??? CIDR math

* TOPS-100 Maybe?

* TOPS-100 Maybe?

* TOPS-100 cleanup

* TOPS-100 Add domain local

* TOPS-100 Scratch stackstorm

* TOPS-100 missing $

* TOPS-100 Whitespace fixing

* TOPS-100 Align equals

* Format changes

* Botched rebase

Co-authored-by: claughinghouse <[email protected]>
Co-authored-by: yesrod <[email protected]>
  • Loading branch information
3 people authored Aug 20, 2021
1 parent 199dfd3 commit e370a5f
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 5 deletions.
2 changes: 2 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ variables:
TF_HTTP_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${CI_COMMIT_BRANCH}
TF_STATE_NAME: ${CI_COMMIT_BRANCH}
TF_CACHE_KEY: ${CI_COMMIT_BRANCH}
TF_VAR_branch: ${CI_COMMIT_BRANCH}
cache:
key: "${TF_ROOT}"
paths:
Expand All @@ -12,6 +13,7 @@ cache:
# Test
before_script:
- cd ${TF_ROOT}
- export TF_VAR_subnet="$(python3 helpers/subnet_prefix.py)"

stages:
- prepare-tf
Expand Down
4 changes: 4 additions & 0 deletions subnet_prefixes.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
main: 10.101.23.0/24
dev: 10.101.24.0/24
aaron-dev: 10.101.25.0/24
default: 10.101.26.0/24
22 changes: 22 additions & 0 deletions terraform/helpers/subnet_prefix.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env python3
# Outputs string with correct subnet prefix based on
# the current git branch.
# ATS
import os
import sys

branch = os.getenv("CI_COMMIT_BRANCH")
mapping_file = f"{os.getenv('CI_PROJECT_DIR')}/subnet_prefixes.txt"

subnets = {}
with open(mapping_file) as myfile:
for line in myfile:
name, var = line.partition(":")[::2]
subnets[name.strip()] = str(var).strip()

if branch in subnets:
print(subnets[branch])
exit(0)
else:
print(f"Could not find branch {branch} in {mapping_file}", file=sys.stderr)
exit(1)
11 changes: 6 additions & 5 deletions terraform/lxc-dhcp.tf
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
module "dhcp1" {
source = "./modules/lxc"
ip_address = "10.101.23.253/24"
hostname = "dhcp1.dev.magevent.net"
source = "./modules/lxc"
cluster_name = "pve1"
ip_address = "${cidrhost(var.subnet, 253)}/${local.cidr_suffix}"
hostname = "dhcp1.${local.domain}"
}

module "dhcp2" {
source = "./modules/lxc"
cluster_name = "pve2"
ip_address = "10.101.23.254/24"
hostname = "dhcp2.dev.magevent.net"
ip_address = "${cidrhost(var.subnet, 254)}/${local.cidr_suffix}"
hostname = "dhcp2.${local.domain}"
}
15 changes: 15 additions & 0 deletions terraform/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,18 @@ provider "proxmox" {
_capturelog = ""
}
}

variable "branch" {
type = string
description = "Git branch, which is also used as subdomain name."
}

variable "subnet" {
type = string
description = "Subnet for the branch in format 192.168.1.0/24"
}

locals {
cidr_suffix = element(split("/", var.subnet), 1)
domain = "${var.branch}.magevent.net"
}

0 comments on commit e370a5f

Please sign in to comment.