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>
This commit is contained in:
Markos Chandras 2018-03-12 15:06:32 +00:00 committed by Kevin Carter (cloudnull)
parent 0630c67f7e
commit 74027265b1
18 changed files with 425 additions and 197 deletions

View File

@ -206,3 +206,15 @@
src: https://git.openstack.org/openstack/openstack-ansible-nspawn_hosts src: https://git.openstack.org/openstack/openstack-ansible-nspawn_hosts
scm: git scm: git
version: master version: master
- name: systemd_service
src: https://git.openstack.org/openstack/ansible-role-systemd_service
scm: git
version: master
- name: systemd_mount
src: https://git.openstack.org/openstack/ansible-role-systemd_mount
scm: git
version: master
- name: systemd_networkd
src: https://git.openstack.org/openstack/ansible-role-systemd_networkd
scm: git
version: master

View File

@ -321,14 +321,19 @@ function get_instance_info {
esac esac
# Storage reports # Storage reports
btrfs filesystem usage /var/lib/machines > \ for dir_name in lxc machines; do
"/openstack/log/instance-info/machines_usage_${TS}.log" || true btrfs filesystem usage /var/lib/${dir_name} > \
btrfs filesystem show /var/lib/machines >> \ "/openstack/log/instance-info/btrfs_${dir_name}_usage_${TS}.log" || true
"/openstack/log/instance-info/machines_show_${TS}.log" || true btrfs filesystem show /var/lib/${dir_name} > \
btrfs filesystem df /var/lib/machines >> \ "/openstack/log/instance-info/btrfs_${dir_name}_show_${TS}.log" || true
"/openstack/log/instance-info/machines_df_${TS}.log" || true btrfs filesystem df /var/lib/${dir_name} > \
btrfs qgroup show --human-readable -pcre --iec /var/lib/machines >> \ "/openstack/log/instance-info/btrfs_${dir_name}_df_${TS}.log" || true
"/openstack/log/instance-info/machines_quotas_${TS}.log" || true btrfs qgroup show --human-readable -pcre --iec /var/lib/${dir_name} > \
"/openstack/log/instance-info/btrfs_${dir_name}_quotas_${TS}.log" || true
done
zfs list > "/openstack/log/instance-info/zfs_lxc_${TS}.log" || true
df -h > "/openstack/log/instance-info/report_fs_df_${TS}.log" || true df -h > "/openstack/log/instance-info/report_fs_df_${TS}.log" || true
} }

View File

@ -57,22 +57,16 @@ bootstrap_user_variables_extra_templates:
- src: user_variables_octavia.yml.j2 - src: user_variables_octavia.yml.j2
dest: user_variables_octavia.yml dest: user_variables_octavia.yml
## Swap memory
# If there is no swap memory present, the bootstrap will create a loopback disk
# for the purpose of having swap memory available. Swap is required for some of
# the services deployed and is useful for AIO's built with less than 16GB memory.
# By default the swap size is set to 8GB unless the host memory is less than 8GB,
# in which case it is set to 4GB.
bootstrap_host_swap_size: "{% if ansible_memory_mb['real']['total'] < 8*1024 %}4{% else %}8{% endif %}"
## Loopback volumes ## Loopback volumes
# Sparse loopback disks are used for the containers if there is no secondary # Sparse loopback disks are used for the containers if there is no secondary
# disk available to partition for btrfs. They are also used for Ceph, Cinder, # disk available to partition for btrfs. They are also used for Ceph, Cinder,
# Swift and Nova (instance storage). # Swift and Nova (instance storage).
# The size of the loopback volumes can be customized here (in gigabytes). # The size of the loopback volumes can be customized here (in gigabytes).
# #
# Size of the machines loopback disk in gigabytes (GB). # Boolean option to deploy the loopback disk for Swap
bootstrap_host_loopback_machines_size: 128 bootstrap_host_loopback_swap: yes
# Size of the Swap loopback disk in gigabytes (GB).
bootstrap_host_loopback_swap_size: 4096
# #
# Boolean option to deploy the loopback disk for Cinder # Boolean option to deploy the loopback disk for Cinder
bootstrap_host_loopback_cinder: yes bootstrap_host_loopback_cinder: yes
@ -88,7 +82,22 @@ bootstrap_host_loopback_swift_size: 1024
bootstrap_host_loopback_nova: yes bootstrap_host_loopback_nova: yes
# Size of the Nova loopback disk in gigabytes (GB). # Size of the Nova loopback disk in gigabytes (GB).
bootstrap_host_loopback_nova_size: 1024 bootstrap_host_loopback_nova_size: 1024
#
# Boolean option to deploy the loopback disk for machines
bootstrap_host_loopback_machines: yes
# Size of the machines loopback disk in gigabytes (GB).
bootstrap_host_loopback_machines_size: 128
#
# Boolean option to deploy the loopback disk for btrfs
bootstrap_host_loopback_btrfs: yes
# Size of the btrfs loopback disk in gigabytes (GB).
bootstrap_host_loopback_btrfs_size: 1024
#
# Boolean option to deploy the loopback disk for btrfs
bootstrap_host_loopback_zfs: yes
# Size of the btrfs loopback disk in gigabytes (GB).
bootstrap_host_loopback_zfs_size: 1024
#
# Boolean option to deploy the OSD loopback disks and cluster UUID for Ceph # Boolean option to deploy the OSD loopback disks and cluster UUID for Ceph
bootstrap_host_ceph: "{{ (bootstrap_host_scenario == 'ceph') | bool }}" bootstrap_host_ceph: "{{ (bootstrap_host_scenario == 'ceph') | bool }}"
# Size of the Ceph OSD loopbacks # Size of the Ceph OSD loopbacks
@ -210,7 +219,8 @@ bridge_iptables_rules: |
# WARNING: The data on a secondary storage device specified here will # WARNING: The data on a secondary storage device specified here will
# be destroyed and repartitioned. # be destroyed and repartitioned.
# #
# Specify the secondary disk device to use. # Specify the secondary disk device to use. When the data disk is in use, no NOT
# set the full path to the device. IE: "/dev/xvde" should be "xvde".
bootstrap_host_data_disk_device: null bootstrap_host_data_disk_device: null
# #
# Boolean value to force the repartitioning of the secondary device. # Boolean value to force the repartitioning of the secondary device.
@ -219,6 +229,19 @@ bootstrap_host_data_disk_device_force: no
# If the storage capacity on this device is greater than or equal to this # If the storage capacity on this device is greater than or equal to this
# size (in GB), the bootstrap process will use it. # size (in GB), the bootstrap process will use it.
bootstrap_host_data_disk_min_size: 50 bootstrap_host_data_disk_min_size: 50
#
# Set the data disk formats table. If the backing store is set to lvm the option
# the partition will not actually be formatted however for parted, ext2 is used.
bootstrap_host_data_disk2_formats:
machinectl: btrfs
zfs: zfs
btrfs: btrfs
dir: ext4
lvm: ext2
bootstrap_host_data_disk2_fs: "{{ bootstrap_host_data_disk2_formats[lxc_container_backing_store] }}"
bootstrap_host_data_disk2_path: "{{ (lxc_container_backing_store == 'machinectl' or container_tech == 'nspawn') | ternary('/var/lib/machines', '/var/lib/lxc') }}"
# Boolean option to build Amphora image and certs # Boolean option to build Amphora image and certs
bootstrap_host_octavia: "{{ (bootstrap_host_scenario in ['octavia', 'translations']) | bool }}" bootstrap_host_octavia: "{{ (bootstrap_host_scenario in ['octavia', 'translations']) | bool }}"
@ -232,3 +255,6 @@ bootstrap_host_octavia: "{{ (bootstrap_host_scenario in ['octavia', 'translation
# Set the container technology in service. Options are nspawn and lxc. # Set the container technology in service. Options are nspawn and lxc.
container_tech: "{{ ('nspawn' in bootstrap_host_scenario) | ternary('nspawn', 'lxc') }}" container_tech: "{{ ('nspawn' in bootstrap_host_scenario) | ternary('nspawn', 'lxc') }}"
# Set the lxc backing store for the job
lxc_container_backing_store: machinectl

View File

@ -34,7 +34,8 @@
else else
df -BK / | awk '!/^Filesystem/ {print $4}' | sed 's/K//' df -BK / | awk '!/^Filesystem/ {print $4}' | sed 's/K//'
fi fi
when: bootstrap_host_data_disk_device == None when:
- bootstrap_host_data_disk_device == None
changed_when: false changed_when: false
register: root_space_available register: root_space_available
tags: tags:
@ -62,7 +63,8 @@
- name: Calculate data disk size - name: Calculate data disk size
set_fact: set_fact:
host_data_disk_size_bytes: "{{ ((host_data_disk_sectors | int) * (host_data_disk_sectorsize | int)) | int }}" host_data_disk_size_bytes: "{{ ((host_data_disk_sectors | int) * (host_data_disk_sectorsize | int)) | int }}"
when: bootstrap_host_data_disk_device != None when:
- bootstrap_host_data_disk_device != None
tags: tags:
- check-disk-size - check-disk-size

View File

@ -46,27 +46,47 @@
# Prepare the data disk, if one is provided # Prepare the data disk, if one is provided
- include: prepare_data_disk.yml - include: prepare_data_disk.yml
when: bootstrap_host_data_disk_device != None when:
- bootstrap_host_data_disk_device != None
tags: tags:
- prepare-data-disk - prepare-data-disk
# Prepare the Machines storage loopback disk
# This is only necessary when there is no secondary disk
# available to partition for btrfs
- include: prepare_loopback_machines.yml
when:
- bootstrap_host_data_disk_device == None
tags:
- prepare-loopback-machines
# Prepare the swap space loopback disk # Prepare the swap space loopback disk
# This is only necessary if there isn't swap already # This is only necessary if there isn't swap already
- include: prepare_loopback_swap.yml - include: prepare_loopback_swap.yml
static: no static: no
when: when:
- bootstrap_host_loopback_swap | bool
- ansible_swaptotal_mb < 1 - ansible_swaptotal_mb < 1
tags: tags:
- prepare-loopback-swap - prepare-loopback
# Prepare the Machines storage loopback disk
- include: prepare_loopback_machines.yml
when:
- bootstrap_host_loopback_machines | bool
- bootstrap_host_data_disk_device == None
- lxc_container_backing_store == 'machinectl' or container_tech == 'nspawn'
tags:
- prepare-loopback
# Prepare the zfs storage loopback disk
- include: prepare_loopback_zfs.yml
when:
- bootstrap_host_loopback_zfs | bool
- bootstrap_host_data_disk_device == None
- lxc_container_backing_store == 'zfs'
tags:
- prepare-loopback
# Prepare the btrfs storage loopback disk
- include: prepare_loopback_btrfs.yml
when:
- bootstrap_host_loopback_btrfs | bool
- bootstrap_host_data_disk_device == None
- lxc_container_backing_store == 'btrfs'
tags:
- prepare-loopback
# Prepare the Cinder LVM VG loopback disk # Prepare the Cinder LVM VG loopback disk
# This is only necessary if bootstrap_host_loopback_cinder is set to yes # This is only necessary if bootstrap_host_loopback_cinder is set to yes
@ -74,21 +94,21 @@
when: when:
- bootstrap_host_loopback_cinder | bool - bootstrap_host_loopback_cinder | bool
tags: tags:
- prepare-loopback-cinder - prepare-loopback
# Prepare the Nova instance storage loopback disk # Prepare the Nova instance storage loopback disk
- include: prepare_loopback_nova.yml - include: prepare_loopback_nova.yml
when: when:
- bootstrap_host_loopback_nova | bool - bootstrap_host_loopback_nova | bool
tags: tags:
- prepare-loopback-nova - prepare-loopback
# Prepare the Swift data storage loopback disks # Prepare the Swift data storage loopback disks
- include: prepare_loopback_swift.yml - include: prepare_loopback_swift.yml
when: when:
- bootstrap_host_loopback_swift | bool - bootstrap_host_loopback_swift | bool
tags: tags:
- prepare-loopback-swift - prepare-loopback
# Prepare the Ceph cluster UUID and loopback disks # Prepare the Ceph cluster UUID and loopback disks
- include: prepare_ceph.yml - include: prepare_ceph.yml
@ -121,6 +141,7 @@
# Put the OpenStack-Ansible configuration for an All-In-One on the host # Put the OpenStack-Ansible configuration for an All-In-One on the host
- include: prepare_aio_config.yml - include: prepare_aio_config.yml
when: bootstrap_host_aio_config | bool when:
- bootstrap_host_aio_config | bool
tags: tags:
- prepare-aio-config - prepare-aio-config

View File

@ -19,34 +19,44 @@
creates: "/openstack/{{ item }}.img" creates: "/openstack/{{ item }}.img"
with_items: "{{ ceph_osd_images }}" with_items: "{{ ceph_osd_images }}"
register: ceph_create register: ceph_create
changed_when: false
tags: tags:
- ceph-file-create - ceph-file-create
- name: Create the ceph loopback device - name: Run the systemd service role
command: losetup -f /openstack/{{ item.item }}.img --show include_role:
with_items: "{{ ceph_create.results }}" name: systemd_service
register: ceph_create_loopback private: true
when: not item|skipped vars:
systemd_services:
- service_name: "loop-{{ loopback_var }}"
config_overrides:
Unit:
Description: no
After: systemd-udev-settle.service
Service:
RemainAfterExit: yes
service_type: oneshot
execstarts:
- /bin/bash -c "/sbin/losetup $(/sbin/losetup -f) /openstack/{{ loopback_var }}.img"
execstops:
- /bin/bash -c "losetup -d $(losetup -l | awk '/{{ loopback_var }}.img/ {print $1}')"
enabled: yes
state: started
systemd_tempd_prefix: openstack
with_items: "{{ ceph_osd_images }}"
loop_control:
loop_var: loopback_var
tags:
- ceph-config
- name: Get loopback device
shell: "losetup -l | awk '/{{ item }}.img/ {print $1}'"
changed_when: false changed_when: false
register: ceph_create_loopback
with_items: "{{ ceph_osd_images }}"
tags: tags:
- skip_ansible_lint - skip_ansible_lint
- name: Ensure that rc.local exists
file:
path: "{{ rc_local }}"
state: touch
mode: "u+x"
tags:
- ceph-rc-file
- name: Create ceph loopback at boot time
lineinfile:
dest: "{{ rc_local }}"
line: "losetup -f /openstack/{{ item }}.img"
insertbefore: "{{ rc_local_insert_before }}"
with_items: "{{ ceph_osd_images }}"
# TODO(logan): Move these vars to user_variables.ceph.yml.j2 once LP #1649381 # TODO(logan): Move these vars to user_variables.ceph.yml.j2 once LP #1649381
# is fixed and eliminate this task. # is fixed and eliminate this task.
- name: Write ceph cluster config - name: Write ceph cluster config

View File

@ -27,6 +27,13 @@
tags: tags:
- check-data-disk-partitions - 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 - name: Dismount and remove fstab entries for anything on the data disk device
mount: mount:
name: "{{ item.mount }}" name: "{{ item.mount }}"
@ -34,46 +41,112 @@
fstype: ext4 fstype: ext4
state: absent state: absent
when: when:
- data_disk_partitions.rc == 1 or bootstrap_host_data_disk_device_force | bool - bootstrap_host_data_disk_device_force | bool
- item.device | search(bootstrap_host_data_disk_device) - item.device | search(bootstrap_host_data_disk_device)
with_items: with_items:
- "{{ ansible_mounts }}" - "{{ ansible_mounts }}"
- name: Partition the whole data disk for our usage - name: Partition the whole data disk for our usage
command: "{{ item }}" command: "{{ item }}"
when: data_disk_partitions.rc == 1 or bootstrap_host_data_disk_device_force | bool when:
- bootstrap_host_data_disk_device_force | bool
with_items: with_items:
- "parted --script /dev/{{ bootstrap_host_data_disk_device | regex_replace('!','/') }} mklabel gpt" - "parted --script /dev/{{ _bootstrap_host_data_disk_device }} mklabel gpt"
- "parted --align optimal --script /dev/{{ bootstrap_host_data_disk_device | regex_replace('!','/') }} mkpart openstack-data1 ext4 0% 40%" - "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 | regex_replace('!','/') }} mkpart openstack-data2 btrfs 40% 100%" - "parted --align optimal --script /dev/{{ _bootstrap_host_data_disk_device }} mkpart openstack-data2 {{ bootstrap_host_data_disk2_fs }} 40% 100%"
tags: tags:
- create-data-disk-partitions - create-data-disk-partitions
- name: Format the partitions - name: Format the partition 1
filesystem: filesystem:
fstype: "{{ item.fstype }}" fstype: ext4
dev: "{{ item.dev }}" dev: "/dev/{{ _bootstrap_host_data_disk_device }}1"
when: data_disk_partitions.rc == 1 or bootstrap_host_data_disk_device_force | bool when:
with_items: - bootstrap_host_data_disk_device_force | bool
- dev: "/dev/{{ bootstrap_host_data_disk_device | regex_replace('!(.*)$','/\\1p') }}1"
fstype: "ext4"
- dev: "/dev/{{ bootstrap_host_data_disk_device | regex_replace('!(.*)$','/\\1p') }}2"
fstype: "btrfs"
tags: tags:
- format-data-partitions - format-data-partitions
- name: Create the mount points, fstab entries and mount the file systems - name: Format the partition 2
mount: filesystem:
name: "{{ item.mount_point }}" fstype: "{{ bootstrap_host_data_disk2_fs }}"
src: "{{ item.device }}" dev: "/dev/{{ _bootstrap_host_data_disk_device }}2"
fstype: "{{ item.fstype }}" when:
state: mounted - bootstrap_host_data_disk_device_force | bool
with_items: - lxc_container_backing_store != 'lvm'
- mount_point: /openstack - lxc_container_backing_store != 'zfs'
device: "/dev/{{ bootstrap_host_data_disk_device | regex_replace('!(.*)$','/\\1p') }}1"
fstype: ext4
- mount_point: /var/lib/machines
device: "/dev/{{ bootstrap_host_data_disk_device | regex_replace('!(.*)$','/\\1p') }}2"
fstype: btrfs
tags: tags:
- mount-data-partitions - 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

View File

@ -0,0 +1,39 @@
---
# Copyright 2018, 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.
- name: Create sparse lxc-btrfs file
command: "truncate -s {{ bootstrap_host_loopback_btrfs_size }}G /openstack/lxc-btrfs.img"
args:
creates: /openstack/lxc-btrfs.img
- name: Format the lxc-btrfs file
filesystem:
fstype: btrfs
dev: /openstack/lxc-btrfs.img
- name: Run the systemd mount role
include_role:
name: systemd_mount
private: true
vars:
systemd_mounts:
- what: "/openstack/lxc-btrfs.img"
where: "/var/lib/lxc"
options: "loop"
type: "btrfs"
state: 'started'
enabled: true
tags:
- lxc-config

View File

@ -21,45 +21,51 @@
tags: tags:
- cinder-file-create - cinder-file-create
- name: Get a loopback device for cinder file - name: Run the systemd service role
command: losetup -f include_role:
when: cinder_create | changed name: systemd_service
private: true
vars:
systemd_services:
- service_name: "loop-cinder"
config_overrides:
Unit:
Description: no
After: systemd-udev-settle.service
Before: lvm2-activation-early.service
Wants: systemd-udev-settle.service
Service:
RemainAfterExit: yes
service_type: oneshot
execstarts:
- /bin/bash -c "/sbin/losetup $(/sbin/losetup -f) /openstack/cinder.img"
- /sbin/pvscan
execstops:
- /bin/bash -c "losetup -d $(losetup -l | awk '/cinder.img/ {print $1}')"
enabled: yes
state: started
systemd_tempd_prefix: openstack
tags:
- cinder-config
- name: Get loopback device
shell: "losetup -l | awk '/cinder.img/ {print $1}'"
changed_when: false
register: cinder_losetup register: cinder_losetup
tags: tags:
- cinder-device-get - skip_ansible_lint
- name: Create the loopback device
command: "losetup {{ cinder_losetup.stdout }} /openstack/cinder.img"
when: cinder_create | changed
tags:
- cinder-device-create
- name: Ensure that rc.local exists
file:
path: "{{ rc_local }}"
state: touch
mode: "u+x"
tags:
- cinder-rc-file
# As the cinder loopback is an LVM VG, it needs to be mounted differently
# to the other loopback files. It requires the use of rc.local to attach
# the loopback device on boot so that the VG becomes available immediately
# after the boot process completes.
- name: Create loopback devices at boot time
lineinfile:
dest: "{{ rc_local }}"
line: "losetup $(losetup -f) /openstack/cinder.img"
insertbefore: "{{ rc_local_insert_before }}"
tags:
- cinder-rc-config
- name: Make LVM physical volume on the cinder device - name: Make LVM physical volume on the cinder device
command: "{{ item }}" shell: "pvcreate {{ cinder_losetup.stdout }} && touch /openstack/cinder.pvcreate"
when: cinder_create | changed args:
with_items: creates: "/openstack/cinder.pvcreate"
- "pvcreate {{ cinder_losetup.stdout }}" tags:
- "pvscan" - skip_ansible_lint
- cinder-lvm-pv
- name: Run pvscan
command: "pvscan"
changed_when: false
tags: tags:
- cinder-lvm-pv - cinder-lvm-pv
@ -67,6 +73,5 @@
lvg: lvg:
vg: cinder-volumes vg: cinder-volumes
pvs: "{{ cinder_losetup.stdout }}" pvs: "{{ cinder_losetup.stdout }}"
when: cinder_create | changed
tags: tags:
- cinder-lvm-vg - cinder-lvm-vg

View File

@ -27,11 +27,17 @@
tags: tags:
- machines-format-file - machines-format-file
- name: Create the mount points, fstab entries and mount the file systems - name: Run the systemd mount role
mount: include_role:
name: /var/lib/machines name: systemd_mount
src: /openstack/machines.img private: true
fstype: btrfs vars:
state: mounted systemd_mounts:
- what: "/openstack/machines.img"
where: "/var/lib/machines"
options: "loop"
type: "btrfs"
state: 'started'
enabled: true
tags: tags:
- machines-file-mount - machines-config

View File

@ -17,7 +17,6 @@
command: "truncate -s {{ bootstrap_host_loopback_nova_size }}G /openstack/nova.img" command: "truncate -s {{ bootstrap_host_loopback_nova_size }}G /openstack/nova.img"
args: args:
creates: /openstack/nova.img creates: /openstack/nova.img
register: nova_create
tags: tags:
- nova-file-create - nova-file-create
@ -25,15 +24,20 @@
filesystem: filesystem:
fstype: ext4 fstype: ext4
dev: /openstack/nova.img dev: /openstack/nova.img
when: nova_create | changed
tags: tags:
- nova-format-file - nova-format-file
- name: Create the mount points, fstab entries and mount the file systems - name: Run the systemd mount role
mount: include_role:
name: /var/lib/nova/instances name: systemd_mount
src: /openstack/nova.img private: true
fstype: ext4 vars:
state: mounted systemd_mounts:
- what: "/openstack/nova.img"
where: "/var/lib/nova/instances"
options: "loop"
type: "ext4"
state: 'started'
enabled: true
tags: tags:
- nova-file-mount - nova-config

View File

@ -14,55 +14,35 @@
# limitations under the License. # limitations under the License.
- name: Create swap file - name: Create swap file
command: "{{ swap_create_command }}" command: "dd if=/dev/zero of=/openstack/swap.img bs=1M count={{ bootstrap_host_loopback_swap_size }}"
args: args:
creates: /openstack/swap.img creates: /openstack/swap.img
register: swap_create register: swap_create
tags: tags:
- swap-file-create - swap-file-create
- name: Set swap file permissions to 0600
file:
path: /openstack/swap.img
mode: 0600
tags:
- swap-permissions
- name: Format the swap file - name: Format the swap file
command: mkswap /openstack/swap.img command: mkswap /openstack/swap.img
when: swap_create | changed when:
- swap_create | changed
tags: tags:
- swap-format - swap-format
- name: Ensure that the swap file entry is in /etc/fstab
mount:
name: none
src: /openstack/swap.img
fstype: swap
opts: sw
passno: 0
dump: 0
state: present
tags:
- swap-fstab
- name: Bring swap file online
shell: |
return_code=0
if ! grep /openstack/swap.img /proc/swaps; then
swapon /openstack/swap.img
return_code=2
fi
exit ${return_code}
register: _set_swap_online
changed_when: _set_swap_online.rc == 2
failed_when: _set_swap_online.rc not in [0, 2]
# We skip ansible lint testing for this task as it fails with
# ANSIBLE0014 Environment variables don't work as part of command
# which is nonsense.
tags:
- skip_ansible_lint - skip_ansible_lint
- swap-online
- name: Run the systemd mount role
include_role:
name: systemd_mount
private: true
vars:
systemd_mounts:
- what: "/openstack/swap.img"
priority: "0"
options: "%%"
type: "swap"
state: 'started'
enabled: true
tags:
- swap-config
- name: Set system swappiness - name: Set system swappiness
sysctl: sysctl:

View File

@ -21,7 +21,6 @@
- 'swift1' - 'swift1'
- 'swift2' - 'swift2'
- 'swift3' - 'swift3'
register: swift_create
tags: tags:
- swift-file-create - swift-file-create
@ -30,7 +29,6 @@
fstype: xfs fstype: xfs
opts: '-K' opts: '-K'
dev: "/openstack/{{ item }}.img" dev: "/openstack/{{ item }}.img"
when: swift_create | changed
with_items: with_items:
- 'swift1' - 'swift1'
- 'swift2' - 'swift2'
@ -38,18 +36,29 @@
tags: tags:
- swift-format-file - swift-format-file
- name: Create the Swift mount points, fstab entries and mount the file systems - name: Run the systemd mount role
mount: include_role:
name: "/srv/{{ item }}.img" name: systemd_mount
src: "/openstack/{{ item }}.img" private: true
fstype: xfs vars:
opts: 'loop,noatime,nodiratime,nobarrier,logbufs=8' systemd_mounts:
passno: 0 - what: "/openstack/swift1.img"
dump: 0 where: "/srv/swift1.img"
state: mounted options: "loop,noatime,nodiratime,nobarrier,logbufs=8"
with_items: type: "xfs"
- 'swift1' state: 'started'
- 'swift2' enabled: true
- 'swift3' - what: "/openstack/swift2.img"
where: "/srv/swift2.img"
options: "loop,noatime,nodiratime,nobarrier,logbufs=8"
type: "xfs"
state: 'started'
enabled: true
- what: "/openstack/swift3.img"
where: "/srv/swift3.img"
options: "loop,noatime,nodiratime,nobarrier,logbufs=8"
type: "xfs"
state: 'started'
enabled: true
tags: tags:
- swift-file-mount - swift-config

View File

@ -0,0 +1,37 @@
---
# Copyright 2018, 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.
- name: Install zfs packages
package:
name: "{{ packages_install_zfs }}"
state: present
update_cache: "{{ (ansible_pkg_mgr in ['apt', 'zypper']) | ternary('yes', omit) }}"
tags:
- install-packages
- name: Create sparse ZFS backing file
command: "truncate -s {{ bootstrap_host_loopback_zfs_size }}G /openstack/lxc-zfs.img"
args:
creates: /openstack/lxc-zfs.img
- name: Create the ZFS pool
command: zpool create osa-test-pool /openstack/lxc-zfs.img
args:
creates: /osa-test-pool
- name: Create the ZFS pool/lxc volume
shell: "(zfs list | grep lxc) || zfs create -o mountpoint=/var/lib/lxc osa-test-pool/lxc"
tags:
- skip_ansible_lint

View File

@ -163,7 +163,7 @@ cache_timeout: {{ cache_timeout }}
# The container backing store is set to 'machinectl' to speed up the # The container backing store is set to 'machinectl' to speed up the
# AIO build time. Options are: [machinectl, overlayfs, btrfs, zfs, dir, lvm] # AIO build time. Options are: [machinectl, overlayfs, btrfs, zfs, dir, lvm]
lxc_container_backing_store: "machinectl" lxc_container_backing_store: "{{ lxc_container_backing_store }}"
## Enable LBaaSv2 in the AIO ## Enable LBaaSv2 in the AIO
neutron_plugin_base: neutron_plugin_base:

View File

@ -33,7 +33,5 @@ packages_install:
packages_remove: [] packages_remove: []
swap_create_command: "dd if=/dev/zero of=/openstack/swap.img bs=1M count={{ (bootstrap_host_swap_size | int) * 1024 }}"
rc_local: /etc/rc.d/rc.local rc_local: /etc/rc.d/rc.local
rc_local_insert_before: "^touch /var/lock/subsys/local$" rc_local_insert_before: "^touch /var/lock/subsys/local$"

View File

@ -35,6 +35,5 @@ packages_install:
packages_remove: [] packages_remove: []
swap_create_command: "dd if=/dev/zero of=/openstack/swap.img bs=1M count={{ (bootstrap_host_swap_size | int) * 1024 }}"
rc_local: /etc/rc.d/boot.local rc_local: /etc/rc.d/boot.local
rc_local_insert_before: EOF rc_local_insert_before: EOF

View File

@ -36,10 +36,12 @@ packages_install:
- vlan - vlan
- xfsprogs - xfsprogs
packages_install_zfs:
- zfsutils-linux
packages_remove: packages_remove:
- libmysqlclient18 - libmysqlclient18
- mysql-common - mysql-common
swap_create_command: "fallocate -l {{ bootstrap_host_swap_size }}G /openstack/swap.img"
rc_local: /etc/rc.local rc_local: /etc/rc.local
rc_local_insert_before: "^exit 0$" rc_local_insert_before: "^exit 0$"