c4b74f4801
In some cases it may be desirable to run libvirt daemon on the host. For example, when mixing host and container OS distributions. This change makes it possible to disable the nova_libvirt container, by setting kolla_enable_nova_libvirt_container to false. The stackhpc.libvirt-host role is used in order to install and configure a libvirt daemon on compute hosts when kolla_enable_nova_libvirt_container is false. Depends-On: https://review.opendev.org/c/openstack/kolla-ansible/+/825357 Depends-On: https://review.opendev.org/c/openstack/kayobe-config-dev/+/829225 Depends-On: https://github.com/stackhpc/ansible-role-libvirt-host/pull/51 Story: 2009858 Task: 44495 Change-Id: I73fef63fb886a9d543d2f4231fb009523495edb3
254 lines
12 KiB
YAML
254 lines
12 KiB
YAML
---
|
|
- name: Check whether Ironic is enabled
|
|
hosts: controllers
|
|
gather_facts: False
|
|
tags:
|
|
- config
|
|
- config-validation
|
|
- kolla-ansible
|
|
- kolla-openstack
|
|
tasks:
|
|
- name: Create controllers group with ironic enabled
|
|
group_by:
|
|
key: "controllers_with_ironic_enabled_{{ kolla_enable_ironic | bool }}"
|
|
changed_when: false
|
|
|
|
- name: Ensure locally built Ironic Python Agent images are copied
|
|
hosts: controllers_with_ironic_enabled_True[0]
|
|
gather_facts: False
|
|
tags:
|
|
- kolla-ansible
|
|
- kolla-openstack
|
|
vars:
|
|
# These are the filenames generated by overcloud-ipa-build.yml.
|
|
ipa_image_name: "ipa"
|
|
ipa_images:
|
|
- "{{ ipa_image_name }}.kernel"
|
|
- "{{ ipa_image_name }}.initramfs"
|
|
tasks:
|
|
- block:
|
|
- block:
|
|
- name: Check for the presence of locally built Ironic Python Agent (IPA) images
|
|
stat:
|
|
path: "{{ image_cache_path }}/{{ ipa_image_name }}/{{ item }}"
|
|
get_md5: False
|
|
get_checksum: False
|
|
mime: False
|
|
with_items: "{{ ipa_images }}"
|
|
register: ipa_image_stat
|
|
|
|
- name: Validate the presence of locally built Ironic Python Agent (IPA) images
|
|
fail:
|
|
msg: >
|
|
Expected locally built Ironic Python Agent (IPA) image
|
|
{{ item.item }} was not present in
|
|
{{ image_cache_path }}/{{ ipa_image_name }}.
|
|
with_items: "{{ ipa_image_stat.results }}"
|
|
when: not item.stat.exists
|
|
tags:
|
|
- config-validation
|
|
|
|
- name: Check whether the image cache directory exists
|
|
local_action:
|
|
module: stat
|
|
path: "{{ hostvars.localhost.image_cache_path }}"
|
|
get_md5: False
|
|
get_checksum: False
|
|
mime: False
|
|
register: image_cache_stat
|
|
|
|
- name: Ensure the image cache directory exists
|
|
local_action:
|
|
module: file
|
|
path: "{{ hostvars.localhost.image_cache_path }}"
|
|
state: directory
|
|
owner: "{{ lookup('env', 'USER') }}"
|
|
group: "{{ lookup('env', 'USER') }}"
|
|
become: True
|
|
when: >-
|
|
not image_cache_stat.stat.exists or
|
|
not image_cache_stat.stat.writeable
|
|
|
|
- name: Ensure Ironic Python Agent images are copied onto the local machine
|
|
fetch:
|
|
src: "{{ image_cache_path }}/{{ ipa_image_name }}/{{ item.src }}"
|
|
dest: "{{ hostvars.localhost.image_cache_path }}/{{ ipa_image_name }}/{{ item.dest }}"
|
|
flat: True
|
|
with_items:
|
|
- src: "{{ ipa_images[0] }}"
|
|
dest: "{{ ipa_images_kernel_name }}"
|
|
- src: "{{ ipa_images[1] }}"
|
|
dest: "{{ ipa_images_ramdisk_name }}"
|
|
when:
|
|
- kolla_enable_ironic | bool
|
|
- ipa_build_images | bool
|
|
tags:
|
|
- config
|
|
|
|
- name: Ensure Kolla OpenStack components are configured
|
|
hosts: localhost
|
|
tags:
|
|
- kolla-ansible
|
|
- kolla-openstack
|
|
vars:
|
|
switch_type_to_device_type:
|
|
arista: netmiko_arista_eos
|
|
dellos9: netmiko_dell_force10
|
|
dell-powerconnect: netmiko_dell_powerconnect
|
|
junos: netmiko_juniper
|
|
openvswitch: netmiko_ovs_linux
|
|
ipa_image_name: "ipa"
|
|
pre_tasks:
|
|
- block:
|
|
- name: Check whether Kolla extra configuration files exist
|
|
stat:
|
|
path: "{{ kayobe_env_config_path }}/kolla/config/{{ item.file }}"
|
|
get_checksum: False
|
|
get_md5: False
|
|
mime: False
|
|
register: stat_result
|
|
with_items:
|
|
- { name: aodh, file: aodh.conf }
|
|
- { name: barbican, file: barbican.conf }
|
|
- { name: blazar, file: blazar.conf }
|
|
- { name: ceilometer, file: ceilometer.conf }
|
|
- { name: cinder, file: cinder.conf }
|
|
- { name: cloudkitty, file: cloudkitty.conf }
|
|
- { name: designate, file: designate.conf }
|
|
- { name: glance, file: glance.conf }
|
|
- { name: global, file: global.conf }
|
|
- { name: gnocchi, file: gnocchi.conf }
|
|
- { name: grafana, file: grafana.ini }
|
|
- { name: heat, file: heat.conf }
|
|
- { name: inspector, file: ironic-inspector.conf }
|
|
- { name: ironic, file: ironic.conf }
|
|
- { name: kafka, file: kafka.server.properties }
|
|
- { name: keystone, file: keystone.conf }
|
|
- { name: magnum, file: magnum.conf }
|
|
- { name: manila, file: manila.conf }
|
|
- { name: mariabackup, file: backup.my.cnf }
|
|
- { name: mariadb, file: galera.cnf }
|
|
- { name: masakari, file: masakari.conf }
|
|
- { name: murano, file: murano.conf }
|
|
- { name: neutron, file: neutron.conf }
|
|
- { name: neutron_ml2, file: neutron/ml2_conf.ini }
|
|
- { name: nova, file: nova.conf }
|
|
- { name: octavia, file: octavia.conf }
|
|
- { name: placement, file: placement.conf }
|
|
- { name: sahara, file: sahara.conf }
|
|
- { name: zookeeper, file: zookeeper.cfg }
|
|
|
|
- name: Initialise a fact containing extra configuration
|
|
set_fact:
|
|
kolla_extra_config: {}
|
|
|
|
- name: Update a fact containing extra configuration
|
|
set_fact:
|
|
kolla_extra_config: "{{ kolla_extra_config | combine({item.item.name: lookup('template', '{{ item.stat.path }}')}) }}"
|
|
with_items: "{{ stat_result.results }}"
|
|
when: item.stat.exists
|
|
|
|
- name: Validate switch configuration for Neutron ML2 genericswitch driver
|
|
fail:
|
|
msg: >
|
|
Switch configuration for {{ item }} is invalid. The following
|
|
variables must be set for the host: switch_type, ansible_host,
|
|
ansible_user, ansible_ssh_pass. Further, switch_type must be one of
|
|
{{ switch_type_to_device_type.keys() | join(', ') }}.
|
|
with_items: "{{ kolla_neutron_ml2_generic_switch_hosts }}"
|
|
when: >
|
|
item not in hostvars or
|
|
'switch_type' not in hostvars[item] or
|
|
hostvars[item].switch_type not in switch_type_to_device_type or
|
|
'ansible_host' not in hostvars[item] or
|
|
'ansible_user' not in hostvars[item] or
|
|
'ansible_ssh_pass' not in hostvars[item]
|
|
tags:
|
|
- config-validation
|
|
|
|
- name: Update a fact containing switches for use by Neutron ML2 genericswitch driver
|
|
set_fact:
|
|
kolla_neutron_ml2_generic_switches: >
|
|
{{
|
|
kolla_neutron_ml2_generic_switches +
|
|
[{
|
|
'name': item,
|
|
'device_type': switch_type_to_device_type[hostvars[item].switch_type],
|
|
'ip': hostvars[item].ansible_host,
|
|
'username': hostvars[item].ansible_user,
|
|
'password': hostvars[item].ansible_ssh_pass,
|
|
'ngs_trunk_ports': (
|
|
hostvars[item].switch_interface_config |
|
|
switch_interface_config_select_description(kolla_neutron_ml2_generic_switch_trunk_port_hosts) |
|
|
switch_interface_config_select_trunk()).keys() | join(',')
|
|
} | combine(hostvars[item].kolla_neutron_ml2_generic_switch_extra) ]
|
|
}}
|
|
with_items: "{{ kolla_neutron_ml2_generic_switch_hosts }}"
|
|
|
|
- block:
|
|
- name: Set facts containing IPA kernel and ramdisk URLs
|
|
set_fact:
|
|
kolla_inspector_ipa_kernel_upstream_url: "{{ inspector_ipa_kernel_upstream_url }}"
|
|
kolla_inspector_ipa_kernel_checksum_url: "{{ inspector_ipa_kernel_checksum_url }}"
|
|
kolla_inspector_ipa_kernel_checksum_algorithm: "{{ inspector_ipa_kernel_checksum_algorithm }}"
|
|
kolla_inspector_ipa_ramdisk_upstream_url: "{{ inspector_ipa_ramdisk_upstream_url }}"
|
|
kolla_inspector_ipa_ramdisk_checksum_url: "{{ inspector_ipa_ramdisk_checksum_url }}"
|
|
kolla_inspector_ipa_ramdisk_checksum_algorithm: "{{ inspector_ipa_ramdisk_checksum_algorithm }}"
|
|
when: not ipa_build_images | bool
|
|
|
|
- name: Set facts containing IPA kernel and ramdisk paths
|
|
set_fact:
|
|
kolla_inspector_ipa_kernel_path: "{{ image_cache_path }}/{{ ipa_image_name }}/{{ ipa_images_kernel_name }}"
|
|
kolla_inspector_ipa_ramdisk_path: "{{ image_cache_path }}/{{ ipa_image_name }}/{{ ipa_images_ramdisk_name }}"
|
|
when: ipa_build_images | bool
|
|
when: kolla_enable_ironic | bool
|
|
tags:
|
|
- config
|
|
roles:
|
|
- role: kolla-openstack
|
|
# Ironic inspector configuration.
|
|
kolla_inspector_processing_hooks: "{{ inspector_processing_hooks }}"
|
|
kolla_inspector_add_ports: "{{ inspector_add_ports }}"
|
|
kolla_inspector_keep_ports: "{{ inspector_keep_ports }}"
|
|
kolla_inspector_enable_discovery: "{{ inspector_enable_discovery }}"
|
|
kolla_inspector_discovery_enroll_node_driver: "{{ inspector_discovery_enroll_node_driver }}"
|
|
# Ironic inspector swift store configuration. Currently only supports the
|
|
# 'fake' inspection store.
|
|
kolla_inspector_enable_swift: "{{ inspector_store_enabled }}"
|
|
kolla_inspector_swift_auth:
|
|
auth_type: none
|
|
endpoint_override: "http://{% raw %}{{ api_interface_address }}{% endraw %}:{{ inspector_store_port }}"
|
|
# Extra free-form user-provided configuration.
|
|
kolla_extra_aodh: "{{ kolla_extra_config.aodh | default }}"
|
|
kolla_extra_barbican: "{{ kolla_extra_config.barbican | default }}"
|
|
kolla_extra_blazar: "{{ kolla_extra_config.blazar | default }}"
|
|
kolla_extra_ceilometer: "{{ kolla_extra_config.ceilometer | default }}"
|
|
kolla_extra_cinder: "{{ kolla_extra_config.cinder | default }}"
|
|
kolla_extra_cloudkitty: "{{ kolla_extra_config.cloudkitty | default }}"
|
|
kolla_extra_designate: "{{ kolla_extra_config.designate | default }}"
|
|
kolla_extra_glance: "{{ kolla_extra_config.glance | default }}"
|
|
kolla_extra_global: "{{ kolla_extra_config.global | default }}"
|
|
kolla_extra_gnocchi: "{{ kolla_extra_config.gnocchi | default }}"
|
|
kolla_extra_grafana: "{{ kolla_extra_config.grafana | default }}"
|
|
kolla_extra_heat: "{{ kolla_extra_config.heat | default }}"
|
|
kolla_extra_inspector: "{{ kolla_extra_config.inspector | default }}"
|
|
kolla_extra_ironic: "{{ kolla_extra_config.ironic | default }}"
|
|
kolla_extra_kafka: "{{ kolla_extra_config.kafka | default }}"
|
|
kolla_extra_keystone: "{{ kolla_extra_config.keystone | default }}"
|
|
kolla_extra_magnum: "{{ kolla_extra_config.magnum | default }}"
|
|
kolla_extra_manila: "{{ kolla_extra_config.manila | default }}"
|
|
kolla_extra_mariabackup: "{{ kolla_extra_config.mariabackup | default }}"
|
|
kolla_extra_mariadb: "{{ kolla_extra_config.mariadb | default }}"
|
|
kolla_extra_masakari: "{{ kolla_extra_config.masakari | default }}"
|
|
kolla_extra_murano: "{{ kolla_extra_config.murano | default }}"
|
|
kolla_extra_neutron: "{{ kolla_extra_config.neutron | default }}"
|
|
kolla_extra_neutron_ml2: "{{ kolla_extra_config.neutron_ml2 | default }}"
|
|
kolla_extra_nova: "{{ kolla_extra_config.nova | default }}"
|
|
kolla_extra_octavia: "{{ kolla_extra_config.octavia | default }}"
|
|
kolla_extra_placement: "{{ kolla_extra_config.placement | default }}"
|
|
kolla_extra_sahara: "{{ kolla_extra_config.sahara | default }}"
|
|
kolla_extra_zookeeper: "{{ kolla_extra_config.zookeeper | default }}"
|
|
kolla_extra_config_path: "{{ kayobe_env_config_path }}/kolla/config"
|
|
kolla_libvirt_tls: "{{ compute_libvirt_enable_tls | bool }}"
|
|
kolla_nova_libvirt_certificates_src: "{{ kayobe_env_config_path }}/certificates/libvirt"
|