From 0b152a9001e0b1deadb2f31fc92f51ce87ed4cfe Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Mon, 22 Jul 2024 22:15:04 +0200 Subject: [PATCH] bad things --- .gitignore | 2 ++ shell.nix | 8 ++++++- vm-setup/.gitignore | 2 ++ vm-setup/.terraform.lock.hcl | 42 +++++++++++++++++++++++++++++++++ vm-setup/main.tf | 3 +++ vm-setup/net.tf | 6 +++++ vm-setup/setup.sh | 22 +++++++++++++++++ user-data => vm-setup/user-data | 0 vm-setup/versions.tf | 16 +++++++++++++ vm-setup/vm.tf | 42 +++++++++++++++++++++++++++++++++ 10 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 vm-setup/.gitignore create mode 100644 vm-setup/.terraform.lock.hcl create mode 100644 vm-setup/main.tf create mode 100644 vm-setup/net.tf create mode 100755 vm-setup/setup.sh rename user-data => vm-setup/user-data (100%) create mode 100644 vm-setup/versions.tf create mode 100644 vm-setup/vm.tf diff --git a/.gitignore b/.gitignore index 94c7cf5..941795b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /debian-image/build /tmp /vm-state +.terraform +terraform.tfstate* diff --git a/shell.nix b/shell.nix index e273aa5..a45c740 100644 --- a/shell.nix +++ b/shell.nix @@ -1,3 +1,9 @@ { pkgs ? import { } }: pkgs.mkShell { - packages = with pkgs; [ debootstrap ansible ansible-lint gparted ]; + packages = with pkgs; [ + ansible + ansible-lint + gparted + opentofu + cdrkit + ]; } diff --git a/vm-setup/.gitignore b/vm-setup/.gitignore new file mode 100644 index 0000000..7bc7d7f --- /dev/null +++ b/vm-setup/.gitignore @@ -0,0 +1,2 @@ +/tmp +/state diff --git a/vm-setup/.terraform.lock.hcl b/vm-setup/.terraform.lock.hcl new file mode 100644 index 0000000..acd197c --- /dev/null +++ b/vm-setup/.terraform.lock.hcl @@ -0,0 +1,42 @@ +# This file is maintained automatically by "tofu init". +# Manual edits may be lost in future updates. + +provider "registry.opentofu.org/dmacvicar/libvirt" { + version = "0.7.6" + constraints = "0.7.6" + hashes = [ + "h1:mmbm4vTyC/DCGO4Ed/vbp5AKvy1gmVn/94fzB9VmR08=", + "zh:0bde54f6f658b20b620b875daf106b5b25b1bae4d15408d6c5f06d58360e254d", + "zh:0c97c6930015918b8a34b6d7a2b0c3d17a649c226fcd1874fcba5bbbc0f35972", + "zh:1bdd7aa0011c5f024a09a124836ee9bc8e71b05a6ece810c61824275fd3f695f", + "zh:2b0cc7c794e4caf395d84ffff0b380d17e4b3219a4696264271bfe5059450efe", + "zh:2f8633f7fe07f76c188836ed6f93321ec5fbf5c004bc7699e1741d9b21ed5f37", + "zh:5bf47eed286ce55ed10a5cf657de49a34ab21cc8677c56fef3aab69cdde41a27", + "zh:7dca790fc5fd1d42bc4bc7170be003a7093602026d0f95c8aab84ad551fdf2a4", + "zh:80476b68bc84e3d661d1390025f83879b88f9cdc836de9751af09bd5716089cb", + "zh:82f3e2f3f50176cd6041c8ba36e295cbda1b289ef52ab75b5eceb0f921f64f7b", + "zh:a179b165f3b9bb9a67ebbbf9d73157ded33f02d476b2f58906389dca03b653c9", + "zh:acae54a5d0616f22b3180ddd8e8aad39af664e604394fdacf1f7b337bca2d5b4", + "zh:da4406a2428a9a7e98272c032cb93431c3919253af2fe9934b532d26c0deab09", + "zh:f63dbd8e579ab5268d01ffab4503b8a8e736b70d1a04e4f271559ba8dd133dcd", + "zh:f85c1d9e51a94ecde137435c9d6b0fb7be590437ea8a725334d1577eebbc550c", + ] +} + +provider "registry.opentofu.org/hashicorp/local" { + version = "2.5.1" + constraints = "2.5.1" + hashes = [ + "h1:GgW5qncKu4KnXLE1ZYv5iwmhSYtTNzsOvJAOQIyFR7E=", + "zh:031c2c2070672b7e78e0aa15560839278dc57fe7cf1e58a617ac13c67b31d5fb", + "zh:1ef64ea4f8382cd538a76f3d319f405d18130dc3280f1c16d6aaa52a188ecaa4", + "zh:422ce45691b2f384dbd4596fdc8209d95cb43d85a82aaa0173089d38976d6e96", + "zh:7415fbd8da72d9363ba55dd8115837714f9534f5a9a518ec42268c2da1b9ed2f", + "zh:92aa22d071339c8ef595f18a9f9245c287266c80689f5746b26e10eaed04d542", + "zh:9cd0d99f5d3be835d6336c19c4057af6274e193e677ecf6370e5b0de12b4aafe", + "zh:a8c1525b389be5809a97f02aa7126e491ba518f97f57ed3095a3992f2134bb8f", + "zh:b336fa75f72643154b07c09b3968e417a41293358a54fe03efc0db715c5451e6", + "zh:c66529133599a419123ad2e42874afbd9aba82bd1de2b15cc68d2a1e665d4c8e", + "zh:c7568f75ba6cb7c3660b69eaab8b0e4278533bd9a7a4c33ee6590cc7e69743ea", + ] +} diff --git a/vm-setup/main.tf b/vm-setup/main.tf new file mode 100644 index 0000000..1a4a650 --- /dev/null +++ b/vm-setup/main.tf @@ -0,0 +1,3 @@ +locals { + vm_count = 1 +} diff --git a/vm-setup/net.tf b/vm-setup/net.tf new file mode 100644 index 0000000..9010ccb --- /dev/null +++ b/vm-setup/net.tf @@ -0,0 +1,6 @@ +resource "libvirt_network" "lab" { + name = "lab" + mode = "nat" + domain = "lab.local" + addresses = ["10.0.0.0/8"] +} diff --git a/vm-setup/setup.sh b/vm-setup/setup.sh new file mode 100755 index 0000000..40e815a --- /dev/null +++ b/vm-setup/setup.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -eu + +IMG_DOWNLOADED=debian-12-generic-amd64.qcow2 +IMG=debian-12-generic-amd64-bigger.qcow2 + +mkdir -p tmp +mkdir -p state + +if ! [ -f "tmp/$IMG_DOWNLOADED" ]; then + curl -L -o "tmp/$IMG_DOWNLOADED" https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2 +fi + +if ! [ -f "tmp/$IMG" ]; then + cp "tmp/$IMG_DOWNLOADED" "tmp/$IMG" + sudo qemu-img resize tmp/$IMG 30G + sudo modprobe nbd max_part=10 + sudo qemu-nbd -c /dev/nbd0 tmp/$IMG + sudo gparted /dev/nbd0 + sudo qemu-nbd -d /dev/nbd0 +fi diff --git a/user-data b/vm-setup/user-data similarity index 100% rename from user-data rename to vm-setup/user-data diff --git a/vm-setup/versions.tf b/vm-setup/versions.tf new file mode 100644 index 0000000..d4eca85 --- /dev/null +++ b/vm-setup/versions.tf @@ -0,0 +1,16 @@ +terraform { + required_providers { + libvirt = { + source = "dmacvicar/libvirt" + version = "0.7.6" + } + local = { + source = "hashicorp/local" + version = "2.5.1" + } + } +} + +provider "libvirt" { + uri = "qemu:///system" +} diff --git a/vm-setup/vm.tf b/vm-setup/vm.tf new file mode 100644 index 0000000..18e2b0c --- /dev/null +++ b/vm-setup/vm.tf @@ -0,0 +1,42 @@ +locals { + cloudinit_user_data = file("${path.module}/user-data") +} + +resource "libvirt_cloudinit_disk" "user_data" { + name = "commoninit.iso" + user_data = local.cloudinit_user_data +} + +resource "local_file" "debian-node-disk" { + count = local.vm_count + + content = "" + filename = "${path.module}/state/debian-node-${count.index}.qcow2.stamp" + + provisioner "local-exec" { + command = <