blob: d73211836a71d34ae7d6d671432d3694b3c003bb [file] [log] [blame]
# Copyright (c) 2023 VEXXHOST, 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: Generate public key for SSH private key
ansible.builtin.import_tasks:
file: generate_public_key.yml
- name: Generate configuration difference
ansible.builtin.include_role:
name: osa_config_diff
vars:
osa_config_diff_containers_group: nova_conductor
osa_config_diff_chart_ref: "{{ nova_helm_chart_ref }}"
osa_config_diff_release_namespace: "{{ nova_helm_release_namespace }}"
osa_config_diff_release_values: "{{ _nova_helm_values | combine(nova_helm_values, recursive=True) }}"
osa_config_diff_config_files:
nova.conf: /etc/nova/nova.conf
- name: Migrate the databases
ansible.builtin.include_role:
name: migrate_db_from_osa
vars:
migrate_db_from_osa_pxc_namespace: "{{ nova_helm_release_namespace }}"
migrate_db_from_osa_containers_group: nova_conductor
migrate_db_from_osa_databases:
nova: nova
nova_api: nova_api
nova_cell0: nova_cell0
- name: Get the Kuberentes service for Percona XtraDB Cluster
run_once: true
kubernetes.core.k8s_info:
kind: Service
name: "{{ openstack_helm_endpoints.oslo_db.hosts.default }}"
namespace: "{{ nova_helm_release_namespace }}"
register: _nova_pxc_service
- name: Update cell mappings
run_once: true
delegate_to: "{{ groups['galera_all'][0] }}"
community.mysql.mysql_query:
login_host: "{{ _nova_pxc_service.resources[0].spec.clusterIP }}"
login_user: root
login_password: "{{ openstack_helm_endpoints.oslo_db.auth.admin.password }}"
login_db: nova_api
query: UPDATE cell_mappings SET transport_url = %(transport_url)s, database_connection = %(database_connection)s WHERE name = %(name)s
named_args: "{{ item }}"
loop:
- name: cell0
transport_url: none:/
database_connection: "mysql+pymysql://nova:{{ openstack_helm_endpoints.oslo_db_cell0.auth.nova.password }}@percona-xtradb-haproxy.openstack.svc.cluster.local:3306/nova_cell0" # noqa yaml[line-length]
- name: cell1
transport_url: "rabbit://nova:{{ openstack_helm_endpoints.oslo_messaging.auth.nova.password }}@rabbitmq-nova.openstack.svc.cluster.local:5672/nova"
database_connection: "mysql+pymysql://nova:{{ openstack_helm_endpoints.oslo_db.auth.nova.password }}@percona-xtradb-haproxy.openstack.svc.cluster.local:3306/nova" # noqa yaml[line-length]
loop_control:
label: "{{ item.name }}"
- name: Run deployment flow
ansible.builtin.import_tasks:
file: main.yml
- name: Get the Kuberentes service for RabbitMQ
run_once: true
kubernetes.core.k8s_info:
kind: Service
name: "{{ openstack_helm_endpoints.oslo_messaging.hosts.default }}"
namespace: "{{ nova_helm_release_namespace }}"
register: _nova_rabbitmq_service
- name: Update RabbitMQ configuration for compute nodes
delegate_to: "{{ item.0 }}"
community.general.ini_file:
path: /etc/nova/nova.conf
section: "{{ item.1.section }}"
option: "{{ item.1.option }}"
value: "{{ item.1.value }}"
mode: "0644"
with_nested:
- "{{ groups['nova_compute'] }}"
- - section: DEFAULT
option: transport_url
value: "rabbit://nova:{{ openstack_helm_endpoints.oslo_messaging.auth.nova.password }}@{{ cluster_ip }}:5672/nova"
- section: oslo_messaging_notifications
option: transport_url
value: "rabbit://nova:{{ openstack_helm_endpoints.oslo_messaging.auth.nova.password }}@{{ cluster_ip }}:5672/nova"
- section: oslo_messaging_rabbit
option: ssl
value: false
vars:
cluster_ip: "{{ _nova_rabbitmq_service.resources[0].spec.clusterIP }}"
- name: Restart all compute services
delegate_to: "{{ item }}"
ansible.builtin.service:
name: nova-compute
state: restarted
with_items: "{{ groups['nova_compute'] }}"
- name: Migrate HAproxy (API)
ansible.builtin.include_role:
name: migrate_haproxy_from_osa
vars:
migrate_haproxy_from_osa_group: nova_conductor
migrate_haproxy_from_osa_service_namespace: "{{ nova_helm_release_namespace }}"
migrate_haproxy_from_osa_service_name: nova-api
migrate_haproxy_from_osa_haproxy_backend: nova_api_os_compute
- name: Migrate HAproxy (Metadata)
ansible.builtin.include_role:
name: migrate_haproxy_from_osa
vars:
migrate_haproxy_from_osa_group: nova_conductor
migrate_haproxy_from_osa_service_namespace: "{{ nova_helm_release_namespace }}"
migrate_haproxy_from_osa_service_name: nova-metadata
migrate_haproxy_from_osa_haproxy_backend: nova_api_metadata
- name: Migrate HAproxy (VNC)
ansible.builtin.include_role:
name: migrate_haproxy_from_osa
vars:
migrate_haproxy_from_osa_group: nova_conductor
migrate_haproxy_from_osa_service_namespace: "{{ nova_helm_release_namespace }}"
migrate_haproxy_from_osa_service_name: nova-novncproxy
migrate_haproxy_from_osa_haproxy_backend: nova_console