Radosław Piliszek 53376aed8f Performance: Don't notify handlers during config
This patch builds upon genconfig optimisation and it takes it
further by not having genconfig ever touch the handlers!
Calling the handlers and skipping them created an unnecessary slow down
if only config was ran. It also depends on the config checking fix.

This gets us closer to the single responsibility principle -
config only generates the config, container checks only validate
whether container restart is needed.

And this also means that we will have single place were containers
are restarted, were we can fix the ansible quirk of it restarting
the whole group even when one container changed in the following patches.

The only exception is the loadbalance role. As the loadbalancer services
have their config altered by other roles registering their services
using loadbalancer-config. This is in contrast to typical roles,
which do config in one step and can then run check-containers in
the next step.

Fixes some handlers that were missing the necessary guard,
making genconfig actually able to restart some containers.

Future work:
- optimise config by doing local generation and mass rsync
- support for reloads
- unconditional restart/reload (separate action)
- make 'reconfigure' act like 'genconfig' + 'deploy-containers'
  - this would avoid calling bootstrapping each time but might
    be tricky as it would break current compatibility
  - could call this 'reconfigure-containers' and deprecate
    'reconfigure'
- fix the ansible quirk that notifies more handlers then intended

Change-Id: I0ce24043ae5486b2b55489ba40abe2b96b0991a6
Partially-Implements: blueprint performance-improvements
Co-Authored-By: Roman Krček <roman.krcek@tietoevry.com>
2024-12-01 22:16:38 +01:00

206 lines
6.5 KiB
YAML

---
- name: Ensuring config directories exist
become: true
file:
path: "{{ node_config_directory }}/{{ item.key }}"
state: "directory"
owner: "{{ config_owner_user }}"
group: "{{ config_owner_group }}"
mode: "0770"
with_dict: "{{ nova_cell_services | select_services_enabled_and_mapped_to_host }}"
- include_tasks: copy-certs.yml
when:
- kolla_copy_ca_into_containers | bool
- include_tasks: external_ceph.yml
when:
- (nova_backend == "rbd" or cinder_backend_ceph | bool)
- inventory_hostname in groups[nova_cell_compute_group]
- name: Check if policies shall be overwritten
stat:
path: "{{ item }}"
delegate_to: localhost
run_once: True
register: nova_policy
with_first_found:
- files: "{{ supported_policy_format_list }}"
paths:
- "{{ node_custom_config }}/nova/"
skip: true
- name: Set nova policy file
set_fact:
nova_policy_file: "{{ nova_policy.results.0.stat.path | basename }}"
nova_policy_file_path: "{{ nova_policy.results.0.stat.path }}"
when:
- nova_policy.results
- name: Check for vendordata file
stat:
path: "{{ node_custom_config }}/nova/vendordata.json"
delegate_to: localhost
run_once: True
register: vendordata_file
- name: Set vendordata file path
set_fact:
vendordata_file_path: "{{ vendordata_file.stat.path }}"
when:
- vendordata_file.stat.exists
- name: Copying over config.json files for services
become: true
template:
src: "{{ item.key }}.json.j2"
dest: "{{ node_config_directory }}/{{ item.key }}/config.json"
mode: "0660"
with_dict: "{{ nova_cell_services | select_services_enabled_and_mapped_to_host }}"
- name: Copying over nova.conf
become: true
vars:
service_name: "{{ item.key }}"
merge_configs:
sources:
- "{{ role_path }}/templates/nova.conf.j2"
- "{{ node_custom_config }}/global.conf"
- "{{ node_custom_config }}/nova.conf"
- "{{ node_custom_config }}/nova/{{ item.key }}.conf"
- "{{ node_custom_config }}/nova/{{ inventory_hostname }}/nova.conf"
- "{{ node_custom_config }}/nova/{{ inventory_hostname }}/{{ item.key }}.conf"
dest: "{{ node_config_directory }}/{{ item.key }}/nova.conf"
mode: "0660"
when:
- item.key in nova_cell_services_require_nova_conf
with_dict: "{{ nova_cell_services | select_services_enabled_and_mapped_to_host }}"
- name: Copying over Nova compute provider config
become: true
vars:
service: "{{ nova_cell_services['nova-compute'] }}"
copy:
content: "{{ nova_cell_compute_provider_config | to_nice_yaml(indent=2) }}"
dest: "{{ node_config_directory }}/nova-compute/provider_config.yaml"
mode: "0660"
when:
- service | service_enabled_and_mapped_to_host
- nova_cell_compute_provider_config is defined
- name: Copying over libvirt configuration
become: true
vars:
service: "{{ nova_cell_services['nova-libvirt'] }}"
template:
src: "{{ item.src }}"
dest: "{{ node_config_directory }}/nova-libvirt/{{ item.dest }}"
mode: "0660"
when: service | service_enabled_and_mapped_to_host
with_items:
- { src: "qemu.conf.j2", dest: "qemu.conf" }
- { src: "libvirtd.conf.j2", dest: "libvirtd.conf" }
- name: Copying over libvirt TLS keys
include_tasks: config-libvirt-tls.yml
when:
- inventory_hostname in groups[nova_cell_compute_group]
- libvirt_tls | bool
- libvirt_tls_manage_certs | bool
- name: Copying over libvirt SASL configuration
become: true
vars:
service_name: "{{ item.service }}"
service: "{{ nova_cell_services[service_name] }}"
template:
src: "{{ item.src }}"
dest: "{{ node_config_directory }}/{{ service_name }}/{{ item.dest }}"
mode: "0660"
when:
- libvirt_enable_sasl | bool
- service | service_enabled_and_mapped_to_host
with_items:
- { src: "auth.conf.j2", dest: "auth.conf", service: "nova-compute" }
- { src: "auth.conf.j2", dest: "auth.conf", service: "nova-libvirt" }
- { src: "sasl.conf.j2", dest: "sasl.conf", service: "nova-libvirt" }
- name: Copying files for nova-ssh
become: true
vars:
service: "{{ nova_cell_services['nova-ssh'] }}"
template:
src: "{{ item.src }}"
dest: "{{ node_config_directory }}/nova-ssh/{{ item.dest }}"
mode: "0660"
when: service | service_enabled_and_mapped_to_host
with_items:
- { src: "sshd_config.j2", dest: "sshd_config" }
- { src: "id_rsa", dest: "id_rsa" }
- { src: "id_rsa.pub", dest: "id_rsa.pub" }
- { src: "ssh_config.j2", dest: "ssh_config" }
- name: Copying VMware vCenter CA file
vars:
service: "{{ nova_cell_services['nova-compute'] }}"
copy:
src: "{{ node_custom_config }}/vmware_ca"
dest: "{{ node_config_directory }}/nova-compute/vmware_ca"
mode: "0660"
when:
- nova_compute_virt_type == "vmware"
- not vmware_vcenter_insecure | bool
- service | service_enabled_and_mapped_to_host
- name: Copying 'release' file for nova_compute
vars:
service: "{{ nova_cell_services['nova-compute'] }}"
copy:
src: "{{ item }}"
dest: "{{ node_config_directory }}/nova-compute/release"
mode: "0660"
with_first_found:
- files:
- "{{ node_custom_config }}/nova_compute/{{ inventory_hostname }}/release"
- "{{ node_custom_config }}/nova_compute/release"
- "{{ node_custom_config }}/nova/release"
skip: true
when: service | service_enabled_and_mapped_to_host
- name: Generating 'hostnqn' file for nova_compute
vars:
hostnqn: "nqn.2014-08.org.nvmexpress:uuid:{{ ansible_facts.hostname | to_uuid }}"
service: "{{ nova_cell_services['nova-compute'] }}"
template:
src: "templates/hostnqn.j2"
dest: "{{ node_config_directory }}/nova-compute/hostnqn"
mode: "0660"
become: true
when: service | service_enabled_and_mapped_to_host
- name: Copying over existing policy file
become: true
template:
src: "{{ nova_policy_file_path }}"
dest: "{{ node_config_directory }}/{{ item.key }}/{{ nova_policy_file }}"
mode: "0660"
when:
- nova_policy_file is defined
- item.key in nova_cell_services_require_policy_json
with_dict: "{{ nova_cell_services | select_services_enabled_and_mapped_to_host }}"
- name: Copying over vendordata file to containers
vars:
service: "{{ nova_cell_services[item] }}"
copy:
src: "{{ vendordata_file_path }}"
dest: "{{ node_config_directory }}/{{ item }}/vendordata.json"
mode: "0660"
become: True
when:
- vendordata_file_path is defined
- service | service_enabled_and_mapped_to_host
with_items:
- nova-compute
- nova-compute-ironic