aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ansible/group_vars/all.yml1
-rw-r--r--ansible/inventory/all-in-one3
-rw-r--r--ansible/inventory/multinode3
-rw-r--r--ansible/roles/neutron/defaults/main.yml4
-rw-r--r--ansible/roles/neutron/tasks/bootstrap_service.yml23
-rw-r--r--ansible/roles/neutron/tasks/config.yml14
-rw-r--r--ansible/roles/neutron/tasks/deploy.yml2
-rw-r--r--ansible/roles/neutron/tasks/do_reconfigure.yml20
-rw-r--r--ansible/roles/neutron/tasks/reconfigure.yml1
-rw-r--r--ansible/roles/neutron/tasks/start.yml17
-rw-r--r--ansible/roles/neutron/tasks/upgrade.yml2
-rw-r--r--ansible/roles/neutron/templates/lbaas_agent.ini.j217
-rw-r--r--ansible/roles/neutron/templates/neutron-lbaas-agent.json.j217
-rw-r--r--ansible/roles/neutron/templates/neutron.conf.j27
-rw-r--r--ansible/site.yml1
-rw-r--r--docker/neutron/neutron-base/Dockerfile.j22
-rw-r--r--docker/neutron/neutron-lbaas-agent/Dockerfile.j251
-rw-r--r--docker/neutron/neutron-lbaas-agent/extend_start.sh8
-rw-r--r--docker/neutron/neutron-server/Dockerfile.j217
-rw-r--r--etc/kolla/globals.yml1
-rw-r--r--kolla/common/config.py4
-rw-r--r--releasenotes/notes/add-neutron-lbaas-dbb92dada9d34ceb.yaml3
22 files changed, 217 insertions, 1 deletions
diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 17e1f6897..8aeabcaaa 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -204,6 +204,7 @@ enable_manila: "no"
enable_mistral: "no"
enable_mongodb: "no"
enable_murano: "no"
+enable_neutron_lbaas: "no"
enable_swift: "no"
ironic_keystone_user: "ironic"
diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index a33dc4d5c..dfa852985 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -130,6 +130,9 @@ neutron
[neutron-l3-agent:children]
neutron
+[neutron-lbaas-agent:children]
+neutron
+
[neutron-metadata-agent:children]
neutron
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index e3434ced8..a662fcf60 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -142,6 +142,9 @@ neutron
[neutron-l3-agent:children]
neutron
+[neutron-lbaas-agent:children]
+neutron
+
[neutron-metadata-agent:children]
neutron
diff --git a/ansible/roles/neutron/defaults/main.yml b/ansible/roles/neutron/defaults/main.yml
index a8660cab1..80c6ed43e 100644
--- a/ansible/roles/neutron/defaults/main.yml
+++ b/ansible/roles/neutron/defaults/main.yml
@@ -20,6 +20,10 @@ neutron_l3_agent_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{
neutron_l3_agent_tag: "{{ openstack_release }}"
neutron_l3_agent_image_full: "{{ neutron_l3_agent_image }}:{{ neutron_l3_agent_tag }}"
+neutron_lbaas_agent_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-neutron-lbaas-agent"
+neutron_lbaas_agent_tag: "{{ openstack_release }}"
+neutron_lbaas_agent_image_full: "{{ neutron_lbaas_agent_image }}:{{ neutron_lbaas_agent_tag }}"
+
neutron_linuxbridge_agent_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-neutron-linuxbridge-agent"
neutron_linuxbridge_agent_tag: "{{ openstack_release }}"
neutron_linuxbridge_agent_image_full: "{{ neutron_linuxbridge_agent_image }}:{{ neutron_linuxbridge_agent_tag }}"
diff --git a/ansible/roles/neutron/tasks/bootstrap_service.yml b/ansible/roles/neutron/tasks/bootstrap_service.yml
index 534c45146..b654e56b2 100644
--- a/ansible/roles/neutron/tasks/bootstrap_service.yml
+++ b/ansible/roles/neutron/tasks/bootstrap_service.yml
@@ -18,3 +18,26 @@
- "kolla_logs:/var/log/kolla/"
run_once: True
delegate_to: "{{ groups['neutron-server'][0] }}"
+
+- name: Running Neutron lbaas bootstrap container
+ kolla_docker:
+ action: "start_container"
+ common_options: "{{ docker_common_options }}"
+ detach: False
+ environment:
+ KOLLA_BOOTSTRAP:
+ KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+ image: "{{ neutron_lbaas_agent_image_full }}"
+ labels:
+ BOOTSTRAP:
+ name: "bootstrap_neutron_lbaas_agent"
+ restart_policy: "never"
+ volumes:
+ - "{{ node_config_directory }}/neutron-lbaas-agent/:{{ container_config_directory }}/:ro"
+ - "/etc/localtime:/etc/localtime:ro"
+ - "kolla_logs:/var/log/kolla/"
+ when:
+ - enable_neutron_lbaas | bool
+ - inventory_hostname in groups['neutron-lbaas-agent']
+ run_once: True
+ delegate_to: "{{ groups['neutron-lbaas-agent'][0] }}"
diff --git a/ansible/roles/neutron/tasks/config.yml b/ansible/roles/neutron/tasks/config.yml
index 84dd3d5c7..e99e446c2 100644
--- a/ansible/roles/neutron/tasks/config.yml
+++ b/ansible/roles/neutron/tasks/config.yml
@@ -23,6 +23,7 @@
- "neutron-server"
- "openvswitch-db-server"
- "openvswitch-vswitchd"
+ - "neutron-lbaas-agent"
- name: Copying over config.json files for services
template:
@@ -37,6 +38,7 @@
- "neutron-server"
- "openvswitch-db-server"
- "openvswitch-vswitchd"
+ - "neutron-lbaas-agent"
- name: Copying over neutron.conf
merge_configs:
@@ -58,6 +60,7 @@
- "neutron-metadata-agent"
- "neutron-openvswitch-agent"
- "neutron-server"
+ - "neutron-lbaas-agent"
- name: Copying over ml2_conf.ini
merge_configs:
@@ -126,3 +129,14 @@
dest: "{{ node_config_directory }}/{{ item }}/metadata_agent.ini"
with_items:
- "neutron-metadata-agent"
+
+- name: Copying over lbaas_agent.ini
+ merge_configs:
+ vars:
+ service_name: "{{ item }}"
+ sources:
+ - "{{ role_path }}/templates/lbaas_agent.ini.j2"
+ - "/etc/kolla/config/neutron/lbaas_agent.ini"
+ dest: "{{ node_config_directory }}/{{ item }}/lbaas_agent.ini"
+ with_items:
+ - "neutron-lbaas-agent"
diff --git a/ansible/roles/neutron/tasks/deploy.yml b/ansible/roles/neutron/tasks/deploy.yml
index 1c2f1161d..13d0d9d30 100644
--- a/ansible/roles/neutron/tasks/deploy.yml
+++ b/ansible/roles/neutron/tasks/deploy.yml
@@ -12,6 +12,7 @@
or inventory_hostname in groups['neutron-l3-agent']
or inventory_hostname in groups['neutron-metadata-agent']
or inventory_hostname in groups['neutron-server']
+ or inventory_hostname in groups['neutron-lbaas-agent']
- include: config-neutron-fake.yml
when:
@@ -28,3 +29,4 @@
or inventory_hostname in groups['neutron-l3-agent']
or inventory_hostname in groups['neutron-metadata-agent']
or inventory_hostname in groups['neutron-server']
+ or inventory_hostname in groups['neutron-lbaas-agent']
diff --git a/ansible/roles/neutron/tasks/do_reconfigure.yml b/ansible/roles/neutron/tasks/do_reconfigure.yml
index ebe2edee5..bd2f72eca 100644
--- a/ansible/roles/neutron/tasks/do_reconfigure.yml
+++ b/ansible/roles/neutron/tasks/do_reconfigure.yml
@@ -10,6 +10,7 @@
- { name: neutron_server, group: neutron-server }
- { name: neutron_dhcp_agent, group: neutron-dhcp-agent }
- { name: neutron_l3_agent, group: neutron-l3-agent }
+ - { name: neutron_lbaas_agent, group: neutron-lbaas-agent }
- { name: neutron_metadata_agent, group: neutron-metadata-agent }
- name: Ensuring the neutron_openvswitch_agent container is up
@@ -25,11 +26,13 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
and not enable_nova_fake | bool
) or
( inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
and enable_nova_fake | bool
)
@@ -47,6 +50,7 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent'])
- include: config.yml
@@ -61,6 +65,7 @@
- { name: neutron_server, group: neutron-server }
- { name: neutron_dhcp_agent, group: neutron-dhcp-agent }
- { name: neutron_l3_agent, group: neutron-l3-agent }
+ - { name: neutron_lbaas_agent, group: neutron-lbaas-agent }
- { name: neutron_metadata_agent, group: neutron-metadata-agent }
- name: Check the configs in the neutron_openvswitch_agent container
@@ -75,11 +80,13 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
and not enable_nova_fake | bool
) or
( inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
and enable_nova_fake | bool
)
@@ -96,6 +103,7 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent'])
# NOTE(jeffrey4l): when config_strategy == 'COPY_ALWAYS'
@@ -111,6 +119,7 @@
- { name: neutron_server, group: neutron-server }
- { name: neutron_dhcp_agent, group: neutron-dhcp-agent }
- { name: neutron_l3_agent, group: neutron-l3-agent }
+ - { name: neutron_lbaas_agent, group: neutron-lbaas-agent }
- { name: neutron_metadata_agent, group: neutron-metadata-agent }
- name: Container config strategy for the neutron_openvswitch_agent container
@@ -126,11 +135,13 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
) or
( enable_nova_fake | bool
and inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
)
)
@@ -146,6 +157,7 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent'])
- name: Remove the containers running neutron-server and neutron agents
@@ -161,6 +173,7 @@
- [{ name: neutron_server, group: neutron-server },
{ name: neutron_dhcp_agent, group: neutron-dhcp-agent },
{ name: neutron_l3_agent, group: neutron-l3-agent },
+ { name: neutron_lbaas_agent, group: neutron-lbaas-agent },
{ name: neutron_metadata_agent, group: neutron-metadata-agent }]
- neutron_container_envs.results
- neutron_check_results.results
@@ -178,11 +191,13 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
) or
( enable_nova_fake | bool
and inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
)
)
@@ -200,6 +215,7 @@
or inventory_hostname in groups['manila-share']
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent'])
- config_strategy == "COPY_ONCE" or linuxbridge_agent_envs['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE'
- linuxbridge_agent_check_results['rc'] == 1
@@ -222,6 +238,7 @@
- [{ name: neutron_server, group: neutron-server },
{ name: neutron_dhcp_agent, group: neutron-dhcp-agent },
{ name: neutron_l3_agent, group: neutron-l3-agent },
+ { name: neutron_lbaas_agent, group: neutron-lbaas-agent },
{ name: neutron_metadata_agent, group: neutron-metadata-agent }]
- neutron_container_envs.results
- neutron_check_results.results
@@ -238,11 +255,13 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
and not enable_nova_fake | bool
) or
( inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
and enable_nova_fake | bool
)
@@ -261,6 +280,7 @@
or (enable_manila | bool and inventory_hostname in groups['manila-share'])
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent'])
- linuxbridge_agent_envs['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE'
- linuxbridge_agent_check_results['rc'] == 1
diff --git a/ansible/roles/neutron/tasks/reconfigure.yml b/ansible/roles/neutron/tasks/reconfigure.yml
index e51969c57..0cac05dda 100644
--- a/ansible/roles/neutron/tasks/reconfigure.yml
+++ b/ansible/roles/neutron/tasks/reconfigure.yml
@@ -6,4 +6,5 @@
or inventory_hostname in groups['compute']
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
diff --git a/ansible/roles/neutron/tasks/start.yml b/ansible/roles/neutron/tasks/start.yml
index 2463eb927..ee37e8d15 100644
--- a/ansible/roles/neutron/tasks/start.yml
+++ b/ansible/roles/neutron/tasks/start.yml
@@ -185,6 +185,23 @@
when:
- inventory_hostname in groups['neutron-l3-agent']
+- name: Starting neutron-lbaas-agent container
+ kolla_docker:
+ action: "start_container"
+ common_options: "{{ docker_common_options }}"
+ image: "{{ neutron_lbaas_agent_image_full }}"
+ name: "neutron_lbaas_agent"
+ privileged: True
+ volumes:
+ - "{{ node_config_directory }}/neutron-lbaas-agent/:{{ container_config_directory }}/:ro"
+ - "/run:/run"
+ - "/run/netns/:/run/netns/:shared"
+ - "neutron_metadata_socket:/var/lib/neutron/kolla/"
+ - "kolla_logs:/var/log/kolla/"
+ when:
+ - enable_neutron_lbaas | bool
+ - inventory_hostname in groups['neutron-lbaas-agent']
+
- name: Starting neutron-metadata-agent container
kolla_docker:
action: "start_container"
diff --git a/ansible/roles/neutron/tasks/upgrade.yml b/ansible/roles/neutron/tasks/upgrade.yml
index 08f57269d..a904606da 100644
--- a/ansible/roles/neutron/tasks/upgrade.yml
+++ b/ansible/roles/neutron/tasks/upgrade.yml
@@ -3,6 +3,7 @@
when: inventory_hostname in groups['compute']
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
or inventory_hostname in groups['neutron-server']
@@ -19,5 +20,6 @@
when: inventory_hostname in groups['compute']
or inventory_hostname in groups['neutron-dhcp-agent']
or inventory_hostname in groups['neutron-l3-agent']
+ or inventory_hostname in groups['neutron-lbaas-agent']
or inventory_hostname in groups['neutron-metadata-agent']
or inventory_hostname in groups['neutron-server']
diff --git a/ansible/roles/neutron/templates/lbaas_agent.ini.j2 b/ansible/roles/neutron/templates/lbaas_agent.ini.j2
new file mode 100644
index 000000000..182e26d3e
--- /dev/null
+++ b/ansible/roles/neutron/templates/lbaas_agent.ini.j2
@@ -0,0 +1,17 @@
+[DEFAULT]
+debug = {{ neutron_logging_debug }}
+verbose = True
+
+output_file = /etc/neutron/lbaas_agent.ini
+wrap_width = 79
+
+{% if neutron_plugin_agent == "openvswitch" %}
+interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
+{% elif neutron_plugin_agent == "linuxbridge" %}
+interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
+{% endif %}
+
+device_driver = neutron_lbaas.drivers.haproxy.namespace_driver.HaproxyNSDriver
+
+[haproxy]
+user_group = haproxy
diff --git a/ansible/roles/neutron/templates/neutron-lbaas-agent.json.j2 b/ansible/roles/neutron/templates/neutron-lbaas-agent.json.j2
new file mode 100644
index 000000000..541a25524
--- /dev/null
+++ b/ansible/roles/neutron/templates/neutron-lbaas-agent.json.j2
@@ -0,0 +1,17 @@
+{
+ "command": "neutron-lbaasv2-agent --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/lbaas_agent.ini",
+ "config_files": [
+ {
+ "source": "{{ container_config_directory }}/neutron.conf",
+ "dest": "/etc/neutron/neutron.conf",
+ "owner": "neutron",
+ "perm": "0600"
+ },
+ {
+ "source": "{{ container_config_directory }}/lbaas_agent.ini",
+ "dest": "/etc/neutron/lbaas_agent.ini",
+ "owner": "neutron",
+ "perm": "0600"
+ }
+ ]
+}
diff --git a/ansible/roles/neutron/templates/neutron.conf.j2 b/ansible/roles/neutron/templates/neutron.conf.j2
index 6a8d7ab73..a15a0007d 100644
--- a/ansible/roles/neutron/templates/neutron.conf.j2
+++ b/ansible/roles/neutron/templates/neutron.conf.j2
@@ -32,7 +32,12 @@ host = {{ ansible_hostname }}_{{ item }}
allow_overlapping_ips = true
core_plugin = ml2
-service_plugins = router
+service_plugins = router{% if enable_neutron_lbaas | bool %},neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2{% endif %}
+
+{% if enable_neutron_lbaas | bool %}
+[service_providers]
+service_provider = LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
+{% endif %}
[nova]
auth_url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}
diff --git a/ansible/site.yml b/ansible/site.yml
index a23196204..aca74fe0f 100644
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -119,6 +119,7 @@
- neutron-server
- neutron-dhcp-agent
- neutron-l3-agent
+ - neutron-lbaas-agent
- neutron-metadata-agent
- compute
- manila-share
diff --git a/docker/neutron/neutron-base/Dockerfile.j2 b/docker/neutron/neutron-base/Dockerfile.j2
index b89a9ad46..44d761d4a 100644
--- a/docker/neutron/neutron-base/Dockerfile.j2
+++ b/docker/neutron/neutron-base/Dockerfile.j2
@@ -8,6 +8,7 @@ RUN yum -y install \
openstack-neutron \
openstack-neutron-ml2 \
openvswitch \
+ openstack-neutron-lbaas \
&& yum clean all
{% elif base_distro in ['ubuntu'] %}
@@ -16,6 +17,7 @@ RUN apt-get -y install --no-install-recommends \
neutron-plugin-ml2 \
neutron-server \
openvswitch-switch \
+ neutron-lbaas \
&& apt-get clean \
&& mkdir -p /usr/share/neutron \
&& ln -s /etc/neutron/api-paste.ini /usr/share/neutron/api-paste.ini
diff --git a/docker/neutron/neutron-lbaas-agent/Dockerfile.j2 b/docker/neutron/neutron-lbaas-agent/Dockerfile.j2
new file mode 100644
index 000000000..2965309b2
--- /dev/null
+++ b/docker/neutron/neutron-lbaas-agent/Dockerfile.j2
@@ -0,0 +1,51 @@
+FROM {{ namespace }}/{{ image_prefix }}neutron-base:{{ tag }}
+MAINTAINER {{ maintainer }}
+
+{% if base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
+
+RUN yum -y install \
+ haproxy \
+ && yum clean all
+
+{% elif base_distro in ['ubuntu'] %}
+
+RUN apt-get -y install --no-install-recommends \
+ haproxy \
+ && apt-get clean
+
+{% endif %}
+
+{% if install_type == 'binary' %}
+ {% if base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
+
+RUN yum -y install \
+ openstack-neutron-lbaas \
+ && yum clean all
+
+ {% elif base_distro in ['ubuntu'] %}
+
+RUN apt-get -y install --no-install-recommends \
+ neutron-lbaas-common \
+ neutron-lbaasv2-agent \
+ python-neutron-lbaas \
+ && apt-get clean \
+
+ {% endif %}
+
+{% elif install_type == 'source' %}
+
+ADD neutron-lbaas-agent-archive /neutron-lbaas-agent-source
+RUN ln -s neutron-lbaas-agent-source/* neutron_lbaas \
+ && /var/lib/kolla/venv/bin/pip --no-cache-dir install --upgrade -c requirements/upper-constraints.txt /neutron_lbaas \
+ && cp -r /neutron_lbaas/etc/* /etc/neutron/ \
+ && cp -r /neutron_lbaas/etc/neutron/* /etc/neutron/ \
+ && sed -i 's|^exec_dirs.*|exec_dirs=/var/lib/kolla/venv/bin,/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin|g' /etc/neutron/rootwrap.conf
+
+{% endif %}
+
+COPY extend_start.sh /usr/local/bin/kolla_neutron_extend_start
+RUN chmod 755 /usr/local/bin/kolla_neutron_extend_start
+
+{{ include_footer }}
+
+USER neutron
diff --git a/docker/neutron/neutron-lbaas-agent/extend_start.sh b/docker/neutron/neutron-lbaas-agent/extend_start.sh
new file mode 100644
index 000000000..6a1f96036
--- /dev/null
+++ b/docker/neutron/neutron-lbaas-agent/extend_start.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
+# of the KOLLA_BOOTSTRAP variable being set, including empty.
+if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
+ neutron-db-manage --service lbaas --config-file /etc/neutron/neutron.conf upgrade head
+ exit 0
+fi
diff --git a/docker/neutron/neutron-server/Dockerfile.j2 b/docker/neutron/neutron-server/Dockerfile.j2
index 6fbfb2e2d..18edabe12 100644
--- a/docker/neutron/neutron-server/Dockerfile.j2
+++ b/docker/neutron/neutron-server/Dockerfile.j2
@@ -1,6 +1,23 @@
FROM {{ namespace }}/{{ image_prefix }}neutron-base:{{ tag }}
MAINTAINER {{ maintainer }}
+{% if install_type == 'binary' %}
+ {% if base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
+
+RUN yum -y install \
+ openstack-neutron-lbaas \
+ && yum clean all
+
+ {% elif base_distro in ['ubuntu'] %}
+
+RUN apt-get -y install --no-install-recommends \
+ neutron-lbaas-common \
+ neutron-lbaasv2-agent \
+ python-neutron-lbaas \
+ && apt-get clean \
+ {% endif %}
+{% endif %}
+
ADD plugins-archive /
COPY extend_start.sh /usr/local/bin/kolla_neutron_extend_start
RUN chmod 755 /usr/local/bin/kolla_neutron_extend_start \
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index c44077200..c32aa87db 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -118,6 +118,7 @@ neutron_external_interface: "eth1"
#enable_mistral: "no"
#enable_mongodb: "no"
#enable_murano: "no"
+#enable_neutron_lbaas: "no"
#enable_swift: "no"
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 83ccfb0fb..dbe6394f8 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -217,6 +217,10 @@ SOURCES = {
'type': 'url',
'location': ('http://tarballs.openstack.org/neutron/'
'neutron-master.tar.gz')},
+ 'neutron-lbaas-agent': {
+ 'type': 'url',
+ 'location': ('http://tarballs.openstack.org/neutron-lbaas/'
+ 'neutron-lbaas-master.tar.gz')},
'nova-base': {
'type': 'url',
'location': ('http://tarballs.openstack.org/nova/'
diff --git a/releasenotes/notes/add-neutron-lbaas-dbb92dada9d34ceb.yaml b/releasenotes/notes/add-neutron-lbaas-dbb92dada9d34ceb.yaml
new file mode 100644
index 000000000..85e415a40
--- /dev/null
+++ b/releasenotes/notes/add-neutron-lbaas-dbb92dada9d34ceb.yaml
@@ -0,0 +1,3 @@
+---
+features:
+ - Add support for LBaaSv2 with HAproxy container.