From 61ea7a82073ea5886ad7f27f9dbcf6456233ab67 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Fri, 6 Oct 2023 17:38:13 +0200 Subject: [PATCH] Remove common nova playbook Code of os-nova-install has been refactored to include content from the common nova playbook. This allows us to be more flexible in executed tasks and simplify logic. Related-Bug: #2034583 Change-Id: I21fe061d93cf77c97f8fa6d0003219595459e1c3 --- playbooks/common-playbooks/nova.yml | 155 -------------- playbooks/os-nova-install.yml | 196 +++++++++++++++++- ...common_nova_playbook-9fde48c51bee5b6a.yaml | 5 + 3 files changed, 191 insertions(+), 165 deletions(-) delete mode 100644 playbooks/common-playbooks/nova.yml create mode 100644 releasenotes/notes/remove_common_nova_playbook-9fde48c51bee5b6a.yaml diff --git a/playbooks/common-playbooks/nova.yml b/playbooks/common-playbooks/nova.yml deleted file mode 100644 index 89d0cbaf14..0000000000 --- a/playbooks/common-playbooks/nova.yml +++ /dev/null @@ -1,155 +0,0 @@ ---- -# Copyright 2014, Rackspace US, Inc. -# -# 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: Install nova services - hosts: "{{ nova_hosts }}" - serial: "{{ nova_serial }}" - gather_facts: false - user: root - environment: "{{ deployment_environment_variables | default({}) }}" - vars_files: - - "../defaults/{{ install_method }}_install.yml" - tags: - - nova - pre_tasks: - # Enable execution of ceph_client on the nova compute hosts if cinder RBD - # backends are used. This is necessary to ensure that volume-backed Nova - # instances can function when RBD is the volume backend. - - name: Set cinder RBD inuse fact - set_fact: - nova_cinder_rbd_inuse: "{{ True in groups['cinder_volume'] | map('extract', hostvars, 'cinder_backend_rbd_inuse') }}" - delegate_to: localhost - delegate_facts: True - when: - - "'nova_compute' in group_names" - - "inventory_hostname == ((groups['nova_compute'] | intersect(ansible_play_hosts)) | list)[0]" - - "hostvars['localhost']['nova_cinder_rbd_inuse'] is not defined" - tags: - - always - - # In order to ensure that any container, software or - # config file changes which causes a container/service - # restart do not cause an unexpected outage, we drain - # the load balancer back end for this container. - - name: Disabling haproxy backends - include_tasks: ../common-tasks/haproxy-endpoint-manage.yml - vars: - haproxy_backend: "{{ backend_name }}-back" - haproxy_state: disabled - loop_control: - loop_var: backend_name - when: - - "backend_name in group_names" - - "groups[backend_name] | length > 1" - with_items: - - "nova_api_metadata" - - "nova_api_os_compute" - - "nova_console" - - - name: Configure container - include_tasks: "../common-tasks/os-{{ container_tech | default('lxc') }}-container-setup.yml" - when: not is_metal - vars: - extra_container_config_no_restart: - - "lxc.start.order=39" - - - name: Including unbound-clients tasks - include_tasks: ../common-tasks/unbound-clients.yml - when: - - hostvars['localhost']['resolvconf_enabled'] | bool - - - name: Add nbd devices to the compute - shell: | - for i in /dev/nbd*;do - lxc-device -n {{ container_name }} add $i $i - done - failed_when: false - register: device_add - changed_when: > - 'added' in device_add.stdout.lower() - delegate_to: "{{ physical_host }}" - when: - - container_tech | default('lxc') == 'lxc' - - "'nova_compute' in group_names" - - "not is_metal | bool" - tags: - - always - - - name: Add net/tun device to the compute # noqa: no-changed-when - command: | - lxc-device -n {{ container_name }} add /dev/net/tun /dev/net/tun - delegate_to: "{{ physical_host }}" - when: - - container_tech | default('lxc') == 'lxc' - - "'nova_compute' in group_names" - - "not is_metal | bool" - tags: - - always - - - name: Check if kvm device exists - stat: - path: /dev/kvm - delegate_to: "{{ physical_host }}" - register: kvm_device - when: - - container_tech | default('lxc') == 'lxc' - - "'nova_compute' in group_names" - - "not is_metal | bool" - tags: - - always - - - name: Add kvm device to the compute - command: | - lxc-device -n {{ container_name }} add /dev/kvm /dev/kvm - delegate_to: "{{ physical_host }}" - register: device_add - failed_when: false - changed_when: > - 'added' in device_add.stdout.lower() - when: - - container_tech | default('lxc') == 'lxc' - - "'nova_compute' in group_names" - - "not is_metal | bool" - - "'ischr' in kvm_device.stat and kvm_device.stat.ischr | bool" - tags: - - always - - roles: - - role: "os_nova" - nova_management_address: "{{ management_address }}" - nova_cinder_rbd_inuse: "{{ hostvars['localhost']['nova_cinder_rbd_inuse'] | default(False) }}" - - - role: "openstack.osa.system_crontab_coordination" - tags: - - crontab - - post_tasks: - # Now that container changes are done, we can set - # the load balancer back end for this container - # to available again. - - name: Enabling haproxy backends - include_tasks: ../common-tasks/haproxy-endpoint-manage.yml - vars: - haproxy_backend: "{{ backend_name }}-back" - haproxy_state: enabled - loop_control: - loop_var: backend_name - when: - - "backend_name in group_names" - - "groups[backend_name] | length > 1" - with_items: - - "nova_api_metadata" - - "nova_api_os_compute" - - "nova_console" diff --git a/playbooks/os-nova-install.yml b/playbooks/os-nova-install.yml index 4dcd60ccc6..71393d94d9 100644 --- a/playbooks/os-nova-install.yml +++ b/playbooks/os-nova-install.yml @@ -45,14 +45,190 @@ tags: - haproxy-service-config -- name: Install nova-conductor services - import_playbook: common-playbooks/nova.yml - vars: - nova_hosts: "nova_conductor:nova_scheduler:nova_api_os_compute:nova_api_metadata:nova_console" - nova_serial: "{{ nova_conductor_serial | default(['1', '100%']) }}" +- name: Install nova control-plane services + hosts: "nova_conductor:nova_scheduler:nova_api_os_compute:nova_api_metadata:nova_console" + serial: "{{ nova_conductor_serial | default(['1', '100%']) }}" + gather_facts: false + user: root + environment: "{{ deployment_environment_variables | default({}) }}" + vars_files: + - "defaults/{{ install_method }}_install.yml" + tags: + - nova + pre_tasks: + # Enable execution of ceph_client on the nova compute hosts if cinder RBD + # backends are used. This is necessary to ensure that volume-backed Nova + # instances can function when RBD is the volume backend. + - name: Set cinder RBD inuse fact + set_fact: + nova_cinder_rbd_inuse: "{{ True in groups['cinder_volume'] | map('extract', hostvars, 'cinder_backend_rbd_inuse') }}" + delegate_to: localhost + delegate_facts: True + when: + - "'nova_compute' in group_names" + - "inventory_hostname == ((groups['nova_compute'] | intersect(ansible_play_hosts)) | list)[0]" + - "hostvars['localhost']['nova_cinder_rbd_inuse'] is not defined" + tags: + - always + # In order to ensure that any container, software or + # config file changes which causes a container/service + # restart do not cause an unexpected outage, we drain + # the load balancer back end for this container. + - name: Disabling haproxy backends + include_tasks: common-tasks/haproxy-endpoint-manage.yml + vars: + haproxy_backend: "{{ backend_name }}-back" + haproxy_state: disabled + loop_control: + loop_var: backend_name + when: + - "backend_name in group_names" + - "groups[backend_name] | length > 1" + with_items: + - "nova_api_metadata" + - "nova_api_os_compute" + - "nova_console" -- name: Install nova compute - import_playbook: common-playbooks/nova.yml - vars: - nova_hosts: "nova_compute:!nova_conductor:!nova_scheduler:!nova_api_os_compute:!nova_api_metadata:!nova_console" - nova_serial: "{{ nova_compute_serial | default('100%') }}" + - name: Configure container + include_tasks: "common-tasks/os-{{ container_tech | default('lxc') }}-container-setup.yml" + when: not is_metal + vars: + extra_container_config_no_restart: + - "lxc.start.order=39" + + - name: Including unbound-clients tasks + include_tasks: common-tasks/unbound-clients.yml + when: + - hostvars['localhost']['resolvconf_enabled'] | bool + + roles: + - role: "os_nova" + nova_management_address: "{{ management_address }}" + nova_cinder_rbd_inuse: "{{ hostvars['localhost']['nova_cinder_rbd_inuse'] | default(False) }}" + + - role: "openstack.osa.system_crontab_coordination" + tags: + - crontab + + post_tasks: + # Now that container changes are done, we can set + # the load balancer back end for this container + # to available again. + - name: Enabling haproxy backends + include_tasks: common-tasks/haproxy-endpoint-manage.yml + vars: + haproxy_backend: "{{ backend_name }}-back" + haproxy_state: enabled + loop_control: + loop_var: backend_name + when: + - "backend_name in group_names" + - "groups[backend_name] | length > 1" + with_items: + - "nova_api_metadata" + - "nova_api_os_compute" + - "nova_console" + + +- name: Install nova compute services + hosts: "nova_compute:!nova_conductor:!nova_scheduler:!nova_api_os_compute:!nova_api_metadata:!nova_console" + serial: "{{ nova_compute_serial | default('100%') }}" + gather_facts: false + user: root + environment: "{{ deployment_environment_variables | default({}) }}" + vars_files: + - "defaults/{{ install_method }}_install.yml" + tags: + - nova + pre_tasks: + # Enable execution of ceph_client on the nova compute hosts if cinder RBD + # backends are used. This is necessary to ensure that volume-backed Nova + # instances can function when RBD is the volume backend. + - name: Set cinder RBD inuse fact + set_fact: + nova_cinder_rbd_inuse: "{{ True in groups['cinder_volume'] | map('extract', hostvars, 'cinder_backend_rbd_inuse') }}" + delegate_to: localhost + delegate_facts: True + when: + - "'nova_compute' in group_names" + - "inventory_hostname == ((groups['nova_compute'] | intersect(ansible_play_hosts)) | list)[0]" + - "hostvars['localhost']['nova_cinder_rbd_inuse'] is not defined" + tags: + - always + + - name: Configure container + include_tasks: "common-tasks/os-{{ container_tech | default('lxc') }}-container-setup.yml" + when: not is_metal + vars: + extra_container_config_no_restart: + - "lxc.start.order=39" + + - name: Including unbound-clients tasks + include_tasks: common-tasks/unbound-clients.yml + when: + - hostvars['localhost']['resolvconf_enabled'] | bool + + - name: Add nbd devices to the compute + shell: | + for i in /dev/nbd*;do + lxc-device -n {{ container_name }} add $i $i + done + failed_when: false + register: device_add + changed_when: > + 'added' in device_add.stdout.lower() + delegate_to: "{{ physical_host }}" + when: + - container_tech | default('lxc') == 'lxc' + - "'nova_compute' in group_names" + - "not is_metal | bool" + tags: + - always + + - name: Add net/tun device to the compute # noqa: no-changed-when + command: | + lxc-device -n {{ container_name }} add /dev/net/tun /dev/net/tun + delegate_to: "{{ physical_host }}" + when: + - container_tech | default('lxc') == 'lxc' + - "'nova_compute' in group_names" + - "not is_metal | bool" + tags: + - always + + - name: Check if kvm device exists + stat: + path: /dev/kvm + delegate_to: "{{ physical_host }}" + register: kvm_device + when: + - container_tech | default('lxc') == 'lxc' + - "'nova_compute' in group_names" + - "not is_metal | bool" + tags: + - always + + - name: Add kvm device to the compute + command: | + lxc-device -n {{ container_name }} add /dev/kvm /dev/kvm + delegate_to: "{{ physical_host }}" + register: device_add + failed_when: false + changed_when: > + 'added' in device_add.stdout.lower() + when: + - container_tech | default('lxc') == 'lxc' + - "'nova_compute' in group_names" + - "not is_metal | bool" + - "'ischr' in kvm_device.stat and kvm_device.stat.ischr | bool" + tags: + - always + + roles: + - role: "os_nova" + nova_management_address: "{{ management_address }}" + nova_cinder_rbd_inuse: "{{ hostvars['localhost']['nova_cinder_rbd_inuse'] | default(False) }}" + + - role: "openstack.osa.system_crontab_coordination" + tags: + - crontab diff --git a/releasenotes/notes/remove_common_nova_playbook-9fde48c51bee5b6a.yaml b/releasenotes/notes/remove_common_nova_playbook-9fde48c51bee5b6a.yaml new file mode 100644 index 0000000000..0829212f86 --- /dev/null +++ b/releasenotes/notes/remove_common_nova_playbook-9fde48c51bee5b6a.yaml @@ -0,0 +1,5 @@ +--- +deprecations: + - | + ``common-playbooks/nova.yml`` has been deprecated and removed. All content + from it now resides inside ``os-nova-install.yml`` directly.