1 Commits

Author SHA1 Message Date
Tuan-Dat Tran
7c33148688 Added blog.md
Signed-off-by: Tuan-Dat Tran <tuan-dat.tran@tudattr.dev>
2025-07-27 22:53:16 +02:00
131 changed files with 793 additions and 509 deletions

View File

@@ -13,8 +13,6 @@ skip_list:
- fqcn-builtins
- no-handler
- var-naming
- no-changed-when
- risky-shell-pipe
# Enforce certain rules that are not enabled by default.
enable_list:

8
.gitattributes vendored
View File

@@ -1,8 +0,0 @@
vars/group_vars/proxmox/secrets_vm.yml diff=ansible-vault merge=binary
vars/group_vars/all/secrets.yml diff=ansible-vault merge=binary
vars/group_vars/docker/secrets.yml diff=ansible-vault merge=binary
vars/group_vars/k3s/secrets.yml diff=ansible-vault merge=binary
vars/group_vars/k3s/secrets_token.yml diff=ansible-vault merge=binary
vars/group_vars/kubernetes/secrets.yml diff=ansible-vault merge=binary
vars/group_vars/proxmox/secrets.yml diff=ansible-vault merge=binary
vars/group_vars/proxmox/secrets_vm.yml diff=ansible-vault merge=binary

View File

@@ -10,7 +10,7 @@ repos:
hooks:
- id: ansible-galaxy-install
name: Install ansible-galaxy collections
entry: ansible-galaxy collection install -r requirements.yaml
entry: ansible-galaxy collection install -r requirements.yml
language: system
pass_filenames: false
always_run: true
@@ -18,6 +18,6 @@ repos:
rev: v6.22.2
hooks:
- id: ansible-lint
files: \.(yaml)$
files: \.(yaml|yml)$
additional_dependencies:
- ansible-core==2.15.8

View File

@@ -66,17 +66,6 @@ The following roles are defined:
ansible-playbook -i vars/k3s.ini playbooks/kubernetes_setup.yml
```
## Notes
### Vault Git Diff
This repo has a `.gitattributes` which points at the repos ansible-vault files.
These can be temporarily decrypted for git diff by adding this in conjunction with the `.gitattributes`:
```sh
# https://stackoverflow.com/questions/29937195/how-to-diff-ansible-vault-changes
git config --global diff.ansible-vault.textconv "ansible-vault view"
```
## Disclaimer
This project is highly customized for the author's specific environment. Using it without modification is not recommended.

View File

@@ -14,7 +14,7 @@ vault_password_file=/media/veracrypt1/scripts/ansible_vault.sh
# (list) Check all of these extensions when looking for 'variable' files which should be YAML or JSON or vaulted versions of these.
# This affects vars_files, include_vars, inventory and vars plugins among others.
yaml_valid_extensions=.yaml
yaml_valid_extensions=.yml
# (boolean) Set this to "False" if you want to avoid host key checking by the underlying tools Ansible uses to connect to the host
host_key_checking=False

22
blog.md
View File

@@ -5,9 +5,9 @@ author: "TuDatTr"
tags: ["Ansible", "Proxmox", "Kubernetes", "K3s", "IaC", "Homelab"]
---
## The Homelab: Repeatable, Automated, and Documented
## The Homelab Dream: Repeatable, Automated, and Powerful
For many tech enthusiasts, a homelab is a playground for learning, experimenting, and self-hosting services. But as the complexity grows, so does the management overhead. Manually setting up virtual machines, configuring networks, and deploying applications becomes a tedious and error-prone process. This lead me to building my homelab as Infrastructure as Code (IaC) with Ansible.
For many tech enthusiasts, a homelab is a playground for learning, experimenting, and self-hosting services. But as the complexity grows, so does the management overhead. Manually setting up virtual machines, configuring networks, and deploying applications becomes a tedious and error-prone process. My journey into building the ultimate homelab led me to a powerful solution: Infrastructure as Code (IaC) with Ansible.
This blog post walks you through my Ansible project, which automates the entire lifecycle of my homelab—from provisioning VMs on Proxmox to deploying a production-ready K3s Kubernetes cluster.
@@ -23,25 +23,25 @@ My Ansible project is designed to be modular and scalable, with a clear separati
The foundation of my homelab is Proxmox VE. The `proxmox` role is the first step in the automation pipeline. It handles:
- **VM and Container Creation:** Using a simple YAML definition in my `vars` files, I can specify the number of VMs and containers to create, their resources (CPU, memory, disk), and their base operating system images.
- **Cloud-Init Integration:** For VMs, I leverage Cloud-Init to perform initial setup, such as setting the hostname, creating users, and injecting SSH keys for Ansible to connect to.
- **Hardware Passthrough:** The role also configures hardware passthrough for devices like Intel Quick Sync for video transcoding in my media server.
- **VM and Container Creation:** Using a simple YAML definition in my `vars` files, I can specify the number of VMs and containers to create, their resources (CPU, memory, disk), and their base operating system images.
- **Cloud-Init Integration:** For VMs, I leverage Cloud-Init to perform initial setup, such as setting the hostname, creating users, and injecting SSH keys for Ansible to connect to.
- **Hardware Passthrough:** The role also configures hardware passthrough for devices like Intel Quick Sync for video transcoding in my media server.
### Layer 2: The K3s Kubernetes Cluster
With the base VMs ready, the next step is to build the Kubernetes cluster. I chose K3s for its lightweight footprint and ease of installation. The setup is divided into several roles:
- `k3s_server`: This role bootstraps the first master node and then adds additional master nodes to create a highly available control plane.
- `k3s_agent`: This role joins the worker nodes to the cluster.
- `k3s_loadbalancer`: A dedicated VM running Nginx is set up to act as a load balancer for the K3s API server, ensuring a stable endpoint for `kubectl` and other clients.
- `k3s_server`: This role bootstraps the first master node and then adds additional master nodes to create a highly available control plane.
- `k3s_agent`: This role joins the worker nodes to the cluster.
- `k3s_loadbalancer`: A dedicated VM running Nginx is set up to act as a load balancer for the K3s API server, ensuring a stable endpoint for `kubectl` and other clients.
### Layer 3: Applications and Services
Once the Kubernetes cluster is up and running, it's time to deploy applications. My project includes roles for:
- `docker_host`: For services that are better suited to run in a traditional Docker environment, this role sets up and configures Docker hosts.
- `kubernetes_argocd`: I use Argo CD for GitOps-based continuous delivery. This role deploys Argo CD to the cluster and configures it to sync with my application repositories.
- `reverse_proxy`: Caddy is my reverse proxy of choice, and this role automates its installation and configuration, including obtaining SSL certificates from Let's Encrypt.
- `docker_host`: For services that are better suited to run in a traditional Docker environment, this role sets up and configures Docker hosts.
- `kubernetes_argocd`: I use Argo CD for GitOps-based continuous delivery. This role deploys Argo CD to the cluster and configures it to sync with my application repositories.
- `reverse_proxy`: Caddy is my reverse proxy of choice, and this role automates its installation and configuration, including obtaining SSL certificates from Let's Encrypt.
## Putting It All Together: The Power of Playbooks

View File

@@ -3,9 +3,9 @@
hosts: docker_host
gather_facts: true
roles:
# - role: common
# tags:
# - common
- role: common
tags:
- common
- role: docker_host
tags:
- docker_host

View File

@@ -1,5 +0,0 @@
---
- name: Setup Docker Hosts
ansible.builtin.import_playbook: docker-host.yaml
- name: Setup Docker load balancer
ansible.builtin.import_playbook: docker-lb.yaml

5
playbooks/docker.yml Normal file
View File

@@ -0,0 +1,5 @@
---
- name: Setup Docker Hosts
ansible.builtin.import_playbook: docker-host.yml
- name: Setup Docker load balancer
ansible.builtin.import_playbook: docker-lb.yml

View File

@@ -3,10 +3,10 @@
hosts: k3s
gather_facts: true
roles:
- role: common
tags:
- common
when: inventory_hostname in groups["k3s_server"]
# - role: common
# tags:
# - common
# when: inventory_hostname in groups["k3s_server"]
- role: k3s_server
tags:
- k3s_server

View File

@@ -1,6 +0,0 @@
---
- name: Create new VM(s)
ansible.builtin.import_playbook: proxmox.yaml
- name: Provision VM
ansible.builtin.import_playbook: k3s-agents.yaml

View File

@@ -79,13 +79,12 @@
path: ~/.config/nvim
register: nvim_config
- name: Clone personal Neovim config directory
- name: Clone LazyVim starter to Neovim config directory
ansible.builtin.git:
repo: https://codeberg.org/tudattr/nvim
repo: https://github.com/LazyVim/starter
dest: ~/.config/nvim
clone: true
update: false
version: 1.0.0
when: not nvim_config.stat.exists
- name: Remove .git directory from Neovim config

View File

@@ -1,13 +0,0 @@
---
- name: Configure Time
ansible.builtin.include_tasks: time.yaml
- name: Configure Packages
ansible.builtin.include_tasks: packages.yaml
- name: Configure Hostname
ansible.builtin.include_tasks: hostname.yaml
- name: Configure Extra-Packages
ansible.builtin.include_tasks: extra_packages.yaml
- name: Configure Bash
ansible.builtin.include_tasks: bash.yaml
- name: Configure SSH
ansible.builtin.include_tasks: sshd.yaml

View File

@@ -0,0 +1,13 @@
---
- name: Configure Time
ansible.builtin.include_tasks: time.yml
- name: Configure Packages
ansible.builtin.include_tasks: packages.yml
- name: Configure Hostname
ansible.builtin.include_tasks: hostname.yml
- name: Configure Extra-Packages
ansible.builtin.include_tasks: extra_packages.yml
- name: Configure Bash
ansible.builtin.include_tasks: bash.yml
- name: Configure SSH
ansible.builtin.include_tasks: sshd.yml

View File

@@ -14,5 +14,3 @@ common_packages:
- fd-find
- ripgrep
- nfs-common
- open-iscsi
- parted

View File

@@ -5,6 +5,7 @@
state: directory
mode: "0755"
loop:
- /media/docker
- /media/series
- /media/movies
- /media/songs
@@ -37,5 +38,4 @@
- /media/series
- /media/movies
- /media/songs
- /media/downloads
become: true

View File

@@ -1,21 +0,0 @@
---
- name: Setup VM
ansible.builtin.include_tasks: 10_setup.yaml
- name: Install docker
ansible.builtin.include_tasks: 20_installation.yaml
- name: Setup user and group for docker
ansible.builtin.include_tasks: 30_user_group_setup.yaml
- name: Setup directory structure for docker
ansible.builtin.include_tasks: 40_directory_setup.yaml
# - name: Deploy configs
# ansible.builtin.include_tasks: 50_provision.yaml
- name: Deploy docker compose
ansible.builtin.include_tasks: 60_deploy_compose.yaml
- name: Publish metrics
ansible.builtin.include_tasks: 70_export.yaml

View File

@@ -0,0 +1,21 @@
---
- name: Setup VM
ansible.builtin.include_tasks: 10_setup.yml
- name: Install docker
ansible.builtin.include_tasks: 20_installation.yml
- name: Setup user and group for docker
ansible.builtin.include_tasks: 30_user_group_setup.yml
- name: Setup directory structure for docker
ansible.builtin.include_tasks: 40_directory_setup.yml
- name: Deploy configs
ansible.builtin.include_tasks: 50_provision.yml
- name: Deploy docker compose
ansible.builtin.include_tasks: 60_deploy_compose.yml
- name: Publish metrics
ansible.builtin.include_tasks: 70_export.yml

View File

@@ -1,5 +1,7 @@
docker_host_package_common_dependencies:
- nfs-common
- firmware-misc-nonfree
- linux-image-amd64
apt_lock_files:
- /var/lib/dpkg/lock

View File

@@ -1,3 +0,0 @@
---
- name: Install k3s agent
include_tasks: installation.yaml

View File

@@ -0,0 +1,3 @@
---
- name: Install k3s agent
include_tasks: installation.yml

View File

@@ -1,9 +1,9 @@
---
- name: Installation
ansible.builtin.include_tasks: installation.yaml
ansible.builtin.include_tasks: installation.yml
- name: Configure
ansible.builtin.include_tasks: configuration.yaml
ansible.builtin.include_tasks: configuration.yml
- name: Setup DNS on Netcup
community.general.netcup_dns:

View File

@@ -14,16 +14,16 @@
register: k3s_status
- name: Install primary k3s server
include_tasks: primary_installation.yaml
include_tasks: primary_installation.yml
when: ansible_default_ipv4.address == k3s_primary_server_ip
- name: Get token from primary k3s server
include_tasks: pull_token.yaml
include_tasks: pull_token.yml
- name: Install seconary k3s servers
include_tasks: secondary_installation.yaml
include_tasks: secondary_installation.yml
when: ansible_default_ipv4.address != k3s_primary_server_ip
- name: Set kubeconfig on localhost
include_tasks: create_kubeconfig.yaml
include_tasks: create_kubeconfig.yml
when: ansible_default_ipv4.address == k3s_primary_server_ip

View File

@@ -1 +1 @@
k3s_server_token_vault_file: ../vars/group_vars/k3s/secrets_token.yaml
k3s_server_token_vault_file: ../vars/group_vars/k3s/secrets_token.yml

View File

@@ -1,5 +0,0 @@
---
- name: Install dependencies
ansible.builtin.include_tasks: requirements.yaml
- name: Install k3s
ansible.builtin.include_tasks: installation.yaml

View File

@@ -0,0 +1,5 @@
---
- name: Install dependencies
ansible.builtin.include_tasks: requirements.yml
- name: Install k3s
ansible.builtin.include_tasks: installation.yml

View File

@@ -33,7 +33,7 @@
- name: Apply ArgoCD Ingress
kubernetes.core.k8s:
definition: "{{ lookup('ansible.builtin.template', 'ingress.yaml.j2') | from_yaml }}"
definition: "{{ lookup('ansible.builtin.template', 'ingress.yml.j2') | from_yaml }}"
state: present
namespace: "{{ argocd_namespace }}"
register: apply_manifests
@@ -53,7 +53,7 @@
- name: Apply ArgoCD repository
kubernetes.core.k8s:
definition: "{{ lookup('ansible.builtin.template', 'repository.yaml.j2') | from_yaml }}"
definition: "{{ lookup('ansible.builtin.template', 'repository.yml.j2') | from_yaml }}"
state: present
namespace: "{{ argocd_namespace }}"
register: apply_manifests
@@ -63,7 +63,7 @@
- name: Apply ArgoCD Root Application
kubernetes.core.k8s:
definition: "{{ lookup('ansible.builtin.template', 'root_application.yaml.j2') | from_yaml }}"
definition: "{{ lookup('ansible.builtin.template', 'root_application.yml.j2') | from_yaml }}"
state: present
namespace: "{{ argocd_namespace }}"
register: apply_manifests

View File

@@ -1,6 +0,0 @@
- name: Get Version
ansible.builtin.include_tasks: get_version.yaml
- name: Install
ansible.builtin.include_tasks: install.yaml
- name: Setup Service
ansible.builtin.include_tasks: systemd.yaml

View File

@@ -0,0 +1,6 @@
- name: Get Version
ansible.builtin.include_tasks: get_version.yml
- name: Install
ansible.builtin.include_tasks: install.yml
- name: Setup Service
ansible.builtin.include_tasks: systemd.yml

View File

@@ -2,6 +2,11 @@
This role facilitates the management of Proxmox VE resources, including virtual machines (VMs) and LXC containers. It automates the setup of Proxmox nodes and the creation, configuration, and destruction of guests.
## Requirements
- `community.general.proxmox_vm_info`
- `community.general.proxmox_kvm`
## Role Variables
| Variable | Description | Default Value |

View File

@@ -1,10 +1,11 @@
#!/bin/bash
# Configuration
VM_ID=$1
TARGET_IP=$2
VM_ID=303
TARGET_IP="192.168.20.36" # Replace with the IP of your VM
PORT=22
LOG_FILE="/var/log/vm_monitor_${VM_ID}.log"
CHECK_INTERVAL=300 # 5 minutes in seconds
LOG_FILE="/var/log/vm_monitor.log"
# Function to log messages
log_message() {
@@ -64,12 +65,19 @@ restart_vm() {
log_message "VM $VM_ID has been restarted."
}
# Main execution
# log_message "Starting monitoring of VM $VM_ID on port $PORT..."
# Main loop
log_message "Starting monitoring of VM $VM_ID on port $PORT..."
log_message "Press Ctrl+C to exit."
# Check if port 22 is open
if ! check_port; then
restart_vm
# else
# log_message "Port $PORT is reachable. VM is running normally."
fi
while true; do
# Check if port 22 is open
if ! check_port; then
restart_vm
else
log_message "Port $PORT is reachable. VM is running normally."
fi
# Wait for the next check
log_message "Sleeping for $CHECK_INTERVAL seconds..."
sleep $CHECK_INTERVAL
done

View File

@@ -1,8 +0,0 @@
---
- name: Prepare Localhost
ansible.builtin.include_tasks: ./01_setup_localhost.yaml
when: is_localhost
- name: Prepare Localhost
ansible.builtin.include_tasks: ./05_setup_node.yaml
when: is_proxmox_node

View File

@@ -0,0 +1,8 @@
---
- name: Prepare Localhost
ansible.builtin.include_tasks: ./01_setup_localhost.yml
when: is_localhost
- name: Prepare Localhost
ansible.builtin.include_tasks: ./05_setup_node.yml
when: is_proxmox_node

View File

@@ -7,4 +7,4 @@
loop: "{{ proxmox_node_dependencies }}"
- name: Ensure Harware Acceleration on node
ansible.builtin.include_tasks: 06_hardware_acceleration.yaml
ansible.builtin.include_tasks: 06_hardware_acceleration.yml

View File

@@ -23,7 +23,6 @@
vfio_virqfd
create: true
backup: true
mode: 644
register: vfio_result
- name: Update initramfs

View File

@@ -6,7 +6,7 @@
mode: "0600"
- name: Update Vault data
ansible.builtin.include_tasks: 15_create_secret.yaml
ansible.builtin.include_tasks: 15_create_secret.yml
loop: "{{ vms | map(attribute='name') }}"
loop_control:
loop_var: "vm_name"

View File

@@ -1,6 +1,7 @@
---
- name: Decrypt vm vault file
ansible.builtin.shell: cd ../; ansible-vault decrypt "./playbooks/{{ proxmox_vault_file }}"
ignore_errors: true
no_log: true
- name: Load existing vault content
@@ -42,4 +43,5 @@
- name: Encrypt vm vault file
ansible.builtin.shell: cd ../; ansible-vault encrypt "./playbooks/{{ proxmox_vault_file }}"
ignore_errors: true
no_log: true

View File

@@ -1,6 +1,6 @@
---
- name: Download Cloud Init Isos
ansible.builtin.include_tasks: 42_download_isos.yaml
ansible.builtin.include_tasks: 42_download_isos.yml
loop: "{{ proxmox_cloud_init_images | dict2items | map(attribute='value') }}"
loop_control:
loop_var: distro

View File

@@ -5,13 +5,13 @@
name: vm_secrets
# - name: Destroy vms (Only during rapid testing)
# ansible.builtin.include_tasks: 54_destroy_vm.yaml
# ansible.builtin.include_tasks: 54_destroy_vm.yml
# loop: "{{ vms }}"
# loop_control:
# loop_var: "vm"
- name: Create vms
ansible.builtin.include_tasks: 55_create_vm.yaml
ansible.builtin.include_tasks: 55_create_vm.yml
loop: "{{ vms }}"
loop_control:
loop_var: "vm"

View File

@@ -1,6 +1,6 @@
---
- name: Gather info about VM
community.proxmox.proxmox_vm_info:
community.general.proxmox_vm_info:
api_user: "{{ proxmox_api_user }}@pam"
api_token_id: "{{ proxmox_api_token_id }}"
api_token_secret: "{{ proxmox_api_token_secret }}"
@@ -9,7 +9,7 @@
register: vm_info
- name: Stop VM
community.proxmox.proxmox_kvm:
community.general.proxmox_kvm:
api_user: "{{ proxmox_api_user }}@pam"
api_token_id: "{{ proxmox_api_token_id }}"
api_token_secret: "{{ proxmox_api_token_secret }}"
@@ -21,7 +21,7 @@
when: vm_info.proxmox_vms | length > 0
- name: Destroy VM
community.proxmox.proxmox_kvm:
community.general.proxmox_kvm:
api_user: "{{ proxmox_api_user }}@pam"
api_token_id: "{{ proxmox_api_token_id }}"
api_token_secret: "{{ proxmox_api_token_secret }}"

View File

@@ -1,6 +1,6 @@
---
- name: Create VM
community.proxmox.proxmox_kvm:
community.general.proxmox_kvm:
api_user: "{{ proxmox_api_user }}@pam"
api_token_id: "{{ proxmox_api_token_id }}"
api_token_secret: "{{ proxmox_api_token_secret }}"
@@ -27,5 +27,5 @@
register: proxmox_deploy_info
- name: Provision created VM
ansible.builtin.include_tasks: 56_provision_new_vm.yaml
ansible.builtin.include_tasks: 56_provision_new_vm.yml
when: proxmox_deploy_info.changed

View File

@@ -17,7 +17,6 @@
ansible.builtin.shell: |
qm set {{ vm.vmid }} --scsi0 {{ proxmox_storage }}:{{ vm.vmid }}/vm-{{ vm.vmid }}-disk-0.raw --ide2 {{ proxmox_storage }}:cloudinit --boot order=scsi0
delegate_to: "{{ vm.node }}"
changed_when: true
- name: Resize scsi0 disk if needed
ansible.builtin.shell: |
@@ -25,7 +24,7 @@
delegate_to: "{{ vm.node }}"
- name: Start VM
community.proxmox.proxmox_kvm:
community.general.proxmox_kvm:
api_user: "{{ proxmox_api_user }}@pam"
api_token_id: "{{ proxmox_api_token_id }}"
api_token_secret: "{{ proxmox_api_token_secret }}"
@@ -35,14 +34,14 @@
state: started
- name: Retry stopping VM
ansible.builtin.include_tasks: ./57_stop_and_verify_vm.yaml
ansible.builtin.include_tasks: ./57_stop_and_verify_vm.yml
- name: Pause for 5 seconds for api
ansible.builtin.pause:
seconds: 5
- name: Start VM
community.proxmox.proxmox_kvm:
community.general.proxmox_kvm:
api_user: "{{ proxmox_api_user }}@pam"
api_token_id: "{{ proxmox_api_token_id }}"
api_token_secret: "{{ proxmox_api_token_secret }}"
@@ -87,25 +86,3 @@
# create: true
# state: present
# delegate_to: localhost
- name: Copy VM check script to node
ansible.builtin.copy:
src: check_proxmox_vm.sh
dest: /usr/local/bin/check_proxmox_vm.sh
mode: '0755'
delegate_to: "{{ vm.node }}"
- name: Creates PATH-entry for crontab
ansible.builtin.cron:
name: PATH
env: true
job: /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
delegate_to: "{{ vm.node }}"
- name: Schedule VM check script
ansible.builtin.cron:
name: "Check VM {{ vm.name }}"
job: "/usr/local/bin/check_proxmox_vm.sh {{ vm.vmid }} {{ vm_found_ip }}"
minute: "*/5"
delegate_to: "{{ vm.node }}"

View File

@@ -5,7 +5,7 @@
retry_count: "{{ 0 if retry_count is undefined else retry_count | int + 1 }}"
- name: Stop VM
community.proxmox.proxmox_kvm:
community.general.proxmox_kvm:
api_user: "{{ proxmox_api_user }}@pam"
api_token_id: "{{ proxmox_api_token_id }}"
api_token_secret: "{{ proxmox_api_token_secret }}"
@@ -16,7 +16,7 @@
force: true
- name: Wait until VM is fully stopped
community.proxmox.proxmox_vm_info:
community.general.proxmox_vm_info:
api_user: "{{ proxmox_api_user }}@pam"
api_token_id: "{{ proxmox_api_token_id }}"
api_token_secret: "{{ proxmox_api_token_secret }}"
@@ -36,4 +36,4 @@
seconds: 5
- name: "Failed to stop VM - Retrying..."
include_tasks: ./57_stop_and_verify_vm.yaml
include_tasks: ./57_stop_and_verify_vm.yml

View File

@@ -5,7 +5,7 @@
name: vm_secrets
- name: Create vms
ansible.builtin.include_tasks: 65_create_container.yaml
ansible.builtin.include_tasks: 65_create_container.yml
loop: "{{ lxcs }}"
loop_control:
loop_var: "container"

View File

@@ -1,19 +0,0 @@
---
- name: Prepare Machines
ansible.builtin.include_tasks: 00_setup_machines.yaml
- name: Create VM vault
ansible.builtin.include_tasks: 10_create_secrets.yaml
when: is_localhost
- name: Prime node for VM
ansible.builtin.include_tasks: 40_prepare_vm_creation.yaml
when: is_proxmox_node
- name: Create VMs
ansible.builtin.include_tasks: 50_create_vms.yaml
when: is_localhost
- name: Create LXC containers
ansible.builtin.include_tasks: 60_create_containers.yaml
when: is_localhost

View File

@@ -0,0 +1,19 @@
---
- name: Prepare Machines
ansible.builtin.include_tasks: 00_setup_machines.yml
- name: Create VM vault
ansible.builtin.include_tasks: 10_create_secrets.yml
when: is_localhost
- name: Prime node for VM
ansible.builtin.include_tasks: 40_prepare_vm_creation.yml
when: is_proxmox_node
- name: Create VMs
ansible.builtin.include_tasks: 50_create_vms.yml
when: is_localhost
- name: Create LXC containers
ansible.builtin.include_tasks: 60_create_containers.yml
when: is_localhost

View File

@@ -3,7 +3,7 @@ proxmox_creator: ansible
proxmox_storage: proxmox
proxmox_vault_file: ../vars/group_vars/proxmox/secrets_vm.yaml
proxmox_vault_file: ../vars/group_vars/proxmox/secrets_vm.yml
proxmox_secrets_prefix: secrets_vm
proxmox_cloud_init_images:
debian:

View File

@@ -25,7 +25,7 @@
become: true
- name: Build Custom Caddy with netcup
ansible.builtin.command: xcaddy build --with github.com/caddy-dns/cloudflare
ansible.builtin.command: xcaddy build --with github.com/caddy-dns/netcup
environment:
PATH: "{{ ansible_env.PATH }}:/usr/local/go/bin"
register: xcaddy_build

View File

@@ -1,14 +0,0 @@
---
# - name: Setup DNS on Netcup
# community.general.netcup_dns:
# api_key: "{{ netcup_api_key }}"
# api_password: "{{ netcup_api_password }}"
# customer_id: "{{ netcup_customer_id }}"
# domain: "{{ domain }}"
# name: "{{ service.name }}"
# type: "A"
# value: "{{ hostvars['docker-lb'].ansible_default_ipv4.address }}"
# loop: "{{ services }}"
# loop_control:
# loop_var: service
# delegate_to: localhost

Some files were not shown because too many files have changed in this diff Show More