patrick 4f09e886c2 feat(proxmox_lxc_provision): support custom bridge, interface name, and VLAN tag
The bridge (vmbr0) and interface name (eth0) were previously hardcoded
in the netif string, and there was no way to set an 802.1Q VLAN tag.
Expose lxc_bridge, lxc_iface_name, and lxc_vlan_tag (optional) so
containers can be attached to non-default bridges or tagged into a VLAN
without forking the role.

Also drop the misleading 'lxc_ipv6 | default(omit)' filter — default(omit)
does not produce omission inside a string context, and lxc_ipv6 always
has a default of 'auto' in defaults/main.yml.
2026-06-27 21:23:14 -04:00

Infrastructure Collection

Ansible collection for infrastructure management, system configuration, and virtualization.

Roles

proxmox_lxc_provision

Manages Proxmox LXC containers with comprehensive lifecycle operations.

  • Create, clone, start, stop, and delete containers
  • Template conversion and configuration editing
  • Post-provisioning tasks and health checks

system_setup

Performs initial system configuration for new servers.

  • Creates admin user with SSH key authentication
  • Hardens SSH configuration
  • Installs essential packages
  • Optional passwordless sudo configurations

system_maintenance

Updates packages and handles maintenance across multiple distributions.

  • Multi-distribution support (Debian/Ubuntu/Alpine)
  • Package updates and cleanup
  • Automatic reboot handling when required

nvidia_drivers

Installs NVIDIA drivers and CUDA runtime with proper idempotency and error handling.

  • Supports Debian/Ubuntu with automatic OS detection
  • Choice between proprietary and open-source drivers
  • Post-installation verification and cleanup
  • Architecture detection (x86_64/arm64)

Installation

ansible-galaxy collection install patrickj.infrastructure

Quick Start

Proxmox API Configuration

Set up your Proxmox API connection variables in group vars:

# group_vars/all.yml
proxmox_api_host: "10.0.1.1"
proxmox_api_port: 8006
proxmox_api_user: "automation@pve"
proxmox_api_token_id: "mytoken"
proxmox_api_token_secret: "{{ vault_proxmox_token }}"
proxmox_api_validate_certs: false
proxmox_node: "pve01"

Basic Proxmox LXC Container Setup

- name: Create and start an LXC container
  hosts: localhost
  connection: local
  vars:
    lxc_vmid: 100
    lxc_hostname: new-debian-container
    lxc_template: "local:vztmpl/debian-12_amd64.tar.zst"
    lxc_ipv4: "10.0.0.99/24"
  roles:
    - role: proxmox_lxc_provision

- name: Configure the LXC container
  hosts: new-debian-container
  become: yes
  tasks:
    - include_role:
        name: patrickj.infrastructure.system_setup
      vars:
        password: "{{ admin_password }}"
        ssh_pubkey_file: "~/.ssh/id_rsa.pub"

    - include_role:
        name: patrickj.infrastructure.nvidia_drivers
      vars:
        nvidia_install_kernel_modules: true
      when: gpu_server | default(false)

Requirements

  • Ansible >= 2.12
  • Root/sudo privileges on target hosts
  • community.general collection
  • community.proxmox collection
  • ansible.posix collection

License

MIT

Author

Patrick Jaroszewski

S
Description
A few infrastructure related Ansible roles
Readme 105 KiB
Languages
Jinja 100%