From b02f066646be57cab957578f2f6d7b702ee56ea4 Mon Sep 17 00:00:00 2001 From: Murat Aybars <39916128+aybarsm@users.noreply.github.com> Date: Sat, 30 Nov 2024 10:22:28 +0000 Subject: [PATCH] Proxmox freenas tasks #3 --- roles/proxmox/defaults/main.yml | 37 +----- roles/proxmox/tasks/freenas.yml | 161 ++++++++++-------------- roles/proxmox/tasks/main.yml | 18 +-- roles/proxmox/tasks/package_manager.yml | 2 - roles/proxmox/vars/main.yml | 4 + 5 files changed, 82 insertions(+), 140 deletions(-) diff --git a/roles/proxmox/defaults/main.yml b/roles/proxmox/defaults/main.yml index 3e1b57e..e5ffd5b 100644 --- a/roles/proxmox/defaults/main.yml +++ b/roles/proxmox/defaults/main.yml @@ -10,38 +10,6 @@ proxmox__manage_users: false proxmox__manage_acls: false proxmox__remove_subscription_warning: false -proxmox__use_freenas: false - -proxmox__freenas: - remote_src: true - git: - repo: https://github.com/TheGrandWazoo/freenas-proxmox - clone: true - file_mgr: - - entry__type: patch - src: pve-manager/js/pvemanagerlib.js.patch - dest: /usr/share/pve-manager/js/pvemanagerlib.js - entry__handlers: restart_pve_services - - entry__type: patch - src: pve-manager/js/pvemanagerlib.js.patch - dest: /usr/share/pve-manager/js/pvemanagerlib.js - entry__handlers: restart_pve_services - - entry__type: patch - src: pve-manager/js/pvemanagerlib.js.patch - dest: /usr/share/pve-manager/js/pvemanagerlib.js - entry__handlers: restart_pve_services - - entry__type: patch - src: pve-manager/js/pvemanagerlib.js.patch - dest: /usr/share/pve-manager/js/pvemanagerlib.js - entry__handlers: restart_pve_services - - entry__type: copy - src: perl5/PVE/Storage/LunCmd/FreeNAS.pm - dest: /usr/share/perl5/PVE/Storage/LunCmd/FreeNAS.pm - entry__handlers: restart_pve_services - - entry__type: handlers - name: restart_pve_services - condition: any - handlers: "{{ {'name': ['pvedaemon', 'pveproxy', 'pvestatd', 'pve-ha-lrm', 'pve-ha-crm']} | aybarsm.helper.to_list_of_dicts({'entry__type': 'service', 'state': 'restarted'}) }}" proxmox__clusters: {} @@ -100,6 +68,5 @@ proxmox__purposes: packages: ['zfsutils-linux', 'zfs-initramfs', 'zfs-zed'] freenas: packages: ['librest-client-perl', 'git', 'patch'] - params: - task_file: freenas.yml - remote_src: true \ No newline at end of file + task_file: freenas.yml + remote_src: true \ No newline at end of file diff --git a/roles/proxmox/tasks/freenas.yml b/roles/proxmox/tasks/freenas.yml index 7638fba..7fdce41 100644 --- a/roles/proxmox/tasks/freenas.yml +++ b/roles/proxmox/tasks/freenas.yml @@ -1,99 +1,72 @@ --- -- name: Apply Proxmox Freenas Changes - block: - - name: Set Facts for Proxmox Freenas - ansible.builtin.set_fact: - freenas_remote_src: "{{ proxmox__purposes.freenas.params.remote_src | default(true) }}" - freenas_delegate: "{{ inventory_hostname if freenas_remote_src else 'localhost' }}" - register: proxmox__freenas__set_fact +- name: Set Facts for Proxmox Freenas + ansible.builtin.set_fact: + freenas_remote_src: "{{ freenas_remote_src }}" + freenas_delegate: "{{ inventory_hostname if freenas_remote_src else 'localhost' }}" + vars: + freenas_remote_src: "{{ __proxmox__purposes.freenas.remote_src | default(proxmox__purposes.freenas.remote_src) }}" + register: proxmox__freenas__set_fact - - name: Create Temp Directory for Git Repo - ansible.builtin.tempfile: - state: directory - register: proxmox__freenas__temp_dir - delegate_to: "{{ freenas_delegate }}" - - - name: Debug - ansible.builtin.debug: - msg: - proxmox__freenas__temp_dir: "{{ proxmox__freenas__temp_dir }}" - delegate_to: localhost +- name: Create Temp Directory for Git Repo + ansible.builtin.tempfile: + state: directory + register: proxmox__freenas__temp_dir + delegate_to: "{{ freenas_delegate }}" - - name: Include Git Task to Clone Freenas Repo - ansible.builtin.include_role: - name: aybarsm.helper.misc - tasks_from: git.yml - vars: - misc__git: - repo: https://github.com/TheGrandWazoo/freenas-proxmox - clone: true - dest: proxmox__freenas__temp_dir.path - register: proxmox__freenas__git - delegate_to: "{{ freenas_delegate }}" - when: proxmox__freenas__temp_dir.path is defined - - - name: Include File Manager Role to Apply Changes - ansible.builtin.include_role: - name: aybarsm.helper.file_mgr - vars: - file_mgr__role_enabled: true - file_mgr__no_log: false - file_mgr__use_only: ['host'] - file_mgr__host: - - entry__type: patch - src: "{{ proxmox__freenas__temp_dir.path }}/pve-manager/js/pvemanagerlib.js.patch" - # dest: /usr/share/pve-manager/js/pvemanagerlib.js - dest: /root/pve_freenas/pvemanagerlib.js - backup: true - remote_src: "{{ freenas_remote_src }}" - entry__handlers: restart_pve_services - - entry__type: patch - src: "{{ proxmox__freenas__temp_dir.path }}/perl5/PVE/Storage/ZFSPlugin.pm.patch" - dest: /root/pve_freenas/ZFSasdsadsaPlugin.pm - # dest: /root/pve_freenas/ZFSPlugin.pm - # dest: /usr/share/perl5/PVE/Storage/ZFSPlugin.pm - backup: true - remote_src: "{{ freenas_remote_src }}" - entry__handlers: restart_pve_services - - entry__type: patch - src: "{{ proxmox__freenas__temp_dir.path }}/pve-docs/api-viewer/apidoc.js.patch" - # dest: /usr/share/pve-docs/api-viewer/apidoc.js - dest: /root/pve_freenas/apidoc.js - backup: true - remote_src: "{{ freenas_remote_src }}" - entry__handlers: restart_pve_services - - entry__type: copy - src: "{{ proxmox__freenas__temp_dir.path }}/perl5/PVE/Storage/LunCmd/FreeNAS.pm" - # dest: /usr/share/perl5/PVE/Storage/LunCmd/FreeNAS.pm - dest: /root/pve_freenas/FreeNAS.pm - backup: true - remote_src: "{{ freenas_remote_src }}" - entry__handlers: restart_pve_services - - entry__type: handlers - name: restart_pve_services - condition: any - handlers: "{{ {'name': ['pvedaemon', 'pveproxy', 'pvestatd', 'pve-ha-lrm', 'pve-ha-crm']} | - aybarsm.helper.to_list_of_dicts({'entry__type': 'service', 'state': 'restarted'}) }}" - register: proxmox__freenas__patch - when: proxmox__freenas__temp_dir.path is defined - - rescue: - - name: Restate Backup Files on Error - ansible.builtin.file: - src: "{{ item.entry__task.backup_file }}" - dest: "{{ item.entry__task.dest }}" - loop: "{{ backup_files }}" - vars: - backup_files: "{{ file_mgr__items | selectattr('entry__task.backup_file', 'defined') }}" - when: backup_files | length > 0 - register: proxmox__freenas__restore +- name: Include Git Task to Clone Freenas Repo + ansible.builtin.include_role: + name: aybarsm.helper.misc + tasks_from: ansible/builtin/git.yml + vars: + misc__item: + repo: https://github.com/TheGrandWazoo/freenas-proxmox + clone: true + dest: "{{ proxmox__freenas__temp_dir.path }}" + __module: + delegate_to: "{{ freenas_delegate }}" + register: proxmox__freenas__git + when: proxmox__freenas__temp_dir.path is defined - always: - - name: Remove Temp Directory - ansible.builtin.file: - path: "{{ proxmox__freenas__temp_dir.path }}" - state: absent - delegate_to: "{{ freenas_delegate }}" - when: proxmox__freenas__temp_dir.path is defined - +- name: Include File Manager Role to Apply Changes + ansible.builtin.include_role: + name: aybarsm.helper.file_mgr + vars: + file_mgr__role_enabled: true + file_mgr__strict_safe: true + file_mgr__no_log: false + file_mgr__use_only: ['host'] + file_mgr__host: + - entry__type: patch + src: "{{ proxmox__freenas__temp_dir.path }}/pve-manager/js/pvemanagerlib.js.patch" + dest: /usr/share/pve-manager/js/pvemanagerlib.js + remote_src: "{{ freenas_remote_src }}" + entry__handlers: restart_pve_services + - entry__type: patch + src: "{{ proxmox__freenas__temp_dir.path }}/perl5/PVE/Storage/ZFSPlugin.pm.patch" + dest: /usr/share/perl5/PVE/Storage/ZFSPlugin.pm + remote_src: "{{ freenas_remote_src }}" + entry__handlers: restart_pve_services + - entry__type: patch + src: "{{ proxmox__freenas__temp_dir.path }}/pve-docs/api-viewer/apidoc.js.patch" + dest: /usr/share/pve-docs/api-viewer/apidoc.js + remote_src: "{{ freenas_remote_src }}" + entry__handlers: restart_pve_services + - entry__type: copy + src: "{{ proxmox__freenas__temp_dir.path }}/perl5/PVE/Storage/LunCmd/FreeNAS.pm" + dest: /usr/share/perl5/PVE/Storage/LunCmd/FreeNAS.pm + remote_src: "{{ freenas_remote_src }}" + entry__handlers: restart_pve_services + - entry__type: handlers + name: restart_pve_services + condition: any + handlers: "{{ {'name': ['pvedaemon', 'pveproxy', 'pvestatd', 'pve-ha-lrm', 'pve-ha-crm']} | + aybarsm.helper.to_list_of_dicts({'entry__type': 'service', 'state': 'restarted'}) }}" + register: proxmox__freenas__patch + when: proxmox__freenas__temp_dir.path is defined +- name: Remove Git Repo Temp Directory + ansible.builtin.file: + path: "{{ proxmox__freenas__temp_dir.path }}" + state: absent + delegate_to: "{{ freenas_delegate }}" + when: proxmox__freenas__temp_dir.path is defined \ No newline at end of file diff --git a/roles/proxmox/tasks/main.yml b/roles/proxmox/tasks/main.yml index 36bf4f5..be754bb 100644 --- a/roles/proxmox/tasks/main.yml +++ b/roles/proxmox/tasks/main.yml @@ -1,10 +1,10 @@ --- -- name: Include Package Manager Tasks - ansible.builtin.include_tasks: - name: package_manager.yml - when: - - proxmox__role_enabled - - __proxmox__pkg_mgr | length > 0 +# - name: Include Package Manager Tasks +# ansible.builtin.include_tasks: +# file: package_manager.yml +# when: +# - proxmox__role_enabled +# - __proxmox__pkg_mgr | length > 0 # - name: Include Datacenter Tasks # ansible.builtin.include_tasks: @@ -23,10 +23,10 @@ # when: # - proxmox__role_enabled # - proxmox__remove_subscription_warning | bool - + - name: Include Freenas Tasks ansible.builtin.include_tasks: - file: "{{ proxmox__purposes.freenas.params.task_file }}" + file: "{{ __proxmox__purposes.freenas.task_file | default(proxmox__purposes.freenas.task_file) }}" when: - proxmox__role_enabled - - proxmox__all | selectattr('entry__type', 'eq', 'purpose') | selectattr('name', 'eq', 'freenas') | length > 0 \ No newline at end of file + - __proxmox__purposes.freenas is defined \ No newline at end of file diff --git a/roles/proxmox/tasks/package_manager.yml b/roles/proxmox/tasks/package_manager.yml index 180cc95..02cfbf8 100644 --- a/roles/proxmox/tasks/package_manager.yml +++ b/roles/proxmox/tasks/package_manager.yml @@ -9,7 +9,5 @@ pkg_mgr__package_module: specific pkg_mgr__upgrade_strategy: never pkg_mgr__use_only: ['host'] - pkg_mgr__default: [] - pkg_mgr__group: [] pkg_mgr__host: "{{ __proxmox__pkg_mgr }}" register: proxmox__pkg_mgr \ No newline at end of file diff --git a/roles/proxmox/vars/main.yml b/roles/proxmox/vars/main.yml index fce21ce..a2ed589 100644 --- a/roles/proxmox/vars/main.yml +++ b/roles/proxmox/vars/main.yml @@ -1,4 +1,8 @@ proxmox__all: "{{ {'host': proxmox__host, 'group': proxmox__group, 'default': proxmox__default} | aybarsm.helper.role_items(only=proxmox__use_only) }}" +__proxmox__purposes: "{{ { + 'key': (proxmox__all | selectattr('entry__type', 'eq', 'purpose') | map(attribute='name')), + 'value': (proxmox__all | selectattr('entry__type', 'eq', 'purpose') | map('aybarsm.helper.all_except', ['entry__type', 'name'])) + } | aybarsm.helper.to_list_of_dicts() | items2dict }}" __proxmox__cluster_members_query: '*.{ host: inventory_hostname,