diff --git a/.ansible-lint b/.ansible-lint index d8dc293..c1fba50 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -5,3 +5,4 @@ skip_list: - no-changed-when - run-once[play] - name[template] + - jinja[spacing] diff --git a/bigboot_execute_resize.yml b/bigboot_execute_resize.yml index 8fc4a30..bc85ddb 100644 --- a/bigboot_execute_resize.yml +++ b/bigboot_execute_resize.yml @@ -11,42 +11,13 @@ tasks: - name: Perform service and filesystem checks prior to Bigboot execution when: - - (bigboot_data[inventory_hostname]['bigboot_execute_shrink_lv'] | bool - or bigboot_data[inventory_hostname]['bigboot_execute_bigboot'] | bool) + - bigboot_data[inventory_hostname]['bigboot_execute_bigboot'] | default(false) | bool block: - name: Check for and disable services exceeding the timeout threshold ansible.builtin.import_tasks: tasks/check_systemd_services.yml - - name: Services disabled notice - ansible.builtin.debug: - msg: >- - The following services were disabled, and will be re-enabled post - Bigboot execution: - - {{ bigboot_systemd_disabled_services | flatten }} - when: - - bigboot_systemd_disabled_services is defined - - bigboot_systemd_disabled_services | length > 0 - - - name: Enable Grub filesystem check - ansible.builtin.import_role: - name: autofsck - tasks_from: main.yml - - - name: Flush handlers - ansible.builtin.meta: flush_handlers - - # Make sure to update the reboot code for the WF environment - - name: Reboot to run filesystem checks - ansible.builtin.reboot: - - - name: Disable Grub filesystem check - ansible.builtin.import_role: - name: autofsck - tasks_from: cleanup.yml - - - name: Flush handlers - ansible.builtin.meta: flush_handlers + - name: Perform filesystem check prior to Bigboot execution + ansible.builtin.import_tasks: tasks/grub_filesystem_check.yml - name: Extend the timeout values for physical hosts @@ -74,16 +45,16 @@ when: - bigboot_data[inventory_hostname]['bigboot_execute_bigboot'] | bool - - name: Get the list of services on the host + - name: Ensure service facts are available ansible.builtin.service_facts: - - name: Re-enabling Docker service + - name: Restore Docker service to its pre-Bigboot state ansible.builtin.service: - name: docker.service - state: started - enabled: true + name: "{{ bigboot_docker_service }}" + state: "{{ bigboot_data[inventory_hostname]['bigboot_docker_running'] }}" + enabled: "{{ bigboot_data[inventory_hostname]['bigboot_docker_enabled'] }}" when: - - "'docker.service' in ansible_facts['services']" + - ansible_facts['services'][bigboot_docker_service] is defined - name: Re-enabling services previously disabled ansible.builtin.service: diff --git a/bigboot_rear_backup.yml b/bigboot_rear_backup.yml index 786c8c7..27e1b10 100644 --- a/bigboot_rear_backup.yml +++ b/bigboot_rear_backup.yml @@ -1,22 +1,6 @@ --- -- name: Capture boot and logical volume information - hosts: all - become: true - gather_facts: true - strategy: free - - tasks: - - name: Debug bigboot_execute_shrink_lv - ansible.builtin.debug: - msg: "bigboot_data[inventory_hostname]['bigboot_execute_shrink_lv'] -> {{ bigboot_data[inventory_hostname]['bigboot_execute_shrink_lv'] }}" - - - name: Debug bigboot_execute_bigboot - ansible.builtin.debug: - msg: "bigboot_data[inventory_hostname]['bigboot_execute_bigboot'] -> {{ bigboot_data[inventory_hostname]['bigboot_execute_bigboot'] }}" - - name: Perform a ReaR backup before the /boot expansion ansible.builtin.import_playbook: rhc.rear.rear_backup when: - - (bigboot_data[inventory_hostname]['bigboot_execute_shrink_lv'] | bool - or bigboot_data[inventory_hostname]['bigboot_execute_bigboot'] | bool) - - not bigboot_rear_backup_skip | default(false) | bool + - bigboot_data[inventory_hostname]['bigboot_execute_bigboot'] | default(false) | bool + - not rear_backup_skip | default(false) | bool diff --git a/bigboot_rear_nfs_export.yml b/bigboot_rear_nfs_export.yml new file mode 100644 index 0000000..e521e42 --- /dev/null +++ b/bigboot_rear_nfs_export.yml @@ -0,0 +1,19 @@ +--- +- name: Perform logical volume and boot parition resizing as needed + hosts: rear_server + become: true + gather_facts: false + + vars_files: + - bigboot_vars.yml + + tasks: + - name: Create IP list and add to NFS exports + ansible.builtin.include_tasks: tasks/rear_nfs_exports.yml + loop: "{{ bigboot_data | dict2items }}" + loop_control: + label: "{{ item['key'] }}" + when: + - item['value']['bigboot_execute_bigboot'] | default(false) | bool + - not rear_backup_skip | default(false) | bool + diff --git a/bigboot_setup_environment.yml b/bigboot_setup_environment.yml index 1d356a0..43cddbe 100644 --- a/bigboot_setup_environment.yml +++ b/bigboot_setup_environment.yml @@ -12,29 +12,18 @@ - name: Cleanup from any previous executions ansible.builtin.import_tasks: tasks/cleanup.yml - - name: Get the list of services on the host - ansible.builtin.service_facts: + - name: Stop and disable the Docker service if present and running + ansible.builtin.import_tasks: tasks/disable_docker_service.yml - - name: Disable Docker service due to incompatibility - ansible.builtin.service: - name: docker.service - state: stopped - enabled: false - when: - - "'docker.service' in ansible_facts['services']" - - - name: Capture boot device details + - name: Set boot device details ansible.builtin.import_tasks: tasks/capture_boot_device_details.yml - - name: Capture logical volume information + - name: Set logical volume information ansible.builtin.import_tasks: tasks/capture_lv_device_details.yml - - name: Set ReaR backup flag - ansible.builtin.set_fact: - bigboot_rear_backup_skip: - - name: Set environment for subsequent workflow nodes ansible.builtin.set_stats: + aggregate: true data: bigboot_data: "{{ bigboot_data | default({}) | combine({inventory_hostname: @@ -43,15 +32,12 @@ 'bigboot_execute_shrink_lv': bigboot_execute_shrink_lv, 'bigboot_adjacent_lvm_device': bigboot_adjacent_lvm_device, 'bigboot_lv_shrink_size': bigboot_lv_shrink_size | int, - 'bigboot_size': bigboot_size + 'bigboot_size': bigboot_size, + 'bigboot_docker_running': bigboot_docker_running, + 'bigboot_docker_enabled': bigboot_docker_enabled, + 'ip_addresses': ansible_all_ipv4_addresses, + 'server_hostname': ansible_hostname } }) }}" - rear_backup_skip: "{{ bigboot_rear_backup_skip | default(false) }}" - -- name: Perform a ReaR backup if any disk modifications are to be made - ansible.builtin.import_playbook: rhc.rear.rear_backup - when: - - bigboot_execute_bigboot | bool or bigboot_execute_bigboot | bool - - not bigboot_rear_backup_skip | default(false) | bool ... diff --git a/tasks/check_systemd_services.yml b/tasks/check_systemd_services.yml index 2c29381..558c23e 100644 --- a/tasks/check_systemd_services.yml +++ b/tasks/check_systemd_services.yml @@ -28,4 +28,13 @@ label: "{{ item['item'] }}" when: - item['item'] not in bigboot_protected_services - - item['stdout'] | regex_replace('^.*=(.*$)', '\\1') | community.general.to_minutes > bigboot_service_max_timeout + - item['stdout'] | regex_replace('^.*=(.*$)', '\\1') | community.general.to_minutes >= bigboot_service_max_timeout | int + +- name: Services disabled notice + ansible.builtin.debug: + msg: >- + The following services were disabled, and will be re-enabled post + Bigboot execution: {{ bigboot_systemd_disabled_services | join(',') }} + when: + - bigboot_systemd_disabled_services is defined + - bigboot_systemd_disabled_services | length > 0 diff --git a/tasks/cleanup.yml b/tasks/cleanup.yml index 222f0e0..180e5be 100644 --- a/tasks/cleanup.yml +++ b/tasks/cleanup.yml @@ -29,4 +29,16 @@ path: "/boot/initramfs-{{ initramfs_kernel_version }}.img.{{ initramfs_backup_extension }}" state: absent +- name: Check if disable services log exists + ansible.builtin.stat: + path: "{{ bigboot_disabled_services_log }}" + register: bigboot_disabled_services_log_stat + +- name: Remove disabled services log if present + ansible.builtin.file: + path: "{{ bigboot_disabled_services_log }}" + state: absent + when: + - bigboot_disabled_services_log_stat['stat']['exists'] | bool + ... diff --git a/tasks/disable_docker_service.yml b/tasks/disable_docker_service.yml new file mode 100644 index 0000000..8d7ee54 --- /dev/null +++ b/tasks/disable_docker_service.yml @@ -0,0 +1,25 @@ +--- +- name: Ensure service facts are available + ansible.builtin.service_facts: + +- name: Set Docker state + when: + - ansible_facts['services'][bigboot_docker_service] is defined + block: + - name: Set Docker running state + ansible.builtin.set_fact: + bigboot_docker_running: started + when: + - ansible_facts['services'][bigboot_docker_service]['state'] == "running" + + - name: Set Docker enabled state + ansible.builtin.set_fact: + bigboot_docker_enabled: true + when: + - ansible_facts['services'][bigboot_docker_service]['status'] == "enabled" + + - name: Ensure Docker service is stopped and disabled + ansible.builtin.service: + name: "{{ bigboot_docker_service }}" + state: stopped + enabled: false diff --git a/tasks/disable_systemd_services.yml b/tasks/disable_systemd_services.yml index d90a9f4..5356484 100644 --- a/tasks/disable_systemd_services.yml +++ b/tasks/disable_systemd_services.yml @@ -9,3 +9,13 @@ ansible.builtin.set_fact: bigboot_systemd_disabled_services: "{{ bigboot_systemd_disabled_services | default([]) + [item['item']] }}" + +- name: Log disabled service to log file + ansible.builtin.lineinfile: + path: "{{ bigboot_disabled_services_log }}" + line: "{{ item['item'] }}" + create: true + state: present + owner: root + group: root + mode: "0600" diff --git a/tasks/grub_filesystem_check.yml b/tasks/grub_filesystem_check.yml new file mode 100644 index 0000000..a1ee48d --- /dev/null +++ b/tasks/grub_filesystem_check.yml @@ -0,0 +1,30 @@ +--- +- name: Enable Grub filesystem check + ansible.builtin.import_role: + name: autofsck + tasks_from: main.yml + +- name: Flush handlers to add Grub parameters for fsck + ansible.builtin.meta: flush_handlers + +# Make sure to update the reboot code for the WF environment +# - name: Reboot to run filesystem checks +# ansible.builtin.reboot: + +- name: Reboot to run filesystem checks + ansible.builtin.command: /sbin/shutdown -r +1 + +- name: Wait for the reboot to complete + ansible.builtin.wait_for_connection: + connect_timeout: 20 + sleep: 10 + delay: "{{ bigboot_post_reboot_delay | default('70') }}" + timeout: "{{ bigboot_reboot_timeout | default('1800') }}" + +- name: Disable Grub filesystem check + ansible.builtin.import_role: + name: autofsck + tasks_from: cleanup.yml + +- name: Flush handlers to remove Grub parameters for fsck + ansible.builtin.meta: flush_handlers diff --git a/tasks/rear_nfs_exports.yml b/tasks/rear_nfs_exports.yml new file mode 100644 index 0000000..c1013e2 --- /dev/null +++ b/tasks/rear_nfs_exports.yml @@ -0,0 +1,9 @@ +--- +- name: Create list of IP addresses and hostnames + ansible.builtin.set_fact: + client_ips: "{{ item['value']['ip_addresses'] | list | flatten }}" + namehost: "{{ item['value']['server_hostname'] }}" + +- name: Include NFS export role + ansible.builtin.include_role: + name: rhc.rear.say_hi diff --git a/vars/bigboot_vars.yml b/vars/bigboot_vars.yml index 825299f..b506917 100644 --- a/vars/bigboot_vars.yml +++ b/vars/bigboot_vars.yml @@ -8,6 +8,10 @@ bigboot_reboot_timeout: 1800 bigboot_skip_rear_backup: false +bigboot_docker_service: docker.service +bigboot_docker_running: stopped +bigboot_docker_enabled: false + # Max value in minutes for the timeout threshold: bigboot_service_max_timeout: 5 @@ -20,3 +24,6 @@ bigboot_protected_services: - rhnsd.service - rhnsd - boksm.service + +# Filename of disabled services log: +bigboot_disabled_services_log: /root/bigboot_disabled_services.log