openstack-ansible-plugins/roles/glusterfs/tasks/main.yml

145 lines
5.0 KiB
YAML

---
# Copyright 2022, BBC R&D.
#
# 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: Gather variables for each operating system
include_vars: "{{ lookup('first_found', params) }}"
vars:
params:
files:
- "{{ ansible_facts['distribution'] | lower }}-{{ ansible_facts['distribution_version'] | lower }}.yml"
- "{{ ansible_facts['distribution'] | lower }}-{{ ansible_facts['distribution_major_version'] | lower }}.yml"
- "{{ ansible_facts['os_family'] | lower }}-{{ ansible_facts['distribution_major_version'] | lower }}.yml"
- "{{ ansible_facts['distribution'] | lower }}.yml"
- "{{ ansible_facts['os_family'] | lower }}-{{ ansible_facts['distribution_version'].split('.')[0] }}.yml"
- "{{ ansible_facts['os_family'] | lower }}.yml"
paths:
- "{{ role_path }}/vars"
tags:
- always
- name: Enable repos for redhat variants
when: ansible_facts['pkg_mgr'] == 'dnf'
block:
- name: Enable extra repositories
command: dnf config-manager --set-enabled "{{ item }}"
changed_when: false
with_items: "{{ glusterfs_server_dnf_enable }}"
- name: Install gluster repo packages
package:
name: "{{ glusterfs_server_dnf_sig_packages }}"
- name: Apply systemctl overrides
import_role:
name: systemd_service
vars:
systemd_services:
- service_name: systemd-tmpfiles-setup-dev
load: false
systemd_overrides_only: true
systemd_overrides:
Unit:
ConditionCapability: ""
- name: Install glusterfs server packages
package:
name: "{{ glusterfs_server_distro_packages }}"
state: "{{ glusterfs_package_state }}"
- name: Drop glusterfs-wait.sh script
copy:
src: glusterfs-wait.sh
dest: /usr/local/sbin
mode: 0744
- name: Add glusterd.service overrides
import_role:
name: systemd_service
vars:
systemd_services:
- service_name: glusterd
systemd_overrides_only: true
systemd_overrides:
Service:
ExecStartPost: "/usr/local/sbin/glusterfs-wait.sh"
- name: Configure systemd-tmpfiles to create /dev/fuse at boot
copy:
content: "c /dev/fuse 0600 - - - 10:229"
dest: "/etc/tmpfiles.d/openstack-ansible-glusterfs-server.conf"
when: not (is_metal | default(False))
register: _glusterfs_server_tmpfiles
- name: Restart systemd-tmpfiles-setup-dev
service:
name: "systemd-tmpfiles-setup-dev"
enabled: yes
state: restarted
when:
- not (is_metal | default(False))
- _glusterfs_server_tmpfiles is changed
- name: Start glusterfs server
service:
name: "{{ glusterfs_server_service }}"
enabled: true
state: started
- name: Create gluster peers
gluster.gluster.gluster_peer:
nodes: "{{ glusterfs_server_cluster_members }}"
when: _glusterfs_is_first_play_host
- name: Ensure glusterfs backing directory exists
file:
path: "{{ glusterfs_server_backing_dir }}"
state: directory
register: _backing_dir_create
- name: Check brick status
throttle: 1
command: gluster volume status {{ glusterfs_server_volume_name }} {{ inventory_hostname| regex_replace('_', '-') }}:{{ glusterfs_server_bricks }} detail
register: _brick_online_status
changed_when: false
failed_when: false
#NOTE (jrosser) run this task if we just created the data dir, the volume exists (status was available)
# and the brick on this node is offline. This covers a destroy/create of an existing host
- name: Reset brick for a replaced node
vars:
brick: "{{ inventory_hostname | regex_replace('_', '-') }}:{{ glusterfs_server_bricks }}"
command: "{{ item }}"
when:
- _backing_dir_create is changed
- _brick_online_status.rc == 0
- (_brick_online_status.stdout_lines | select('contains', 'Online'))[0] | regex_search('N')
with_items:
- gluster volume reset-brick {{ glusterfs_server_volume_name }} {{ brick }} start
- gluster volume reset-brick {{ glusterfs_server_volume_name }} {{ brick }} {{ brick }} commit force
- name: Create gluster volume
vars:
num_cluster_members: "{{ glusterfs_server_cluster_members | length }}"
cluster_has_replicas: "{{ (glusterfs_server_cluster_members | length) > 1 }}"
gluster.gluster.gluster_volume:
state: present
name: "{{ glusterfs_server_volume_name }}"
bricks: "{{ glusterfs_server_bricks }}"
replicas: "{{ cluster_has_replicas | ternary(num_cluster_members, omit) }}"
cluster: "{{ glusterfs_server_cluster_members | map('regex_replace', '_', '-') | list }}"
force: true
when: _glusterfs_is_first_play_host