openstack-ansible/tests/roles/bootstrap-host/tasks/prepare_data_disk.yml
Markos Chandras 74027265b1 Convert role to use a common systemd role(s)
This removes the systemd service templates and tasks from this role and
leverages a common systemd roles instead. This change removes a lot of
code duplication across all governed projects without sacrificing features
or functionality. The intention of this change is to ensure uniformity and
reduce the maintenance burden on the community when sweeping changes are
needed.

* To ensure we're using the extra data-disks correctly the bootstrap role
  has been updated to correctly handle mounts using systemd mount units
  and oneshot services.

* This change sets the container path accordingly allowing an extra
  physical datadisk to be used for all of our container backends.

* The gate test functionality can now be used with all of our container
  storage backends. This makes it possible for folks using all of our
  available options, [dir, machinectl, btrfs, lvm, zfs] to test an integrated
  build of OSA by simply setting the `lxc_container_backing_store` just as it
  would be done in a production deployment.

Depends-On: https://review.openstack.org//555614
Change-Id: I0dc6daabad6c071ec7f9013a1e1eb0b3e594b544
Co-Authored-By: Markos Chandras <mchandras@suse.de>
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
2018-03-27 01:50:28 +00:00

153 lines
4.6 KiB
YAML

---
# 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
shell: |
parted --script -l -m | egrep -q ':ext4:openstack-data[12]:;$'
register: data_disk_partitions
changed_when: false
failed_when: false
tags:
- check-data-disk-partitions
- name: Set bootstrap host data disk fact
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
mount:
name: "{{ item.mount }}"
src: "{{ item.device }}"
fstype: ext4
state: absent
when:
- bootstrap_host_data_disk_device_force | bool
- item.device | search(bootstrap_host_data_disk_device)
with_items:
- "{{ ansible_mounts }}"
- name: Partition the whole data disk for our usage
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 ext4 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: Format the partition 1
filesystem:
fstype: ext4
dev: "/dev/{{ _bootstrap_host_data_disk_device }}1"
when:
- bootstrap_host_data_disk_device_force | bool
tags:
- format-data-partitions
- name: Format the partition 2
filesystem:
fstype: "{{ bootstrap_host_data_disk2_fs }}"
dev: "/dev/{{ _bootstrap_host_data_disk_device }}2"
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
include_role:
name: systemd_mount
private: true
vars:
systemd_mounts:
- what: "/dev/{{ _bootstrap_host_data_disk_device }}1"
where: "/openstack"
type: "ext4"
state: 'started'
enabled: true
tags:
- data-config
- name: Run the systemd mount role
include_role:
name: systemd_mount
private: true
vars:
systemd_mounts:
- what: "/dev/{{ _bootstrap_host_data_disk_device }}2"
where: "{{ bootstrap_host_data_disk2_path }}"
type: "{{ bootstrap_host_data_disk2_fs }}"
state: 'started'
enabled: true
when:
- lxc_container_backing_store != 'lvm'
- lxc_container_backing_store != 'zfs'
tags:
- data-config
- name: Create the ZFS pool
command: zpool create osa-test-pool "/dev/{{ _bootstrap_host_data_disk_device }}2"
args:
creates: /osa-test-pool
when:
- bootstrap_host_data_disk_device_force | bool
- lxc_container_backing_store == 'zfs'
- name: Create the ZFS pool/lxc volume
shell: "(zfs list | grep lxc) || zfs create -o mountpoint=/var/lib/lxc osa-test-pool/lxc"
when:
- bootstrap_host_data_disk_device_force | bool
- lxc_container_backing_store == 'zfs'
tags:
- skip_ansible_lint
- name: Make LVM physical volume on the cinder device
shell: "pvcreate /dev/{{ _bootstrap_host_data_disk_device }}2 && touch /openstack/lxc.pvcreate"
args:
creates: "/openstack/lxc.pvcreate"
when:
- lxc_container_backing_store == 'lvm'
tags:
- skip_ansible_lint
- data-config
- name: Run pvscan
command: "pvscan"
changed_when: false
when:
- lxc_container_backing_store == 'lvm'
tags:
- cinder-lvm-pv
- name: Add cinder-volumes volume group
lvg:
vg: lxc
pvs: "/dev/{{ _bootstrap_host_data_disk_device }}2"
when:
- lxc_container_backing_store == 'lvm'
tags:
- data-config