Kevin Carter 986e35ab4e Add mount options whenever formatting disks
This change provides mount options for all of the file system types
we use. These mount options will ensure that the underlying file systems
react with the best possible performance when building a test cloud. The
main motivation behind this patch is to help resolve bug 1753790 which
is causing sporatic failure when gating on RAX test instances that have
a secondary data disks. We were providing no options when mounting a
secondary disk which results in using the system defaults which may not
be very optimal under general workloads. The options have been added to
the bootstrap role and will be consistently applied whenever a given FS
is used.

> Part of this chagne is to modify the FS type for /var/lib/nova. We
  were using EXT4 and the recommended FS for VM workloads is XFS.

> The mount options have largely been derived from the following posts,
  https://www.phoronix.com/scan.php?page=article&item=linux414-fs-compare&num=1
  https://www.phoronix.com/scan.php?page=article&item=linux-415-fs&num=1

Change-Id: I75e00af687d46551e19178604b60665342cf2cae
Closes-Bug: #1753790
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
2018-05-18 22:14:50 +00:00

155 lines
4.7 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"
options: "{{ bootstrap_host_data_mount_options['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 }}"
options: "{{ bootstrap_host_data_disk2_fs_mount_options }}"
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