From 0719dafc2f2b607ce52fe998b296f10cd6db4f22 Mon Sep 17 00:00:00 2001 From: Pavlo Shchelokovskyy Date: Tue, 19 Sep 2017 16:15:44 +0000 Subject: [PATCH] [ansible] fixes for Anible 2.4 compat - fix callback plugin (add a new public methdod) - ansible_devices fact now contains many more devices (at least with tinyipa ramdisk and virtual HW), so by default we now attempt to use only devices that have non-empty 'host' attribute, and thus are real block devices on some controller (not memory-mapped files, loop devices etc) + during provisioning, the default target for image when root device hints are absent will be the first such device + during cleaning, only such devices will be attempted to be cleaned Change-Id: Id2bfd1ed552ed566b14f6ac5b222c011ff918bee Closes-Bug: #1718361 --- .../ansible/playbooks/callback_plugins/ironic_log.py | 7 +++++++ .../ansible/playbooks/roles/clean/tasks/shred.yaml | 6 ++++-- .../ansible/playbooks/roles/clean/tasks/wipe.yaml | 6 ++++++ .../ansible/playbooks/roles/clean/tasks/zap.yaml | 2 ++ .../ansible/playbooks/roles/discover/tasks/main.yaml | 7 +++++-- ironic_staging_drivers/ansible/python-requirements.txt | 2 +- 6 files changed, 25 insertions(+), 5 deletions(-) diff --git a/ironic_staging_drivers/ansible/playbooks/callback_plugins/ironic_log.py b/ironic_staging_drivers/ansible/playbooks/callback_plugins/ironic_log.py index 765b7d8..514f480 100644 --- a/ironic_staging_drivers/ansible/playbooks/callback_plugins/ironic_log.py +++ b/ironic_staging_drivers/ansible/playbooks/callback_plugins/ironic_log.py @@ -85,6 +85,13 @@ class CallbackModule(object): setup_log() self.log = logging.getLogger(__name__) self.node = None + self.opts = {} + + # NOTE(pas-ha) this method is required for Ansible>=2.4 + # TODO(pas-ha) rewrite to support defining callback plugin options + # in ansible.cfg after we require Ansible >=2.4 + def set_options(self, options): + self.opts = options def runner_msg_dict(self, result): self.node = result._host.get_name() diff --git a/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/shred.yaml b/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/shred.yaml index 8b5aa0d..5112290 100644 --- a/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/shred.yaml +++ b/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/shred.yaml @@ -1,6 +1,8 @@ - name: clean block devices become: yes - command: shred -f -z /dev/{{ item }} + command: shred -f -z /dev/{{ item.key }} async: 3600 poll: 30 - with_items: "{{ ansible_devices }}" + with_dict: "{{ ansible_devices }}" + when: + - item.value.host diff --git a/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/wipe.yaml b/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/wipe.yaml index feee20f..877f8f3 100644 --- a/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/wipe.yaml +++ b/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/wipe.yaml @@ -4,15 +4,21 @@ - 0 end_sectors: - "{{ (device.value.sectors | int) - sectors_to_wipe }}" + when: + - device.value.host - name: update start and end sectors with such for partitions set_fact: start_sectors: "{{ start_sectors + [item.value.start | int ] }}" end_sectors: "{{ end_sectors + [ (item.value.start | int) + ( item.value.sectors | int) - sectors_to_wipe ] }}" with_dict: "{{ device.value.partitions }}" + when: + - device.value.host - name: wipe starts and ends of disks and partitions command: dd if=/dev/zero of=/dev/{{ device.key }} ibs={{ device.value.sectorsize }} obs={{ device.value.sectorsize }} count={{ sectors_to_wipe }} seek={{ item }} with_flattened: - "{{ start_sectors | map('int') | list | sort (reverse=True) }}" - "{{ end_sectors | map('int') | list | sort (reverse=True) }}" + when: + - device.value.host diff --git a/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/zap.yaml b/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/zap.yaml index f2f74f1..2ebc129 100644 --- a/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/zap.yaml +++ b/ironic_staging_drivers/ansible/playbooks/roles/clean/tasks/zap.yaml @@ -12,3 +12,5 @@ become: yes command: sgdisk -Z /dev/{{ item.key }} with_dict: "{{ ansible_devices }}" + when: + - item.value.host diff --git a/ironic_staging_drivers/ansible/playbooks/roles/discover/tasks/main.yaml b/ironic_staging_drivers/ansible/playbooks/roles/discover/tasks/main.yaml index 8b4d2c3..6b4efee 100644 --- a/ironic_staging_drivers/ansible/playbooks/roles/discover/tasks/main.yaml +++ b/ironic_staging_drivers/ansible/playbooks/roles/discover/tasks/main.yaml @@ -2,8 +2,11 @@ when: ironic.root_device_hints is defined - set_fact: - ironic_root_device: /dev/{{ ansible_devices.keys()[0] }} - when: ironic_root_device is undefined + ironic_root_device: /dev/{{ item.key }} + with_dict: "{{ ansible_devices }}" + when: + - ironic_root_device is undefined + - item.value.host - set_fact: ironic_image_target: "{{ ironic_root_device }}" diff --git a/ironic_staging_drivers/ansible/python-requirements.txt b/ironic_staging_drivers/ansible/python-requirements.txt index c08887e..8cc8360 100644 --- a/ironic_staging_drivers/ansible/python-requirements.txt +++ b/ironic_staging_drivers/ansible/python-requirements.txt @@ -1 +1 @@ -ansible>=2.1,!=2.2.1.0,!=2.1.4.0,<2.4 +ansible>=2.1,!=2.2.1.0,!=2.1.4.0