From 7f7bb1b44816a13748e3e87f72722e0dcb940fe0 Mon Sep 17 00:00:00 2001
From: "wu.chunyang" <wuchunyang@yovole.com>
Date: Thu, 13 Aug 2020 14:15:03 +0800
Subject: [PATCH] Register resources info for octavia upgrading

kolla-ansible upgrade failed when octavia_auto_configure set
to true. because upgrade action don't register the resources
info.
this change adds some tasks to query the resources info
for upgrade action in octavia role.

Change-Id: I4b0ac001b38bee81d983dd68534b9d0e78b4f6d7
---
 .../octavia/tasks/get_resources_info.yml      | 67 +++++++++++++++++++
 ansible/roles/octavia/tasks/upgrade.yml       |  3 +
 .../roles/octavia/templates/octavia.conf.j2   |  2 +-
 3 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 ansible/roles/octavia/tasks/get_resources_info.yml

diff --git a/ansible/roles/octavia/tasks/get_resources_info.yml b/ansible/roles/octavia/tasks/get_resources_info.yml
new file mode 100644
index 0000000000..d5e13f01e3
--- /dev/null
+++ b/ansible/roles/octavia/tasks/get_resources_info.yml
@@ -0,0 +1,67 @@
+---
+- name: Get amphora flavor info
+  become: true
+  kolla_toolbox:
+    module_name: os_flavor_info
+    module_args:
+      auth: "{{ octavia_user_auth }}"
+      cacert: "{{ openstack_cacert }}"
+      endpoint_type: "{{ openstack_interface }}"
+      region_name: "{{ openstack_region_name }}"
+      name: "{{ octavia_amp_flavor.name }}"
+  run_once: True
+  delegate_to: "{{ groups['octavia-api'][0] }}"
+  register: flavor_results
+
+- name: Get {{ octavia_service_auth_project }} project id
+  become: True
+  kolla_toolbox:
+    module_name: os_project_info
+    module_args:
+      auth: "{{ octavia_user_auth }}"
+      cacert: "{{ openstack_cacert }}"
+      endpoint_type: "{{ openstack_interface }}"
+      region_name: "{{ openstack_region_name }}"
+      name: "{{ octavia_service_auth_project }}"
+  run_once: True
+  delegate_to: "{{ groups['octavia-api'][0] }}"
+  register: project_info
+
+# NOTE(wuchunyang): ansible doesn't have a module to query security groups
+# let's use os_security_group module instead.
+- name: Get security groups for octavia
+  become: true
+  kolla_toolbox:
+    module_name: os_security_group
+    module_args:
+      auth: "{{ octavia_user_auth }}"
+      cacert: "{{ openstack_cacert }}"
+      endpoint_type: "{{ openstack_interface }}"
+      region_name: "{{ openstack_region_name }}"
+      state: present
+      name: "{{ item.name }}"
+  loop: "{{ octavia_amp_security_groups.values() | list }}"
+  loop_control:
+    label: "{{ item.name }}"
+  run_once: True
+  delegate_to: "{{ groups['octavia-api'][0] }}"
+  register: sec_grp_info
+
+- name: Get loadbalancer management network
+  become: true
+  kolla_toolbox:
+    module_name: os_networks_info
+    module_args:
+      auth: "{{ octavia_user_auth }}"
+      cacert: "{{ openstack_cacert }}"
+      endpoint_type: "{{ openstack_interface }}"
+      region_name: "{{ openstack_region_name }}"
+      name: "{{ octavia_amp_network['name'] }}"
+  register: network_results
+  run_once: True
+  delegate_to: "{{ groups['octavia-api'][0] }}"
+
+- name: Set octavia resources facts
+  set_fact:
+    network_info: "{{ network_results.openstack_networks.0 }}"
+    amphora_flavor_info: "{{ flavor_results.openstack_flavors.0 }}"
diff --git a/ansible/roles/octavia/tasks/upgrade.yml b/ansible/roles/octavia/tasks/upgrade.yml
index 6ba9f99799..becb086045 100644
--- a/ansible/roles/octavia/tasks/upgrade.yml
+++ b/ansible/roles/octavia/tasks/upgrade.yml
@@ -1,4 +1,7 @@
 ---
+- include_tasks: get_resources_info.yml
+  when: octavia_auto_configure | bool
+
 - import_tasks: config.yml
 
 - import_tasks: check-containers.yml
diff --git a/ansible/roles/octavia/templates/octavia.conf.j2 b/ansible/roles/octavia/templates/octavia.conf.j2
index 9292a245ed..9898fa5bea 100644
--- a/ansible/roles/octavia/templates/octavia.conf.j2
+++ b/ansible/roles/octavia/templates/octavia.conf.j2
@@ -89,7 +89,7 @@ amp_flavor_id = {{ octavia_amp_flavor_id }}
 amp_image_owner_id = {{ project_info.openstack_projects.0.id }}
 amp_boot_network_list = {{ network_info.id }}
 amp_secgroup_list = {{ (sec_grp_info.results | selectattr('secgroup.name', 'equalto', octavia_amp_security_groups['mgmt-sec-grp'].name) | list).0.secgroup.id }}
-amp_flavor_id = {{ amphora_flavor_info.flavor.id }}
+amp_flavor_id = {{ amphora_flavor_info.id }}
 {% endif %}
 
 client_ca = /etc/octavia/certs/client_ca.cert.pem