Skip to content

Commit b32935e

Browse files
authored
Merge pull request #151 from stackhpc/backports/octavia
Victoria: Backport Octavia / OVN related changes
2 parents 05e82de + 9e14aa0 commit b32935e

22 files changed

+267
-82
lines changed

ansible/group_vars/all.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,7 @@ enable_neutron_port_forwarding: "no"
668668
enable_nova_serialconsole_proxy: "no"
669669
enable_nova_ssh: "yes"
670670
enable_octavia: "no"
671+
enable_octavia_driver_agent: "{{ enable_octavia | bool and neutron_plugin_agent == 'ovn' }}"
671672
enable_openvswitch: "{{ enable_neutron | bool and neutron_plugin_agent != 'linuxbridge' }}"
672673
enable_ovn: "{{ enable_neutron | bool and neutron_plugin_agent == 'ovn' }}"
673674
enable_ovs_dpdk: "no"

ansible/inventory/all-in-one

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,9 @@ searchlight
631631
[octavia-api:children]
632632
octavia
633633

634+
[octavia-driver-agent:children]
635+
octavia
636+
634637
[octavia-health-manager:children]
635638
octavia
636639

ansible/inventory/multinode

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,9 @@ searchlight
649649
[octavia-api:children]
650650
octavia
651651

652+
[octavia-driver-agent:children]
653+
octavia
654+
652655
[octavia-health-manager:children]
653656
octavia
654657

ansible/roles/octavia/defaults/main.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ octavia_services:
2020
mode: "http"
2121
external: true
2222
port: "{{ octavia_api_port }}"
23+
octavia-driver-agent:
24+
container_name: octavia_driver_agent
25+
group: octavia-driver-agent
26+
enabled: "{{ enable_octavia_driver_agent }}"
27+
image: "{{ octavia_driver_agent_image_full }}"
28+
volumes: "{{ octavia_driver_agent_default_volumes + octavia_driver_agent_extra_volumes }}"
29+
dimensions: "{{ octavia_driver_agent_dimensions }}"
2330
octavia-health-manager:
2431
container_name: octavia_health_manager
2532
group: octavia-health-manager
@@ -68,6 +75,10 @@ octavia_api_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ doc
6875
octavia_api_tag: "{{ octavia_tag }}"
6976
octavia_api_image_full: "{{ octavia_api_image }}:{{ octavia_api_tag }}"
7077

78+
octavia_driver_agent_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ octavia_install_type }}-octavia-driver-agent"
79+
octavia_driver_agent_tag: "{{ octavia_tag }}"
80+
octavia_driver_agent_image_full: "{{ octavia_driver_agent_image }}:{{ octavia_driver_agent_tag }}"
81+
7182
octavia_health_manager_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ octavia_install_type }}-octavia-health-manager"
7283
octavia_health_manager_tag: "{{ octavia_tag }}"
7384
octavia_health_manager_image_full: "{{ octavia_health_manager_image }}:{{ octavia_health_manager_tag }}"
@@ -81,6 +92,7 @@ octavia_worker_tag: "{{ octavia_tag }}"
8192
octavia_worker_image_full: "{{ octavia_worker_image }}:{{ octavia_worker_tag }}"
8293

8394
octavia_api_dimensions: "{{ default_container_dimensions }}"
95+
octavia_driver_agent_dimensions: "{{ default_container_dimensions }}"
8496
octavia_health_manager_dimensions: "{{ default_container_dimensions }}"
8597
octavia_housekeeping_dimensions: "{{ default_container_dimensions }}"
8698
octavia_worker_dimensions: "{{ default_container_dimensions }}"
@@ -91,12 +103,20 @@ octavia_api_default_volumes:
91103
- "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
92104
- "kolla_logs:/var/log/kolla/"
93105
- "{{ kolla_dev_repos_directory ~ '/octavia/octavia:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/octavia' if octavia_dev_mode | bool else '' }}"
106+
- "octavia_driver_agent:/var/run/octavia/"
94107
octavia_health_manager_default_volumes:
95108
- "{{ node_config_directory }}/octavia-health-manager/:{{ container_config_directory }}/:ro"
96109
- "/etc/localtime:/etc/localtime:ro"
97110
- "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
98111
- "kolla_logs:/var/log/kolla/"
99112
- "{{ kolla_dev_repos_directory ~ '/octavia/octavia:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/octavia' if octavia_dev_mode | bool else '' }}"
113+
octavia_driver_agent_default_volumes:
114+
- "{{ node_config_directory }}/octavia-driver-agent/:{{ container_config_directory }}/:ro"
115+
- "/etc/localtime:/etc/localtime:ro"
116+
- "{{ '/etc/timezone:/etc/timezone:ro' if ansible_os_family == 'Debian' else '' }}"
117+
- "kolla_logs:/var/log/kolla/"
118+
- "{{ kolla_dev_repos_directory ~ '/octavia/octavia:/var/lib/kolla/venv/lib/python' ~ distro_python_version ~ '/site-packages/octavia' if octavia_dev_mode | bool else '' }}"
119+
- "octavia_driver_agent:/var/run/octavia/"
100120
octavia_housekeeping_default_volumes:
101121
- "{{ node_config_directory }}/octavia-housekeeping/:{{ container_config_directory }}/:ro"
102122
- "/etc/localtime:/etc/localtime:ro"
@@ -112,6 +132,7 @@ octavia_worker_default_volumes:
112132

113133
octavia_extra_volumes: "{{ default_extra_volumes }}"
114134
octavia_api_extra_volumes: "{{ octavia_extra_volumes }}"
135+
octavia_driver_agent_extra_volumes: "{{ octavia_extra_volumes }}"
115136
octavia_health_manager_extra_volumes: "{{ octavia_extra_volumes }}"
116137
octavia_housekeeping_extra_volumes: "{{ octavia_extra_volumes }}"
117138
octavia_worker_extra_volumes: "{{ octavia_extra_volumes }}"
@@ -238,3 +259,7 @@ octavia_amp_network:
238259

239260
# Octavia management network subnet CIDR.
240261
octavia_amp_network_cidr: 10.1.0.0/24
262+
263+
# Octavia provider drivers
264+
octavia_provider_drivers: "amphora:Amphora provider{% if neutron_plugin_agent == 'ovn'%}, ovn:OVN provider{% endif %}"
265+
octavia_provider_agents: "amphora_agent{% if neutron_plugin_agent == 'ovn'%}, ovn{% endif %}"

ansible/roles/octavia/handlers/main.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,21 @@
1414
when:
1515
- kolla_action != "config"
1616

17+
- name: Restart octavia-driver-agent container
18+
vars:
19+
service_name: "octavia-driver-agent"
20+
service: "{{ octavia_services[service_name] }}"
21+
become: true
22+
kolla_docker:
23+
action: "recreate_or_restart_container"
24+
common_options: "{{ docker_common_options }}"
25+
name: "{{ service.container_name }}"
26+
image: "{{ service.image }}"
27+
volumes: "{{ service.volumes | reject('equalto', '') | list }}"
28+
dimensions: "{{ service.dimensions }}"
29+
when:
30+
- kolla_action != "config"
31+
1732
- name: Restart octavia-health-manager container
1833
vars:
1934
service_name: "octavia-health-manager"

ansible/roles/octavia/tasks/check-containers.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
volumes: "{{ item.value.volumes }}"
1010
dimensions: "{{ item.value.dimensions }}"
1111
when:
12-
- inventory_hostname in groups[item.value.group]
12+
- inventory_hostname in groups.get(item.value.group, [])
1313
- item.value.enabled | bool
1414
with_dict: "{{ octavia_services }}"
1515
notify:

ansible/roles/octavia/tasks/config.yml

Lines changed: 64 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
mode: "0770"
99
become: true
1010
when:
11-
- inventory_hostname in groups[item.value.group]
11+
- inventory_hostname in groups.get(item.value.group, [])
1212
- item.value.enabled | bool
1313
with_dict: "{{ octavia_services }}"
1414

@@ -39,7 +39,7 @@
3939
become: true
4040
when:
4141
- octavia_policy_file is defined
42-
- inventory_hostname in groups[item.value.group]
42+
- inventory_hostname in groups.get(item.value.group, [])
4343
- item.value.enabled | bool
4444
with_dict: "{{ octavia_services }}"
4545
notify:
@@ -56,7 +56,7 @@
5656
mode: "0660"
5757
become: true
5858
when:
59-
- inventory_hostname in groups[item.value.group]
59+
- inventory_hostname in groups.get(item.value.group, [])
6060
- item.value.enabled | bool
6161
with_dict: "{{ octavia_services }}"
6262
notify:
@@ -76,75 +76,73 @@
7676
mode: "0660"
7777
become: true
7878
when:
79-
- inventory_hostname in groups[item.value.group]
79+
- inventory_hostname in groups.get(item.value.group, [])
8080
- item.value.enabled | bool
8181
with_dict: "{{ octavia_services }}"
8282
notify:
8383
- "Restart {{ item.key }} container"
8484

85-
- name: Copying over Octavia SSH key
86-
copy:
87-
content: "{{ octavia_amp_ssh_key.private_key }}"
88-
dest: "{{ node_config_directory }}/octavia-worker/{{ octavia_amp_ssh_key_name }}"
89-
owner: "{{ config_owner_user }}"
90-
group: "{{ config_owner_group }}"
91-
mode: "0400"
92-
become: True
93-
when: inventory_hostname in groups[octavia_services['octavia-worker']['group']]
85+
- block:
9486

95-
- name: Copying certificate files for octavia-worker
96-
vars:
97-
service: "{{ octavia_services['octavia-worker'] }}"
98-
copy:
99-
src: "{{ node_custom_config }}/octavia/{{ item }}"
100-
dest: "{{ node_config_directory }}/octavia-worker/{{ item }}"
101-
mode: "0660"
102-
become: true
103-
when:
104-
- inventory_hostname in groups[service.group]
105-
- service.enabled | bool
106-
with_items:
107-
- client.cert-and-key.pem
108-
- client_ca.cert.pem
109-
- server_ca.cert.pem
110-
- server_ca.key.pem
111-
notify:
112-
- Restart octavia-worker container
87+
- name: Copying over Octavia SSH key
88+
copy:
89+
content: "{{ octavia_amp_ssh_key.private_key }}"
90+
dest: "{{ node_config_directory }}/octavia-worker/{{ octavia_amp_ssh_key_name }}"
91+
owner: "{{ config_owner_user }}"
92+
group: "{{ config_owner_group }}"
93+
mode: "0400"
94+
become: True
95+
when: inventory_hostname in groups[octavia_services['octavia-worker']['group']]
11396

114-
- name: Copying certificate files for octavia-housekeeping
115-
vars:
116-
service: "{{ octavia_services['octavia-housekeeping'] }}"
117-
copy:
118-
src: "{{ node_custom_config }}/octavia/{{ item }}"
119-
dest: "{{ node_config_directory }}/octavia-housekeeping/{{ item }}"
120-
mode: "0660"
121-
become: true
122-
when:
123-
- inventory_hostname in groups[service.group]
124-
- service.enabled | bool
125-
with_items:
126-
- client.cert-and-key.pem
127-
- client_ca.cert.pem
128-
- server_ca.cert.pem
129-
- server_ca.key.pem
130-
notify:
131-
- Restart octavia-housekeeping container
97+
- name: Copying certificate files for octavia-worker
98+
vars:
99+
service: "{{ octavia_services['octavia-worker'] }}"
100+
copy:
101+
src: "{{ node_custom_config }}/octavia/{{ item }}"
102+
dest: "{{ node_config_directory }}/octavia-worker/{{ item }}"
103+
mode: "0660"
104+
become: true
105+
when:
106+
- inventory_hostname in groups[service.group]
107+
- service.enabled | bool
108+
with_items: "{{ octavia_amphora_keys }}"
109+
notify:
110+
- Restart octavia-worker container
111+
112+
- name: Copying certificate files for octavia-housekeeping
113+
vars:
114+
service: "{{ octavia_services['octavia-housekeeping'] }}"
115+
copy:
116+
src: "{{ node_custom_config }}/octavia/{{ item }}"
117+
dest: "{{ node_config_directory }}/octavia-housekeeping/{{ item }}"
118+
mode: "0660"
119+
become: true
120+
when:
121+
- inventory_hostname in groups[service.group]
122+
- service.enabled | bool
123+
with_items: "{{ octavia_amphora_keys }}"
124+
notify:
125+
- Restart octavia-housekeeping container
126+
127+
- name: Copying certificate files for octavia-health-manager
128+
vars:
129+
service: "{{ octavia_services['octavia-health-manager'] }}"
130+
copy:
131+
src: "{{ node_custom_config }}/octavia/{{ item }}"
132+
dest: "{{ node_config_directory }}/octavia-health-manager/{{ item }}"
133+
mode: "0660"
134+
become: true
135+
when:
136+
- inventory_hostname in groups[service.group]
137+
- service.enabled | bool
138+
with_items: "{{ octavia_amphora_keys }}"
139+
notify:
140+
- Restart octavia-health-manager container
132141

133-
- name: Copying certificate files for octavia-health-manager
142+
when: "'amphora' in octavia_provider_drivers"
134143
vars:
135-
service: "{{ octavia_services['octavia-health-manager'] }}"
136-
copy:
137-
src: "{{ node_custom_config }}/octavia/{{ item }}"
138-
dest: "{{ node_config_directory }}/octavia-health-manager/{{ item }}"
139-
mode: "0660"
140-
become: true
141-
when:
142-
- inventory_hostname in groups[service.group]
143-
- service.enabled | bool
144-
with_items:
145-
- client.cert-and-key.pem
146-
- client_ca.cert.pem
147-
- server_ca.cert.pem
148-
- server_ca.key.pem
149-
notify:
150-
- Restart octavia-health-manager container
144+
octavia_amphora_keys:
145+
- client.cert-and-key.pem
146+
- client_ca.cert.pem
147+
- server_ca.cert.pem
148+
- server_ca.key.pem

ansible/roles/octavia/tasks/precheck.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
Octavia's certificate configuration has been changed since Train. The new
4242
configuration requires 4 PEM files. Please check certificate configuration
4343
guide at https://docs.openstack.org/octavia/latest/admin/guides/certificates.html
44+
when: "'amphora' in octavia_provider_drivers"
4445

4546
- name: Checking certificate files exist for octavia
4647
stat:
@@ -49,7 +50,9 @@
4950
run_once: True
5051
register: result
5152
failed_when: not result.stat.exists
52-
when: inventory_hostname in groups['octavia-worker']
53+
when:
54+
- inventory_hostname in groups['octavia-worker']
55+
- "'amphora' in octavia_provider_drivers"
5356
with_items:
5457
- client.cert-and-key.pem
5558
- client_ca.cert.pem

ansible/roles/octavia/templates/octavia-api.json.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,11 @@
1313
"owner": "octavia",
1414
"perm": "0600"
1515
}{% endif %}
16+
],
17+
"permissions": [
18+
{
19+
"path": "/var/run/octavia",
20+
"owner": "octavia:octavia"
21+
}
1622
]
1723
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"command": "octavia-driver-agent --config-file /etc/octavia/octavia.conf",
3+
"config_files": [
4+
{
5+
"source": "{{ container_config_directory }}/octavia.conf",
6+
"dest": "/etc/octavia/octavia.conf",
7+
"owner": "octavia",
8+
"perm": "0600"
9+
}{% if octavia_policy_file is defined %},
10+
{
11+
"source": "{{ container_config_directory }}/{{ octavia_policy_file }}",
12+
"dest": "/etc/octavia/{{ octavia_policy_file }}",
13+
"owner": "octavia",
14+
"perm": "0600"
15+
}{% endif %}
16+
],
17+
"permissions": [
18+
{
19+
"path": "/var/run/octavia",
20+
"owner": "octavia:octavia"
21+
}
22+
]
23+
}

0 commit comments

Comments
 (0)