From 14a6a2ab3f2febf91f147242eb8be1bd53806264 Mon Sep 17 00:00:00 2001 From: g33kex Date: Sat, 23 Jul 2022 01:37:05 +0200 Subject: [PATCH] added role for proxmox and zfs --- books/hypervisor.yml | 7 +++++ host_vars/vanadium/main.yml | 20 ++++++++++++++ roles/proxmox/handlers/main.yml | 6 +++++ roles/proxmox/tasks/main.yml | 19 +++++++++++++ roles/zfs/examples/vars.yml | 40 ++++++++++++++++++++++++++++ roles/zfs/tasks/create_pool.yml | 47 +++++++++++++++++++++++++++++++++ roles/zfs/tasks/main.yml | 8 ++++++ 7 files changed, 147 insertions(+) create mode 100755 books/hypervisor.yml create mode 100644 roles/proxmox/handlers/main.yml create mode 100644 roles/proxmox/tasks/main.yml create mode 100644 roles/zfs/examples/vars.yml create mode 100644 roles/zfs/tasks/create_pool.yml create mode 100644 roles/zfs/tasks/main.yml diff --git a/books/hypervisor.yml b/books/hypervisor.yml new file mode 100755 index 0000000..bdeceee --- /dev/null +++ b/books/hypervisor.yml @@ -0,0 +1,7 @@ +#!/usr/bin/env ansible-playbook +--- + +- hosts: proxmox + roles: + # - proxmox + - zfs diff --git a/host_vars/vanadium/main.yml b/host_vars/vanadium/main.yml index 0884bda..a7373f2 100644 --- a/host_vars/vanadium/main.yml +++ b/host_vars/vanadium/main.yml @@ -24,3 +24,23 @@ interfaces: ipv4_forwarding: false ipv6_forwarding: false + +## Disks + +zfs_pools: + - name: tank0 + vdevs: + - type: raidz1 + disks: + - sda + - sdb + - sdc + - sdd + - sde + properties: + autoreplace: 'on' + datasets: + - name: iso_images + - name: containers + - name: vms + diff --git a/roles/proxmox/handlers/main.yml b/roles/proxmox/handlers/main.yml new file mode 100644 index 0000000..971e85a --- /dev/null +++ b/roles/proxmox/handlers/main.yml @@ -0,0 +1,6 @@ +--- + +- name: Restart pveproxy + systemd: + name: pveproxy + state: restarted diff --git a/roles/proxmox/tasks/main.yml b/roles/proxmox/tasks/main.yml new file mode 100644 index 0000000..a6286be --- /dev/null +++ b/roles/proxmox/tasks/main.yml @@ -0,0 +1,19 @@ +--- + +- name: Remove entreprise proxmox repository + apt_repository: + repo: "deb https://enterprise.proxmox.com/debian/pve {{ ansible_facts['lsb']['codename'] }} pve-enterprise" + state: absent +- name: Add non subscription proxmox repository + apt_repository: + repo: "deb [arch=amd64] http://download.proxmox.com/debian/pve {{ ansible_facts['lsb']['codename'] }} pve-no-subscription" + filename: pve-no-subscription + state: present + +- name: Remove No Subscription Message + replace: + path: /usr/share/perl5/PVE/API2/Subscription.pm + regexp: 'NotFound' + replace: 'Active' + notify: Restart pveproxy + diff --git a/roles/zfs/examples/vars.yml b/roles/zfs/examples/vars.yml new file mode 100644 index 0000000..e598c1d --- /dev/null +++ b/roles/zfs/examples/vars.yml @@ -0,0 +1,40 @@ +--- + +zfs_pools: + - name: prod_pool + mountpoint: none + vdevs: + - type: raidz1 + disks: + - ada0 + - ada1 + - ada2 + - type: mirror + disks: + - ada3 + - ada4 + - type: mirror + disks: + - ada5 + - ada6 + spares: + - ada7 + - ada8 + properties: + autoreplace: on + datasets: + - name: dataset0 + properties: + quota: '1T' + mountpoint: '/mnt' + - name: non_redondant_pool + disks: + - ada9 + - ada10 + datasets: + - name: dataset1 + properties: + quota: '50G' + - name: dataset2 + - name: dataset3 + diff --git a/roles/zfs/tasks/create_pool.yml b/roles/zfs/tasks/create_pool.yml new file mode 100644 index 0000000..ec6554d --- /dev/null +++ b/roles/zfs/tasks/create_pool.yml @@ -0,0 +1,47 @@ +--- + +- name: Check if pool exists + command: zpool list -Ho name {{ pool.name }} + changed_when: false + failed_when: false + check_mode: no + register: pool_exists + +- name: Create pool + check_mode: no + command: >- + zpool create + {{ '-n' if ansible_check_mode else '' }} + {{ '-m ' + pool.mountpoint if pool.mountpoint is defined else '' }} + {{ pool.name }} + {% if pool.vdevs is defined %} + {% for vdev in pool.vdevs %} + {{ vdev.type }} + {% for disk in vdev.disks %} + {{ disk }} + {% endfor %} + {% endfor %} + {% if pool.spares is defined %} + spare + {% for disk in pool.spares %} + {{ disk }} + {% endfor %} + {% endif %} + {% else %} + {% for disk in pool.disks %} + {{ disk }} + {% endfor %} + {% endif %} + {% if pool.properties is defined %} + {% for property in pool.properties | dict2items %} + -o {{ property.key }}={{ property.value }} + {% endfor %} + {% endif %} + when: pool_exists.rc == 1 + +- name: Create datasets in the pool + community.general.zfs: + name: "{{ pool.name }}/{{ item.name }}" + extra_zfs_properties: "{{ item.properties | default(omit) }}" + state: present + loop: "{{ pool.datasets | default(omit) }}" diff --git a/roles/zfs/tasks/main.yml b/roles/zfs/tasks/main.yml new file mode 100644 index 0000000..9ec9b83 --- /dev/null +++ b/roles/zfs/tasks/main.yml @@ -0,0 +1,8 @@ +--- + +- name: Create ZFS pools + include_tasks: create_pool.yml + loop: "{{ zfs_pools }}" + loop_control: + loop_var: pool +