Introduction
Introduction Statistics Contact Development Disclaimer Help
init push - infra - Terraform IoC for my remote (Hetzner) and local (Incus) ser…
Log
Files
Refs
README
---
commit 1689e2eba4bdb38eac00a4dc51d5f98335431252
Author: Jay Scott <[email protected]>
Date: Fri, 27 Jan 2023 22:16:52 +0000
init push
Diffstat:
A .gitignore | 3 +++
A .terraform.lock.hcl | 24 ++++++++++++++++++++++++
A README | 4 ++++
A main.tf | 54 +++++++++++++++++++++++++++++…
A terraform.tfvars | 41 +++++++++++++++++++++++++++++…
A user_data.yml | 58 ++++++++++++++++++++++++++++++
A variables.tf | 25 +++++++++++++++++++++++++
7 files changed, 209 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
@@ -0,0 +1,3 @@
+
+.terraform/
+*tfstate*
diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl
@@ -0,0 +1,24 @@
+# This file is maintained automatically by "terraform init".
+# Manual edits may be lost in future updates.
+
+provider "registry.terraform.io/hetznercloud/hcloud" {
+ version = "1.36.2"
+ constraints = "1.36.2"
+ hashes = [
+ "h1:VO/dl+g5NfJd436hmT+9NOMQk6oRU4Z9TSJJJrNlN0M=",
+ "zh:0498ef4209924b30ce7b4a232dd6aee08feab2ebbc90064db699adc10c16707e",
+ "zh:292e3c0c55d320cf164cdd431ee31580dd86f435aec99721597204bab5de3970",
+ "zh:3ce8558658baa7c4b9f1eeb92427665b4b930e5b157fbf352977778c90e11aaa",
+ "zh:46abd0bdeeba46b86832ed31338ad837b584f7b2152f8a9bfa6c3802f481a6da",
+ "zh:5804e71d411577f06abc0986c8c2e475c49042a192efce5936e4d5bdd874fc22",
+ "zh:7cef0782e8198346bfe7b61601e1cf8f2158280a5cf665140b72838545ca3127",
+ "zh:be81782af391ff4cc0859d976637aa00e6fe34061fe4f1df1f5ab5d62ef94f82",
+ "zh:bf2660e70edf758305085698fc9d05306b174b99559cd0f3f61c0b705ba22275",
+ "zh:caf727b0a378dc8c9c3594bbf176865f87aa732077820ff045eb352f5a48aeed",
+ "zh:cf95fc3121b358c7b7b667193ab36b8cb6140e2f6dfbf6f1b4c55b7fec1bb6ef",
+ "zh:d6d3119f8b971e982b6421dfa3b86314ccaeceaf047a3b6505f79e1a30f8301e",
+ "zh:e6f7f65dced2e88e3082c57ddcd118412595678cf3c7289bc7e12c724b3bd892",
+ "zh:f41f59ca511ab1a591d5abdc7f6d32d2e03a1d6087d206a741f95b7b0dd2ea17",
+ "zh:fbe59fbb5f272a6b206a380f6dbf49837b199960dd038afca2e89b11f72fdfda",
+ ]
+}
diff --git a/README b/README
@@ -0,0 +1,4 @@
+bootstrap my cloud servers.
+
+ terraform plan -var="hcloud_token=$HCLOUD_TOKEN"
+ terraform apply -var="hcloud_token=$HCLOUD_TOKEN"
diff --git a/main.tf b/main.tf
@@ -0,0 +1,54 @@
+terraform {
+ required_providers {
+ hcloud = {
+ source = "hetznercloud/hcloud"
+ version = "1.36.2"
+ }
+ }
+}
+
+provider "hcloud" {
+ token = var.hcloud_token
+}
+
+
+resource "hcloud_ssh_key" "this" {
+ name = "main_key"
+ public_key = file("~/.ssh/id_rsa.pub")
+}
+
+
+resource "hcloud_firewall" "this" {
+ name = "firewallrules"
+
+ dynamic "rule" {
+ for_each = var.firewall_rules
+
+ content {
+ description = rule.key
+ direction = rule.value.direction
+ protocol = rule.value.protocol
+ source_ips = rule.value.source_ips
+ port = rule.value.port
+ }
+ }
+}
+
+
+resource "hcloud_server" "nodes" {
+ for_each = var.nodes
+
+ name = each.key
+ image = each.value.image
+ server_type = each.value.server_type
+ location = each.value.location
+ labels = each.value.labels
+ ssh_keys = [hcloud_ssh_key.this.id]
+ user_data = file("user_data.yml")
+ firewall_ids = [hcloud_firewall.this.id]
+
+ public_net {
+ ipv4_enabled = each.value.ipv4
+ ipv6_enabled = each.value.ipv6
+ }
+}
diff --git a/terraform.tfvars b/terraform.tfvars
@@ -0,0 +1,41 @@
+nodes = {
+ node1 = {
+ image = "debian-11"
+ location = "hel1",
+ server_type = "cx11",
+ ipv4 = true
+ ipv6 = true
+ labels = {
+ services = "git"
+ }
+ }
+}
+
+firewall_rules = {
+ gopher = {
+ direction = "in"
+ protocol = "tcp"
+ source_ips = ["0.0.0.0/0", "::/0"]
+ port = "70"
+ }
+ ssh = {
+ direction = "in"
+ protocol = "tcp"
+ source_ips = ["0.0.0.0/0", "::/0"]
+ port = "22"
+ }
+ git = {
+ direction = "in"
+ protocol = "tcp"
+ source_ips = ["0.0.0.0/0", "::/0"]
+ port = "9418"
+ }
+ fingerd = {
+ direction = "in"
+ protocol = "tcp"
+ source_ips = ["0.0.0.0/0", "::/0"]
+ port = "79"
+ }
+
+
+}
diff --git a/user_data.yml b/user_data.yml
@@ -0,0 +1,58 @@
+#cloud-config
+users:
+ - name: jay
+ groups: users
+ sudo: ALL=(ALL) NOPASSWD:ALL
+ shell: /bin/bash
+ ssh_authorized_keys:
+ - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDCRWnkYAChsjuT/T/IoENtm8OT18tPer…
+
+package_update: true
+package_upgrade: true
+
+packages:
+ - openbsd-inetd
+ - efingerd
+ - libgit2-dev
+ - vim
+ - htop
+ - git
+
+runcmd:
+ # SSH config
+ - sed -ie '/^PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
+ - sed -ie '/^PasswordAuthentication/s/^.*$/PasswordAuthentication no/' /etc/…
+ - sed -ie '/^X11Forwarding/s/^.*$/X11Forwarding no/' /etc/ssh/sshd_config
+ - sed -ie '/^#MaxAuthTries/s/^.*$/MaxAuthTries 2/' /etc/ssh/sshd_config
+ - sed -ie '/^#AllowTcpForwarding/s/^.*$/AllowTcpForwarding no/' /etc/ssh/ssh…
+ - sed -ie '/^#AllowAgentForwarding/s/^.*$/AllowAgentForwarding no/' /etc/ssh…
+ - sed -ie '/^#AuthorizedKeysFile/s/^.*$/AuthorizedKeysFile .ssh/authorized_k…
+ - systemctl restart ssh
+ # Git setup
+ - mkdir -p /srv/git
+ - chown -R git:git /srv/git
+ - systemctl enable git-daemon
+ - systemctl start git-daemon
+
+write_files:
+ - content: |
+ [Unit]
+ Description=Start Git Daemon
+
+ [Service]
+ ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/
+
+ Restart=always
+ RestartSec=500ms
+
+ StandardOutput=syslog
+ StandardError=syslog
+ SyslogIdentifier=git-daemon
+
+ User=git
+ Group=git
+
+ [Install]
+ WantedBy=multi-user.target
+ path: /etc/systemd/system/git-daemon.service
+ permissions: '0644'
diff --git a/variables.tf b/variables.tf
@@ -0,0 +1,25 @@
+variable "hcloud_token" {
+ description = "Hetzner cloud personal API token."
+ type = string
+ sensitive = true
+}
+
+variable "nodes" {
+ type = map(object({
+ image = string
+ location = string
+ server_type = string
+ labels = map(any)
+ ipv4 = bool
+ ipv6 = bool
+ }))
+}
+
+variable "firewall_rules" {
+ type = map(object({
+ direction = string
+ protocol = string
+ source_ips = list(any)
+ port = string
+ }))
+}
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.