Adds Neutron LBaaS Support

Previously, kolla did not support neutron lbaas functionality.
Only Lbaasv2 is supported in Mitaka. Additional information can
be found here:
http://docs.openstack.org/mitaka/networking-guide/adv-config-lbaas.html
Magnum uses Neutron Lbaas to provide high availability to COE API
and Etcd endpoints within a bay. Therefore, Neutron Lbaas is required
for Kolla to support Magnum.

Co-Authored-By: Serguei Bezverkhi <sbezverk@cisco.com>
Partial-Bug: #1551992

Change-Id: I05360b7c447c601fcb3c2b6b2a913ef5cc0f3a1b
This commit is contained in:
Daneyon Hansen 2016-05-10 20:26:58 +00:00 committed by Serguei Bezverkhi
parent c51e315523
commit ba30579b3b
22 changed files with 217 additions and 1 deletions

View File

@ -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"

View File

@ -130,6 +130,9 @@ neutron
[neutron-l3-agent:children]
neutron
[neutron-lbaas-agent:children]
neutron
[neutron-metadata-agent:children]
neutron

View File

@ -142,6 +142,9 @@ neutron
[neutron-l3-agent:children]
neutron
[neutron-lbaas-agent:children]
neutron
[neutron-metadata-agent:children]
neutron

View File

@ -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 }}"

View File

@ -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] }}"

View File

@ -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"

View File

@ -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']

View File

@ -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

View File

@ -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']

View File

@ -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"

View File

@ -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']

View File

@ -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

View File

@ -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"
}
]
}

View File

@ -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 }}

View File

@ -119,6 +119,7 @@
- neutron-server
- neutron-dhcp-agent
- neutron-l3-agent
- neutron-lbaas-agent
- neutron-metadata-agent
- compute
- manila-share

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 \

View File

@ -118,6 +118,7 @@ neutron_external_interface: "eth1"
#enable_mistral: "no"
#enable_mongodb: "no"
#enable_murano: "no"
#enable_neutron_lbaas: "no"
#enable_swift: "no"

View File

@ -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/'

View File

@ -0,0 +1,3 @@
---
features:
- Add support for LBaaSv2 with HAproxy container.