kayobe/ansible/kolla-openstack.yml
Mark Goddard c4b74f4801 libvirt: deploy libvirt on the host
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
2022-03-24 13:44:48 +00:00

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"