Skip to content

Commit 4c422ef

Browse files
committed
Added terraform for demo VM
1 parent 77ca5d8 commit 4c422ef

File tree

7 files changed

+110
-80
lines changed

7 files changed

+110
-80
lines changed

tf/.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
.env.mk
2+
ssh*
13
.terraform*
2-
terraform.*
4+
plan.out
5+
terraform.tfstate*

tf/Makefile

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
-include ../.env.mk
2+
3+
TERRAFORM_BACKEND="terraform-backend-git git --repository https://github.com/nicholasdille/terraform-state --ref main --state demo/state.json"
4+
5+
.PHONY:
6+
clean:
7+
@rm -rf plan.out terraform.tfstate* ssh*
8+
9+
.PHONY:
10+
show:
11+
@terraform show
12+
13+
.PHONY:
14+
output:
15+
@terraform output
16+
17+
.PHONY:
18+
init: .terraform.lock.hcl
19+
20+
.terraform.lock.hcl:
21+
@$(TERRAFORM_BACKEND) \
22+
terraform init
23+
24+
ssh:
25+
@ssh-keygen -t ed25519 -f ssh -N ''
26+
27+
.PHONY:
28+
plan: plan.out
29+
30+
plan.out: *.tf ssh .terraform.lock.hcl
31+
@terraform plan -out=plan.out -var="hcloud_token=$(HCLOUD_TOKEN)" -var="hetznerdns_token=$(HETZNERDNS_TOKEN)"
32+
33+
.PHONY:
34+
apply: plan.out
35+
@terraform apply -auto-approve -state=terraform.tfstate plan.out
36+
@rm -f plan.out
37+
38+
.PHONY:
39+
destroy: terraform.tfstate
40+
@terraform destroy -auto-approve -state=terraform.tfstate -var="hcloud_token=$(HCLOUD_TOKEN)" -var="hetznerdns_token=$(HETZNERDNS_TOKEN)"
41+
@rm -f terraform.tfstate*

tf/locals.tf

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
locals {
2+
server_type = "cx41"
3+
server_image = "ubuntu-22.04"
4+
}

tf/main.tf

+33-79
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,49 @@
1-
terraform {
2-
required_providers {
3-
hcloud = {
4-
source = "hetznercloud/hcloud"
5-
}
6-
}
7-
required_version = ">= 0.13"
8-
}
9-
10-
variable "hcloud_token" {
11-
sensitive = true
12-
}
13-
141
provider "hcloud" {
152
token = var.hcloud_token
163
}
174

18-
module "ssh_key_pair" {
19-
source = "cloudposse/ssh-key-pair/tls"
20-
21-
ssh_public_key_path = "."
22-
name = "demo"
5+
provider "hetznerdns" {
6+
apitoken = var.hetznerdns_token
237
}
248

259
resource "hcloud_ssh_key" "demo" {
26-
name = module.ssh_key_pair.key_name
27-
public_key = module.ssh_key_pair.public_key
10+
name = "demo"
11+
public_key = file("./ssh.pub")
2812
}
2913

3014
resource "hcloud_server" "demo" {
31-
name = module.ssh_key_pair.key_name
32-
location = "fsn1"
33-
image = "ubuntu-20.04"
34-
server_type = "cx11"
35-
ssh_keys = [
36-
hcloud_ssh_key.demo.id
15+
name = "demo"
16+
location = "nbg1"
17+
server_type = "cx41"
18+
image = "ubuntu-22.04"
19+
ssh_keys = [
20+
hcloud_ssh_key.demo.name
3721
]
38-
labels = {}
39-
user_data = <<EOT
40-
#cloud-config
41-
42-
groups:
43-
- user
44-
users:
45-
- name: user
46-
primary_group: user
47-
ssh_authorized_keys:
48-
- ${hcloud_ssh_key.demo.public_key}
49-
sudo:
50-
- ALL=(ALL) NOPASSWD:ALL
51-
52-
apt:
53-
conf: |
54-
APT {
55-
Install-Recommends "false";
56-
Install-Suggests "false";
57-
Get {
58-
Assume-Yes "true";
59-
Fix-Broken "true";
60-
};
61-
};
62-
63-
package_update: true
64-
package_upgrade: true
65-
packages:
66-
- bash
67-
- curl
68-
- ca-certificates
69-
- jq
70-
- git
71-
- make
72-
73-
runcmd:
74-
- sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1"/' /etc/default/grub
75-
- update-grub
76-
- curl -fL https://get.docker.com | sh
77-
- sudo -u user env "USER=user" "HOME=/home/user" bash /opt/init_dotfiles.sh
78-
79-
power_state:
80-
mode: reboot
81-
delay: now
82-
EOT
22+
public_net {
23+
ipv4_enabled = true
24+
ipv6_enabled = true
25+
}
26+
labels = {
27+
"purpose" : "demo"
28+
}
8329
}
8430

85-
module "demo" {
86-
source = "mcgrof/add-host-ssh-config/kdevops"
31+
data "hetznerdns_zone" "inmylab" {
32+
name = "inmylab.de"
33+
}
8734

88-
update_ssh_config_enable = true
89-
ssh_config = "./${module.ssh_key_pair.key_name}.config"
35+
resource "hetznerdns_record" "demo" {
36+
zone_id = data.hetznerdns_zone.inmylab.id
37+
name = "demo"
38+
value = hcloud_server.demo.ipv4_address
39+
type = "A"
40+
ttl= 120
41+
}
9042

91-
shorthosts = "demo"
92-
hostnames = hcloud_server.demo.ipv4_address
93-
user = "root"
94-
id = module.ssh_key_pair.local_file.private_key_pem
43+
resource "hetznerdns_record" "wildcard-demo" {
44+
zone_id = data.hetznerdns_zone.inmylab.id
45+
name = "*.demo"
46+
value = hetznerdns_record.demo.name
47+
type = "CNAME"
48+
ttl= 120
9549
}

tf/outputs.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
output "public_ip4" {
2+
value = "${hcloud_server.demo.ipv4_address}"
3+
}
4+
5+
output "status" {
6+
value = "${hcloud_server.demo.status}"
7+
}

tf/variables.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
variable "hcloud_token" {
2+
sensitive = true
3+
}
4+
5+
variable "hetznerdns_token" {
6+
sensitive = true
7+
}

tf/versions.tf

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
terraform {
2+
required_providers {
3+
hcloud = {
4+
# https://registry.terraform.io/providers/hetznercloud/hcloud/latest/docs
5+
source = "hetznercloud/hcloud"
6+
version = "1.38.2"
7+
}
8+
hetznerdns = {
9+
# https://registry.terraform.io/providers/timohirt/hetznerdns/latest/docs
10+
source = "timohirt/hetznerdns"
11+
version = "2.2.0"
12+
}
13+
}
14+
}

0 commit comments

Comments
 (0)