tripleo-ansible/tripleo_ansible/roles/tripleo_cephadm/tasks/ceph_vip.yaml

92 lines
3.0 KiB
YAML

---
# Copyright 2022 Red Hat, Inc.
# All Rights Reserved.
#
# 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.
# Assumes the following module is in ANSIBLE_LIBRARY=/usr/share/ansible/library/
# https://github.com/ceph/ceph-ansible/blob/master/library/ceph_pool.py
- fail:
msg: stack_name is a required input
when:
- stack_name is undefined
- fail:
msg: ceph_service_mapping is a required input
when:
- tripleo_cephadm_ha_services_path is undefined
- name: Load Virtual IP Ceph networks data config from file
set_fact:
ceph_vip_map: "{{ lookup('file', tripleo_cephadm_ha_services_path) | from_yaml }}"
when:
- ceph_vip_map is undefined
- name: Store reserved vip info
set_fact:
render_path: '{{ working_dir }}/ceph_vips.yaml'
- name: Network/Subnet based Ceph VIPs build
block:
- name: Sanity check on user input
fail:
msg: ERROR, subnet or network missing!
when:
- item.get('network', '') | length == 0
- item.get('subnet', '') | length == 0
loop: "{{ ceph_vip_map.get('ceph_services', {}) }}"
- name: Build Ceph VIPs (subnet)
tripleo_service_vip:
render_path: "{{ render_path }}"
stack_name: "{{ stack_name }}"
service_name: "{{ item.service }}"
network: "{{ item.network }}"
fixed_ips:
- {"subnet": "{{ item.get('subnet', item.network + '_subnet') }}"}
loop: "{{ ceph_vip_map.get('ceph_services', {}) }}"
register: services_subnet
when: not ceph_vip_map.get('fixed')
- name: Fixed IPs based Ceph VIPs build
block:
- name: Sanity check on user input
fail:
msg: ERROR, missing fixed ip_address!
when:
- item.get('ip_address','') | length == 0
loop: "{{ ceph_vip_map.get('ceph_services', {}) }}"
- name: Build Ceph VIPs (fixed_ips)
tripleo_service_vip:
render_path: "{{ render_path }}"
stack_name: "{{ stack_name }}"
service_name: "{{ item.service }}"
network: "{{ item.network }}"
fixed_ips:
- {"ip_address": "{{ item.get('ip_address', None) }}"}
loop: "{{ ceph_vip_map.get('ceph_services', {}) }}"
register: services_fixed
when: ceph_vip_map.get('fixed')
- name: set ceph services vip data
set_fact:
tripleo_cephadm_ceph_vips: |
{% if ceph_vip_map.get('fixed') %}
{% set _len = (services_fixed.results | length | int) -1 %}
{{ services_fixed.results[_len].data }}
{% else %}
{% set _len = (services_subnet.results | length | int) -1 %}
{{ services_subnet.results[_len].data }}
{% endif %}