Skip to content

Commit

Permalink
Proxmox role pre sub tasks management variables
Browse files Browse the repository at this point in the history
  • Loading branch information
aybarsm committed Aug 31, 2024
1 parent fa6c3d1 commit 43d5448
Show file tree
Hide file tree
Showing 15 changed files with 282 additions and 67 deletions.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@ This code package is currently undergoing active and intensive development. It m

By using this package, you acknowledge and understand the potential risks and agree that you are using it at your own discretion and risk. Should any issues or damage arise from its use, the responsibility rests solely with the user. We strongly advise regularly backing up any data or systems that interact with this package and frequently checking for updates.

Your feedback and reports on any bugs or inconsistencies are greatly appreciated, but please proceed with caution.
Your feedback and reports on any bugs or inconsistencies are greatly appreciated, but please proceed with caution.

#TODO: Storage role
#TODO: Storage-ZFS tasks (Params: /sys/module/zfs/parameters/zfs_arc_max, Modprobe: /etc/modprobe.d/zfs.conf)
#TODO: Proxmox role -> Sysctl VM swappiness
2 changes: 1 addition & 1 deletion roles/auth/vars/main.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
auth__all: "{{ auth__host + auth__group + auth__default + (auth__external | default([])) }}"
auth__all: "{{ auth__host + auth__group + auth__default }}"

__auth__config:
authorized_keys:
Expand Down
5 changes: 4 additions & 1 deletion roles/network/vars/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,12 @@ __network__interfaces_configs: >-
{%- endfor -%}
{{ __configs_prepared }}
# Sort interfaces by name to avoid unneccessary changes
network__interfaces_all: "{{ __network__interfaces_configs |
community.general.lists_mergeby('name', recursive=true, list_merge='prepend') |
aybarsm.helper.unique_recursive(attributes='name', recurse='inet') | aybarsm.helper.unique_recursive(attributes='name', recurse='inet6') }}"
aybarsm.helper.unique_recursive(attributes='name', recurse='inet') |
aybarsm.helper.unique_recursive(attributes='name', recurse='inet6') |
sort(attribute='name') }}"

##### BEGIN: network sysctl vars
network__sysctl_all: "{{ (network__host + network__group + network__default) |
Expand Down
4 changes: 4 additions & 0 deletions roles/package_manager/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
package_manager__role_enabled: false

package_manager__manage_repo_keys: false
package_manager__manage_repos: false
package_manager__manage_packages: false

# Package Manager Strategy:
# Change the package manager strategy to use for the system i.e. ansible.builtin.apt vs ansible.builtin.package
# Available options: specific, common
Expand Down
1 change: 1 addition & 0 deletions roles/package_manager/tasks/deb_packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,6 @@
loop: "{{ package_manager__packages_all }}"
register: package_manager__packages_deb_apply
when:
- package_manager__manage_packages | default(false) | bool
- package_manager__packages_all | type_debug == 'list'
- package_manager__packages_all | length > 0
15 changes: 15 additions & 0 deletions roles/package_manager/tasks/deb_repo_keys.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
- name: Manage DEB repository keys via APT
become: true
ansible.builtin.apt_key:
state: "{{ item.state | default(omit) }}"
data: "{{ item.data | default(omit) }}"
file: "{{ item.file | default(omit) }}"
keyring: "{{ item.keyring | default(omit) }}"
url: "{{ item.url | default(omit) }}"
validate_certs: "{{ item.validate_certs | default(omit) | bool }}"
loop: "{{ package_manager__repo_keys_all }}"
register: package_manager__repo_keys_deb_apply
when:
- package_manager__repo_keys_all | type_debug == 'list'
- package_manager__repo_keys_all | length > 0
Original file line number Diff line number Diff line change
@@ -1,19 +1,4 @@
---
- name: Manage DEB repository keys via APT
become: true
ansible.builtin.apt_key:
state: "{{ item.state | default(omit) }}"
data: "{{ item.data | default(omit) }}"
file: "{{ item.file | default(omit) }}"
keyring: "{{ item.keyring | default(omit) }}"
url: "{{ item.url | default(omit) }}"
validate_certs: "{{ item.validate_certs | default(omit) | bool }}"
loop: "{{ package_manager__repo_keys_all }}"
register: package_manager__repo_keys_deb_apply
when:
- package_manager__repo_keys_all | type_debug == 'list'
- package_manager__repo_keys_all | length > 0

- name: Manage DEB repositories via APT
become: true
ansible.builtin.apt_repository:
Expand Down
42 changes: 29 additions & 13 deletions roles/package_manager/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,20 @@
- name: Load common variables structured on OS related variables
ansible.builtin.include_vars: common.yml

- name: Include DEB repository key and repository tasks (APT)
- name: Include DEB repository key tasks (APT)
ansible.builtin.include_tasks:
file: deb_repo.yml
file: deb_repo_keys.yml
when:
- package_manager__role_enabled | default(false) | bool
- package_manager__manage_repo_keys | default(false) | bool
- ansible_os_family | default('') | lower == 'debian'

- name: Include DEB repository tasks (APT)
ansible.builtin.include_tasks:
file: deb_repos.yml
when:
- package_manager__role_enabled | default(false) | bool
- package_manager__manage_repos | default(false) | bool
- ansible_os_family | default('') | lower == 'debian'

# TODO: Implement RPM repository tasks
Expand All @@ -24,22 +33,12 @@
# - package_manager__role_enabled | default(false) | bool
# - ansible_os_family | default('') | lower == 'redhat'

- name: Include upgrade tasks
ansible.builtin.include_tasks:
file: upgrade.yml
when:
- package_manager__role_enabled | default(false) | bool
- __package_manager__upgrade_execute.decision
vars:
ansible_callback_diy_runner_on_skipped_msg: |
skipping: [{{ inventory_hostname }}]
msg: {{ __package_manager__upgrade_execute.reason }}
- name: Include DEB package tasks (APT)
ansible.builtin.include_tasks:
file: deb_packages.yml
when:
- package_manager__role_enabled | default(false) | bool
- package_manager__manage_packages | default(false) | bool
- package_manager__package_strategy | lower == 'specific'
- ansible_os_family | default('') | lower == 'debian'

Expand All @@ -48,12 +47,29 @@
file: rpm_packages.yml
when:
- package_manager__role_enabled | default(false) | bool
- package_manager__manage_packages | default(false) | bool
- package_manager__package_strategy | lower == 'specific'
- ansible_os_family | default('') | lower == 'redhat'

- name: Include upgrade tasks
ansible.builtin.include_tasks:
file: upgrade.yml
when:
- package_manager__role_enabled | default(false) | bool
- __package_manager__upgrade_execute.decision

- name: Inform when upgrade skipped
ansible.builtin.debug:
msg: "{{ __package_manager__upgrade_execute.reason }}"
when:
- package_manager__role_enabled | default(false) | bool
- not __package_manager__upgrade_execute.decision
delegate_to: localhost

- name: Include common package manager tasks
ansible.builtin.include_tasks:
file: common_packages.yml
when:
- package_manager__role_enabled | default(false) | bool
- package_manager__manage_packages | default(false) | bool
- package_manager__package_strategy | lower == 'common'
51 changes: 51 additions & 0 deletions roles/package_manager/vars/common-pre.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package_manager__repo_keys_all: "{{ package_manager__all |
selectattr('type', 'defined') | selectattr('type', 'equalto', 'repo_key') |
default([]) }}"

package_manager__repos_all: "{{ package_manager__all |
selectattr('type', 'defined') | selectattr('type', 'equalto', 'repo') |
default([]) }}"

package_manager__repo_lists_all: "{{ package_manager__all |
selectattr('type', 'defined') | selectattr('type', 'equalto', 'repo_list') |
selectattr('dest', 'defined') | selectattr('src', 'defined') |
selectattr('source_module', 'defined') | selectattr('source_module', 'in', ['copy', 'template']) |
unique(attribute='dest') | default([]) }}"

package_manager__packages_all: "{{ package_manager__all |
selectattr('type', 'defined') | selectattr('type', 'equalto', 'package') |
default([]) }}"

__package_manager__clean_upgrade_modes: "{{ ['clean_'] | product(__package_manager__upgrade_modes) | map('join') }}"

__package_manager__repo_list_defaults: "{{ package_manager__repo_lists_all | selectattr('category', 'defined') | selectattr('category', 'equalto', 'default') | default([]) }}"
__package_manager__repo_list_defaults_copy: "{{ __package_manager__repo_list_defaults | selectattr('source_module', 'equalto', 'copy') | default([]) }}"
__package_manager__repo_list_defaults_template: "{{ __package_manager__repo_list_defaults | selectattr('source_module', 'equalto', 'template') | default([]) }}"

__package_manager__upgrade_clean: "{{ package_manager__upgrade_mode in __package_manager__clean_upgrade_modes }}"
__package_manager__upgrade_mode: "{{ package_manager__upgrade_mode | regex_replace('clean_', '') }}"
__package_manager__upgrade_clean_eligible: "{{ __package_manager__upgrade_clean and __package_manager__repo_list_defaults | length > 0 }}"

__package_manager__upgrade_once: "{{ package_manager__upgrade_strategy == 'once' }}"
__package_manager__upgrade_always: "{{ package_manager__upgrade_strategy == 'always' }}"
__package_manager__upgrade_never: "{{ package_manager__upgrade_strategy == 'never' }}"
__package_manager__upgrade_execute: >-
{%- set exec_upgrade = {'decision': true, 'reason': ''} -%}
{%- if not package_manager__role_enabled -%}
{%- set exec_upgrade = {'decision': false, 'reason': 'Upgrade requires aybarsm.linux.package_manager role enabled. (package_manager__role_enabled: true)'} -%}
{%- elif __package_manager__upgrade_never -%}
{%- set exec_upgrade = {'decision': false, 'reason': 'Upgrade strategy is set to never.'} -%}
{%- elif __package_manager__upgrade_clean and not __package_manager__upgrade_clean_eligible -%}
{%- set exec_upgrade = {'decision': false, 'reason': 'Upgrade strategy is set to clean, but no default repo list configuration found.'} -%}
{%- elif __package_manager__upgrade_once -%}
{%- if ansible__local_fact_name is undefined -%}
{%- set exec_upgrade = {'decision': false, 'reason': 'Upgrade strategy once requires aybarsm.linux.ansible role imported.'} -%}
{%- elif ansible__role_enabled is undefined or not ansible__role_enabled -%}
{%- set exec_upgrade = {'decision': false, 'reason': 'Upgrade strategy once requires aybarsm.linux.ansible role enabled. (ansible__role_enabled: true)'} -%}
{%- elif not ansible__manage_local_facts -%}
{%- set exec_upgrade = {'decision': false, 'reason': 'Upgrade strategy once requires aybarsm.linux.ansible role local fact management enabled. (ansible__manage_local_facts: true)'} -%}
{%- elif ansible_local[ansible__local_fact_name].package_manager.upgrade is defined -%}
{%- set exec_upgrade = {'decision': false, 'reason': 'Host already upgraded.'} -%}
{%- endif -%}
{%- endif -%}
{{ exec_upgrade }}
41 changes: 30 additions & 11 deletions roles/proxmox/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,34 +1,53 @@
proxmox__role_enabled: false

proxmox__manage_cluster: false
proxmox__manage_cluster_hosts: false
proxmox__manage_cluster_ssh_config: false
# TODO: Implement managing the purpose package setup for repos and package versioning.
# proxmox__manage_repo_keys: false
# proxmox__manage_repos: false
# proxmox__manage_packages: false
# proxmox__manage_grub: false
# proxmox__manage_hostname: false
# proxmox__manage_hosts: false
# proxmox__manage_sshd_config: false
# proxmox__manage_ssh_config: false
# proxmox__manage_cluster: false

# Cluster configuration
# For target inventory specs, consult https://docs.ansible.com/ansible/latest/inventory_guide/intro_patterns.html for more information
# If init node not provided, the init node will be designated as the first node regarding ascending sorted of inventory_hostname
# proxmox__clusters:
# - name: 'pve-london01'
# target: 'proxmox:&london'
# - name: 'pve-atlanta01'
# target: 'proxmox:&atlanta'
# init: 'pve01-atlanta01'
proxmox__clusters: []
# Ip addresses for the cluster links for the host (will be automatically prioritized regarding the posisiton in the list)
# Ip addresses for the cluster links for the host
proxmox__cluster_links: []
# If set to any integer higher than 0, cluster links will be prioritized automatically regarding the step.
# i.e. proxmox__cluster_links: ['10.0.0.2', 'fd00::2'] and proxmox__cluster_links_auto_priority_step: 10 will be prioritized as 10.0.0.2 = 20 and fd00::2 = 10
proxmox__cluster_links_auto_priority_step: 0
# If set as a dict, with integer keys, keys will be used as link priority. Consult: https://pve.proxmox.com/pve-docs/pvecm.1.html
# i.e. proxmox__cluster_links: {'10': '10.0.0.2', '20': 'fd00::2'}

proxmox__ssh_port: 22

proxmox__repo_url_enterprise: https://enterprise.proxmox.com/debian
proxmox__repo_url_no_subscription: http://download.proxmox.com/debian
proxmox__repo_keys:
bookworm:
url: https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg
keyring: /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
bullseye:
url: https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg
keyring: /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg

proxmox__purpose_names: ['pve', 'pbs', 'pmg', 'ceph_pacific', 'ceph_quincy', 'ceph_reef']
proxmox__purpose_names: ['pve', 'pbs', 'pmg', 'ceph_pacific', 'ceph_quincy', 'ceph_reef', 'zfs']
proxmox__purpose_types: ['enterprise', 'no-subscription']
proxmox__purpose_packages:
pve: pve-manager
pbs: proxmox-backup-server
pmg: proxmox-mailgateway
pve: ['pve-manager']
pbs: ['proxmox-backup-server']
pmg: ['proxmox-mailgateway']
ceph_pacific: ['ceph', 'ceph-common', 'ceph-mds', 'ceph-fuse']
ceph_quincy: ['ceph', 'ceph-common', 'ceph-mds', 'ceph-fuse']
ceph_reef: ['ceph', 'ceph-common', 'ceph-mds', 'ceph-fuse']
zfs: ['zfsutils-linux', 'zfs-initramfs', 'zfs-zed']

# If enabled, the role will manage the purpose package setup for repos and package versioning.
proxmox__manage_purpose_package_setup: true
Expand Down
28 changes: 28 additions & 0 deletions roles/proxmox/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,34 @@
ansible.builtin.include_tasks:
file: set_facts.yml

- name: Import aybarsm package_manager role
ansible.builtin.import_role:
name: aybarsm.linux.package_manager
when:
- proxmox__role_enabled
- __proxmox__use_package_manager

- name: Import aybarsm grub role
ansible.builtin.import_role:
name: aybarsm.linux.grub
when:
- proxmox__role_enabled
- proxmox__manage_grub

# - name: Import aybarsm network role
# ansible.builtin.import_role:
# name: aybarsm.linux.network
# when: proxmox__role_enabled

# - name: Reboot node and wait if upgraded, grub or network-systemd changed
# ansible.builtin.reboot:
# test_command: "uptime"
# vars:
# is_upgraded: "{{ package_manager__upgrade_deb is defined and package_manager__upgrade_deb is changed }}"
# is_grub: "{{ grub__deploy is defined and grub__deploy is changed }}"
# is_systemd: "{{ network__systemd_deploy is defined and network__systemd_deploy is changed }}"
# when: is_upgraded or is_grub or is_systemd

# - name: Proxmox Query
# become: true
# proxmox_query:
Expand Down
15 changes: 15 additions & 0 deletions roles/proxmox/tasks/network.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
- name: Import aybarsm package_manager role
ansible.builtin.include_role:
name: aybarsm.linux.package_manager
vars:
package_manager__role_enabled: true
package_manager__manage_repo_keys: "{{ proxmox__manage_repo_keys }}"
package_manager__manage_repos: "{{ proxmox__manage_repos }}"
package_manager__manage_packages: "{{ proxmox__manage_packages }}"
node_repo_keys: "{{ __proxmox__purpose_packages | selectattr('type', 'eq', 'repo_key') if proxmox__manage_repo_keys else [] }}"
node_repos: "{{ __proxmox__purpose_packages | selectattr('type', 'eq', 'repo') if proxmox__manage_repos else [] }}"
node_packages: "{{ __proxmox__purpose_packages | selectattr('type', 'eq', 'package') if proxmox__manage_packages else [] }}"
package_manager__host: "{{ node_repo_keys + node_repos + node_packages + (package_manager__host | default([])) }}"

when: proxmox__role_enabled
14 changes: 14 additions & 0 deletions roles/proxmox/tasks/package_manager.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
- name: Include aybarsm package_manager role
ansible.builtin.include_role:
name: aybarsm.linux.package_manager
vars:
package_manager__role_enabled: true
package_manager__package_strategy: specific
package_manager__manage_repo_keys: "{{ proxmox__manage_repo_keys }}"
package_manager__manage_repos: "{{ proxmox__manage_repos }}"
package_manager__manage_packages: "{{ proxmox__manage_packages }}"
node_repo_keys: "{{ __proxmox__purpose_packages | selectattr('type', 'eq', 'repo_key') if proxmox__manage_repo_keys else [] }}"
node_repos: "{{ __proxmox__purpose_packages | selectattr('type', 'eq', 'repo') if proxmox__manage_repos else [] }}"
node_packages: "{{ __proxmox__purpose_packages | selectattr('type', 'eq', 'package') if proxmox__manage_packages else [] }}"
package_manager__host: "{{ node_repo_keys + node_repos + node_packages + (package_manager__host | default([])) }}"
Loading

0 comments on commit 43d5448

Please sign in to comment.