Execution
Date 14 Dec 2025 10:02:53 +0000
Duration 00:01:37.94
Controller np02505b6944e64
User root
Versions
Ansible 2.18.6
ara 1.7.4 / 1.7.4
Python 3.13.5
Summary
1 Hosts
154 Tasks
154 Results
1 Plays
22 Files
0 Records

File: /home/zuul/src/opendev.org/openstack/openstack-ansible/tests/roles/bootstrap-host/tasks/prepare_data_disk.yml

---
# Copyright 2015, Rackspace US, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


# Only execute the disk partitioning process if a partition labeled
#  'openstack-data{1,2}' is not present and that partition is not
#  formatted as ext4. This is an attempt to achieve idempotency just
#  in case these tasks are executed multiple times.
- name: Determine whether partitions labeled openstack-data{1,2} are present
  ansible.builtin.shell: |
    set -o pipefail;
    parted --script -l -m | grep -Eq ':{{ bootstrap_host_data_disk_fs_type }}:openstack-data[12]:;$'
  args:
    executable: /bin/bash
  register: data_disk_partitions
  changed_when: false
  failed_when: false
  tags:
    - check-data-disk-partitions

- name: Set bootstrap host data disk fact
  ansible.builtin.set_fact:
    bootstrap_host_data_disk_device_force: true
    _bootstrap_host_data_disk_device: "{{ (bootstrap_host_data_disk_device | regex_replace('!', '/')).strip() }}"
  when:
    - data_disk_partitions.rc == 1

- name: Dismount and remove fstab entries for anything on the data disk device
  ansible.posix.mount:
    name: "{{ item.mount }}"
    src: "{{ item.device }}"
    fstype: "{{ bootstrap_host_data_disk_fs_type }}"
    state: absent
  when:
    - bootstrap_host_data_disk_device_force | bool
    - item.device is search(bootstrap_host_data_disk_device)
  with_items:
    - "{{ ansible_facts['mounts'] }}"

- name: Partition the whole data disk for our usage # noqa: no-changed-when
  ansible.builtin.command: "{{ item }}"
  when:
    - bootstrap_host_data_disk_device_force | bool
  with_items:
    - "parted --script /dev/{{ _bootstrap_host_data_disk_device }} mklabel gpt"
    - "parted --align optimal --script /dev/{{ _bootstrap_host_data_disk_device }} mkpart openstack-data1 {{ bootstrap_host_data_disk_fs_type }} 0% 40%"
    - "parted --align optimal --script /dev/{{ _bootstrap_host_data_disk_device }} mkpart openstack-data2 {{ bootstrap_host_data_disk2_fs }} 40% 100%"
  tags:
    - create-data-disk-partitions

- name: Determine partition names
  ansible.builtin.command: "lsblk /dev/{{ _bootstrap_host_data_disk_device }} -o NAME --noheadings --list"
  register: data_disk_partitions
  when:
    - bootstrap_host_data_disk_device_force | bool
  changed_when: false
  tags:
    - create-data-disk-partitions

- name: Set bootstrap host data disk partitions fact
  ansible.builtin.set_fact:
    _bootstrap_host_data_partition_devices: "{{ data_disk_partitions.stdout_lines[1:] | list }}"
  when:
    - bootstrap_host_data_disk_device_force | bool

- name: Format the partition 1
  community.general.filesystem:
    fstype: "{{ bootstrap_host_data_disk_fs_type }}"
    dev: "/dev/{{ _bootstrap_host_data_partition_devices[0] }}"
    opts: "{{ bootstrap_host_format_options[bootstrap_host_data_disk_fs_type] | default(omit) }}"
  when:
    - bootstrap_host_data_disk_device_force | bool
  tags:
    - format-data-partitions

- name: Format the partition 2
  community.general.filesystem:
    fstype: "{{ bootstrap_host_data_disk2_fs }}"
    dev: "/dev/{{ _bootstrap_host_data_partition_devices[1] }}"
    opts: "{{ bootstrap_host_format_options[bootstrap_host_data_disk2_fs] | default(omit) }}"
  when:
    - bootstrap_host_data_disk_device_force | bool
    - _lxc_container_backing_store != 'lvm'
    - _lxc_container_backing_store != 'zfs'
  tags:
    - format-data-partitions

- name: Run the systemd mount role
  ansible.builtin.include_role:
    name: systemd_mount
  vars:
    systemd_mounts:
      - what: "/dev/{{ _bootstrap_host_data_partition_devices[0] }}"
        where: "/openstack"
        type: "{{ bootstrap_host_data_disk_fs_type }}"
        options: "{{ bootstrap_host_data_mount_options[bootstrap_host_data_disk_fs_type] }}"
        state: 'started'
        enabled: true
      - what: "/dev/{{ _bootstrap_host_data_partition_devices[1] }}"
        where: "{{ bootstrap_host_data_disk2_path }}"
        type: "{{ bootstrap_host_data_disk2_fs }}"
        options: "{{ bootstrap_host_data_disk2_fs_mount_options }}"
        state: "{{ (_lxc_container_backing_store != 'lvm' and _lxc_container_backing_store != 'zfs') | ternary('started', 'stopped') }}"
        enabled: "{{ (_lxc_container_backing_store != 'lvm' and _lxc_container_backing_store != 'zfs') | bool }}"
  tags:
    - data-config

- name: Prepare disk drive as ZFS
  when: _lxc_container_backing_store == 'zfs'
  block:
    - name: Install zfs packages
      ansible.builtin.package:
        name: "{{ packages_install_zfs }}"
        state: present
        update_cache: "{{ (ansible_facts['pkg_mgr'] == 'apt') | ternary('yes', omit) }}"
      tags:
        - install-packages

    - name: Create the ZFS pool
      ansible.builtin.command: zpool create osa-test-pool "/dev/{{ _bootstrap_host_data_partition_devices[1] }}"
      args:
        creates: /osa-test-pool
      when:
        - bootstrap_host_data_disk_device_force | bool

    - name: Create the ZFS osa-test-pool/lxc volume
      ansible.builtin.shell: "(zfs list | grep lxc) || zfs create -o mountpoint=/var/lib/lxc osa-test-pool/lxc"
      when:
        - bootstrap_host_data_disk_device_force | bool
      tags:
        - skip_ansible_lint

- name: Prepare disk drive as LVM
  community.general.lvg:
    vg: lxc
    pvs: "/dev/{{ _bootstrap_host_data_partition_devices[1] }}"
  tags:
    - data-config
  when: _lxc_container_backing_store == 'lvm'