deploy/ansible/roles-os/1.4-packages/tasks/1.4.1-packages.yaml (196 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
- name: "1.4 Packages: - Import package list"
ansible.builtin.include_vars: os-packages.yaml
- name: "1.4 Packages: - Installing packages for tier"
ansible.builtin.debug:
msg: "Installing packages for tier {{ tier }} on {{ distribution_id }}"
# Analyse the package list for this distribution selecting only those
# packages assigned to the active tier or 'all'.
- name: "1.4 Packages: - Determine packages appropriate for tier on: {{ distribution_id }}"
ansible.builtin.set_fact:
packages_for_tier: "{{ packages[distribution_id] |
selectattr('tier', 'in', ['all', tier]) |
selectattr('node_tier', 'in', ['all', node_tier]) |
list }}"
# Initialize packages_for_specific_tier with an empty list
- name: "1.4 Packages: - Initialize specific tier packages"
ansible.builtin.set_fact:
packages_for_specific_tier: []
# Analyse the package list for this distribution selecting only those
# packages assigned to the active tier or 'all'. This is used for
# distributions that have a specific package list.
- name: "1.4 Packages: - Determine packages appropriate for tier on: {{ distribution_full_id }}"
when: packages[distribution_full_id] is defined
ansible.builtin.set_fact:
packages_for_specific_tier: "{{ packages[distribution_full_id] |
selectattr('tier', 'in', ['all', tier]) |
selectattr('node_tier', 'in', ['all', node_tier]) | default([]) |
list }}"
- name: "1.4 Packages: - Debug - output packages for a specific tier"
ansible.builtin.debug:
msg:
- "Distribution : {{ distribution_id }}"
- "Distribution Full Id: {{ distribution_full_id }}"
- "Tier : {{ tier }}"
- "Node Tier : {{ node_tier }}"
- "Packages : {{ packages | selectattr(distribution_full_id, 'defined') }}"
- "Available keys : {{ packages.keys() | list }}"
- "Key exists 1 : {{ distribution_full_id in packages }}"
- "Key exists 2 : {{ packages[distribution_full_id] is defined }}"
- "Packages for {{ distribution_id }} : {{ packages_for_tier }}"
- "Packages for {{ distribution_full_id }} : {{ packages_for_specific_tier }}"
verbosity: 2
- name: "1.4 Packages: - Update OS packages: {{ distro_name }}"
block:
- name: "1.4 Packages: - Update OS packages RHEL: {{ distro_name }}"
when: ansible_os_family | upper == "REDHAT"
ansible.builtin.dnf:
name: "{{ packages_for_tier |
selectattr('state', 'equalto', item.state) |
map(attribute='package') |
list }}"
state: "{{ item.state }}"
disablerepo: "epel*"
skip_broken: true
nobest: true
register: package_result
loop:
- { state: 'latest' } # Update necessary packages
- { state: 'present' } # Install required packages
- { state: 'absent' } # Then remove packages that we don't want
- name: "1.4 Packages: - Update OS packages SLES: {{ distro_name }}"
when: ansible_os_family | upper == "SUSE"
ansible.builtin.package:
name: "{{ packages_for_tier |
selectattr('state', 'equalto', item.state) |
map(attribute='package') |
list }}"
state: "{{ item.state }}"
environment:
ZYPP_LOCK_TIMEOUT: "20"
register: package_result
loop:
- { state: 'latest' } # Update necessary packages
- { state: 'present' } # Install required packages
- { state: 'absent' } # Then remove packages that we don't want
rescue:
- name: "1.4 Packages: - Show result from packages module"
ansible.builtin.debug:
var: package_result
verbosity: 2
- name: "1.4 Packages: - Performing rescue action"
ansible.builtin.pause:
seconds: 60
- name: "1.4 Packages: - Update OS packages: {{ distro_name }} and rescue"
block:
- name: "1.4 Packages: - Update OS packages RHEL: {{ distro_name }}"
ansible.builtin.dnf:
name: "{{ packages_for_tier |
selectattr('state', 'equalto', item.state) |
map(attribute='package') |
list }}"
state: "{{ item.state }}"
disablerepo: "epel*"
skip_broken: true
nobest: true
register: package_result
loop:
- { state: 'latest' } # Update necessary packages
- { state: 'present' } # Install required packages
- { state: 'absent' } # Then remove packages that we don't want
when: ansible_os_family | upper == "REDHAT"
- name: "1.4 Packages: - Update OS packages SLES: {{ distro_name }}"
ansible.builtin.package:
name: "{{ packages_for_tier |
selectattr('state', 'equalto', item.state) |
map(attribute='package') |
list }}"
state: "{{ item.state }}"
environment:
ZYPP_LOCK_TIMEOUT: "20"
register: package_result
loop:
- { state: 'latest' } # Update necessary packages
- { state: 'present' } # Install required packages
- { state: 'absent' } # Then remove packages that we don't want
when: ansible_os_family | upper == "SUSE"
rescue:
- name: "1.4 Packages: - Print stderr before getting error code"
ansible.builtin.debug:
msg: "debug statement: {{ package_result }}"
- name: "1.4 Packages: - Error handling for Packages: - Update OS packages: {{ distro_name }}"
ansible.builtin.debug:
msg: "{{ package_result | try_get_error_code_results(task_tag='update_os_packages') }}"
# Similar pattern for distribution_full_id...
- name: "1.4 Packages: - Update OS packages: {{ distribution_full_id }}"
block:
- name: "1.4 Packages: - Update OS packages RHEL: {{ distribution_full_id }}"
when: ansible_os_family | upper == "REDHAT"
ansible.builtin.dnf:
name: "{{ packages_for_specific_tier |
selectattr('state', 'equalto', item.state) |
map(attribute='package') |
list }}"
state: "{{ item.state }}"
disablerepo: "epel*"
skip_broken: true
nobest: true
register: package_result
loop:
- { state: 'latest' } # Update necessary packages
- { state: 'present' } # Install required packages
- { state: 'absent' } # Then remove packages that we don't want
- name: "1.4 Packages: - Update OS packages SLES: {{ distribution_full_id }}"
when: ansible_os_family | upper == "SUSE"
ansible.builtin.package:
name: "{{ packages_for_specific_tier |
selectattr('state', 'equalto', item.state) |
map(attribute='package') |
list }}"
state: "{{ item.state }}"
environment:
ZYPP_LOCK_TIMEOUT: "20"
register: package_result
loop:
- { state: 'latest' } # Update necessary packages
- { state: 'present' } # Install required packages
- { state: 'absent' } # Then remove packages that we don't want
rescue:
- name: "1.4 Packages: - Print return value"
ansible.builtin.debug:
var: package_result
- name: "1.4 Packages: - Performing rescue action"
ansible.builtin.pause:
seconds: 60
- name: "1.4 Packages: - Update OS packages: {{ distribution_full_id }} and rescue"
block:
- name: "1.4 Packages: - Update OS packages RHEL: {{ distribution_full_id }}"
when: ansible_os_family | upper == "REDHAT"
ansible.builtin.dnf:
name: "{{ packages_for_specific_tier |
selectattr('state', 'equalto', item.state) |
map(attribute='package') |
list }}"
state: "{{ item.state }}"
disablerepo: "epel*"
skip_broken: true
nobest: true
register: package_result
loop:
- { state: 'latest' } # Update necessary packages
- { state: 'present' } # Install required packages
- { state: 'absent' } # Then remove packages that we don't want
- name: "1.4 Packages: - Update OS packages SLES: {{ distribution_full_id }}"
when: ansible_os_family | upper == "SUSE"
ansible.builtin.package:
name: "{{ packages_for_specific_tier |
selectattr('state', 'equalto', item.state) |
map(attribute='package') |
list }}"
state: "{{ item.state }}"
environment:
ZYPP_LOCK_TIMEOUT: "20"
register: package_result
loop:
- { state: 'latest' } # Update necessary packages
- { state: 'present' } # Install required packages
- { state: 'absent' } # Then remove packages that we don't want
rescue:
- name: "1.4 Packages: - Print stderr before getting error code"
ansible.builtin.debug:
msg: "debug statement: {{ package_result }}"
- name: "1.4 Packages: - Error handling for Packages: - Update OS packages: {{ distribution_full_id }}"
ansible.builtin.fail:
msg: "{{ package_result | try_get_error_code_results(task_tag='update_os_packages') }}"