From 2f2bb366e0aa856803c0d21a7a541802d814d180 Mon Sep 17 00:00:00 2001 From: Daneyon Hansen <danehans@cisco.com> Date: Thu, 26 Mar 2015 19:47:56 +0000 Subject: [PATCH] Adds neutron-server to neutron container-set Adds neutron-server components of the neutron container set. Partially Implements: blueprint compute-operation-neutron Change-Id: I63525ae85f4ead4e010cdb9b6bc8059bb9d252e7 --- compose/neutron-server.yml | 7 ++ docker/neutron/neutron-base/Dockerfile | 1 - docker/neutron/neutron-base/config-neutron.sh | 84 ++++++++++++------- docker/neutron/neutron-server/Dockerfile | 4 +- docker/neutron/neutron-server/start.sh | 49 ++++++----- docker/nova-base/config-nova.sh | 9 ++ docs/integration-guide.md | 8 ++ docs/minimal-environment-vars.md | 14 ++++ tools/genenv | 27 +++++- 9 files changed, 145 insertions(+), 58 deletions(-) create mode 100644 compose/neutron-server.yml diff --git a/compose/neutron-server.yml b/compose/neutron-server.yml new file mode 100644 index 0000000000..b2da8bd93b --- /dev/null +++ b/compose/neutron-server.yml @@ -0,0 +1,7 @@ +neutronserver: + image: kollaglue/centos-rdo-neutron-server:latest + name: neutron-server + net: "host" + restart: always + env_file: + - openstack.env diff --git a/docker/neutron/neutron-base/Dockerfile b/docker/neutron/neutron-base/Dockerfile index d4f89f3ae8..22922a04cb 100644 --- a/docker/neutron/neutron-base/Dockerfile +++ b/docker/neutron/neutron-base/Dockerfile @@ -5,4 +5,3 @@ RUN yum -y install openstack-neutron-ml2 && yum clean all RUN mkdir -p /opt/kolla COPY config-neutron.sh /opt/kolla/config-neutron.sh - diff --git a/docker/neutron/neutron-base/config-neutron.sh b/docker/neutron/neutron-base/config-neutron.sh index 6cbbc74ac3..a079364a2c 100644 --- a/docker/neutron/neutron-base/config-neutron.sh +++ b/docker/neutron/neutron-base/config-neutron.sh @@ -4,28 +4,33 @@ set -e . /opt/kolla/kolla-common.sh -: ${ADMIN_TENANT_NAME:=admin} +# Database : ${NEUTRON_DB_NAME:=neutron} : ${NEUTRON_DB_USER:=neutron} +: ${NEUTRON_DB_PASSWORD:=password} +# Keystone +: ${ADMIN_TENANT_NAME:=admin} : ${NEUTRON_KEYSTONE_USER:=neutron} +: ${NEUTRON_KEYSTONE_PASSWORD:=password} : ${KEYSTONE_AUTH_PROTOCOL:=http} +: ${KEYSTONE_ADMIN_SERVICE_HOST:=127.0.0.1} +: ${KEYSTONE_PUBLIC_SERVICE_HOST:=127.0.0.1} +: ${KEYSTONE_ADMIN_SERVICE_PORT:=35357} +: ${KEYSTONE_PUBLIC_SERVICE_PORT:=5000} +: ${KEYSTONE_REGION:=RegionOne} +# RabbitMQ : ${RABBIT_HOST:=$RABBITMQ_SERVICE_HOST} : ${RABBIT_USER:=guest} : ${RABBIT_PASSWORD:=guest} +# Logging : ${VERBOSE_LOGGING:=true} : ${DEBUG_LOGGING:=false} +# Networking +: ${NEUTRON_FLAT_NETWORK_NAME:=physnet1} check_required_vars NEUTRON_KEYSTONE_PASSWORD NEUTRON_LOG_DIR \ - KEYSTONE_PUBLIC_SERVICE_HOST RABBITMQ_SERVICE_HOST - -dump_vars - -cat > /openrc <<EOF -export OS_AUTH_URL="http://${KEYSTONE_PUBLIC_SERVICE_HOST}:5000/v2.0" -export OS_USERNAME="${NEUTRON_KEYSTONE_USER}" -export OS_PASSWORD="${NEUTRON_KEYSTONE_PASSWORD}" -export OS_TENANT_NAME="${ADMIN_TENANT_NAME}" -EOF + KEYSTONE_PUBLIC_SERVICE_HOST RABBITMQ_SERVICE_HOST \ + NEUTRON_API_PASTE_CONFIG core_cfg=/etc/neutron/neutron.conf ml2_cfg=/etc/neutron/plugins/ml2/ml2_conf.ini @@ -44,6 +49,12 @@ crudini --set $core_cfg \ debug \ "${DEBUG_LOGGING}" +# Paste config +crudini --set $core_cfg \ + DEFAULT \ + api_paste_config \ + "${NEUTRON_API_PASTE_CONFIG}" + # Rabbit crudini --set $core_cfg \ DEFAULT \ @@ -58,27 +69,25 @@ crudini --set $core_cfg \ rabbit_password \ "${RABBIT_PASSWORD}" +# Locking +crudini --set $core_cfg \ + DEFAULT \ + lock_path \ + "/var/lock/neutron" + # Keystone crudini --set $core_cfg \ DEFAULT \ auth_strategy \ "keystone" -crudini --set $core_cfg \ - keystone_authtoken \ - auth_protocol \ - "${KEYSTONE_AUTH_PROTOCOL}" -crudini --set $core_cfg \ - keystone_authtoken \ - auth_host \ - "${KEYSTONE_ADMIN_SERVICE_HOST}" -crudini --set $core_cfg \ - keystone_authtoken \ - auth_port \ - "${KEYSTONE_ADMIN_SERVICE_PORT}" crudini --set $core_cfg \ keystone_authtoken \ auth_uri \ - "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_PUBLIC_SERVICE_HOST}:5000/" + "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_SERVICE_PORT}/v2.0" +crudini --set $core_cfg \ + keystone_authtoken \ + identity_uri \ + "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}" crudini --set $core_cfg \ keystone_authtoken \ admin_tenant_name \ @@ -96,15 +105,19 @@ crudini --set $core_cfg \ crudini --set $core_cfg \ DEFAULT \ core_plugin \ - "ml2" + "neutron.plugins.ml2.plugin.Ml2Plugin" crudini --set $core_cfg \ DEFAULT \ service_plugins \ - "router" + "neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.firewall.fwaas_plugin.FirewallPlugin" crudini --set $core_cfg \ DEFAULT \ allow_overlapping_ips \ - "False" + "True" +crudini --set $core_cfg \ + DEFAULT \ + network_device_mtu \ + "1450" # Configure ml2_conf.ini crudini --set $ml2_cfg \ @@ -114,11 +127,15 @@ crudini --set $ml2_cfg \ crudini --set $ml2_cfg \ ml2 \ tenant_network_types \ - "vxlan" + "vxlan,flat" crudini --set $ml2_cfg \ ml2 \ mechanism_drivers \ "linuxbridge,l2population" +crudini --set $ml2_cfg \ + ml2_type_flat \ + flat_networks \ + ${NEUTRON_FLAT_NETWORK_NAME} crudini --set $ml2_cfg \ ml2_type_vxlan \ vxlan_group \ @@ -155,7 +172,18 @@ crudini --set $ml2_cfg \ securitygroup \ enable_security_group \ "True" +crudini --set $ml2_cfg \ + securitygroup \ + enable_ipset \ + "True" crudini --set $ml2_cfg \ securitygroup \ firewall_driver \ "neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" + +cat > /openrc <<EOF +export OS_AUTH_URL="http://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_SERVICE_PORT}/v2.0" +export OS_USERNAME="${NEUTRON_KEYSTONE_USER}" +export OS_PASSWORD="${NEUTRON_KEYSTONE_PASSWORD}" +export OS_TENANT_NAME="${ADMIN_TENANT_NAME}" +EOF diff --git a/docker/neutron/neutron-server/Dockerfile b/docker/neutron/neutron-server/Dockerfile index a9d4eef4dd..edd6ea559e 100644 --- a/docker/neutron/neutron-server/Dockerfile +++ b/docker/neutron/neutron-server/Dockerfile @@ -4,11 +4,9 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla) #Install required packages RUN yum install -y openstack-neutron \ python-neutronclient \ - mariadb \ + which \ && yum clean all -VOLUME /var/lib/neutron - ADD ./start.sh /start.sh ADD ./check.sh /check.sh diff --git a/docker/neutron/neutron-server/start.sh b/docker/neutron/neutron-server/start.sh index f6c64f2a28..377738b69b 100755 --- a/docker/neutron/neutron-server/start.sh +++ b/docker/neutron/neutron-server/start.sh @@ -2,15 +2,16 @@ set -e -. /opt/kolla/kolla-common.sh . /opt/kolla/config-neutron.sh check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_ADMIN_SERVICE_HOST \ KEYSTONE_AUTH_PROTOCOL NOVA_API_SERVICE_HOST \ - NOVA_ADMIN_PASSWORD NEUTRON_DB_NAME NEUTRON_DB_USER \ + NOVA_KEYSTONE_USER NOVA_KEYSTONE_PASSWORD \ + NEUTRON_DB_NAME NEUTRON_DB_USER NEUTRON_DB_PASSWORD \ NEUTRON_KEYSTONE_USER NEUTRON_KEYSTONE_PASSWORD \ ADMIN_TENANT_NAME NEUTRON_SERVER_SERVICE_HOST \ PUBLIC_IP NEUTRON_DB_PASSWORD NEUTRON_SERVER_LOG_FILE + fail_unless_os_service_running keystone fail_unless_db @@ -22,7 +23,7 @@ GRANT ALL PRIVILEGES ON ${NEUTRON_DB_NAME}.* TO EOF export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}" -export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:35357/v2.0" +export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0" # Configure Keystone Service Catalog crux user-create -n "${NEUTRON_KEYSTONE_USER}" \ @@ -31,9 +32,12 @@ crux user-create -n "${NEUTRON_KEYSTONE_USER}" \ -r admin crux endpoint-create -n neutron -t network \ - -I "${KEYSTONE_AUTH_PROTOCOL}://${NEUTRON_SERVER_SERVICE_HOST}:9696" \ - -P "${KEYSTONE_AUTH_PROTOCOL}://${PUBLIC_IP}:9696" \ - -A "${KEYSTONE_AUTH_PROTOCOL}://${NEUTRON_SERVER_SERVICE_HOST}:9696" + -I "${KEYSTONE_AUTH_PROTOCOL}://${NEUTRON_SERVER_SERVICE_HOST}:${NEUTRON_SERVER_SERVICE_PORT}" \ + -P "${KEYSTONE_AUTH_PROTOCOL}://${NEUTRON_SERVER_SERVICE_HOST}:${NEUTRON_SERVER_SERVICE_PORT}" \ + -A "${KEYSTONE_AUTH_PROTOCOL}://${NEUTRON_SERVER_SERVICE_HOST}:${NEUTRON_SERVER_SERVICE_PORT}" + +core_cfg=/etc/neutron/neutron.conf +ml2_cfg=/etc/neutron/plugins/ml2/ml2_conf.ini # Logging crudini --set /etc/neutron/neutron.conf \ @@ -42,45 +46,44 @@ crudini --set /etc/neutron/neutron.conf \ "${NEUTRON_SERVER_LOG_FILE}" # Database -crudini --set /etc/neutron/neutron.conf \ +crudini --set $core_cfg \ database \ connection \ "mysql://${NEUTRON_DB_USER}:${NEUTRON_DB_PASSWORD}@${MARIADB_SERVICE_HOST}/${NEUTRON_DB_NAME}" - # Nova -crudini --set /etc/neutron/neutron.conf \ +crudini --set $core_cfg \ DEFAULT \ notify_nova_on_port_status_changes \ "True" -crudini --set /etc/neutron/neutron.conf \ +crudini --set $core_cfg \ DEFAULT \ notify_nova_on_port_data_changes \ "True" -crudini --set /etc/neutron/neutron.conf \ +crudini --set $core_cfg \ DEFAULT \ nova_url \ - "http://${NOVA_API_SERVICE_HOST}:8774/v2" -crudini --set /etc/neutron/neutron.conf \ + "http://${NOVA_API_SERVICE_HOST}:${NOVA_API_SERVICE_PORT}/v2" +crudini --set $core_cfg \ DEFAULT \ nova_admin_auth_url \ - "http://${KEYSTONE_ADMIN_SERVICE_HOST}:35357/v2.0" -crudini --set /etc/neutron/neutron.conf \ + "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0" +crudini --set $core_cfg \ DEFAULT \ nova_region_name \ - "RegionOne" -crudini --set /etc/neutron/neutron.conf \ + "${KEYSTONE_REGION}" +crudini --set $core_cfg \ DEFAULT \ nova_admin_username \ - "nova" -crudini --set /etc/neutron/neutron.conf \ + "${NOVA_KEYSTONE_USER}" +crudini --set $core_cfg \ DEFAULT \ nova_admin_tenant_id \ "$(keystone tenant-list | grep $ADMIN_TENANT_NAME | awk '{print $2;}')" -crudini --set /etc/neutron/neutron.conf \ +crudini --set $core_cfg \ DEFAULT \ nova_admin_password \ - "${NOVA_ADMIN_PASSWORD}" + "${NOVA_KEYSTONE_PASSWORD}" -/usr/bin/ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini +su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron -exec /usr/bin/neutron-server +exec /usr/bin/neutron-server --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini diff --git a/docker/nova-base/config-nova.sh b/docker/nova-base/config-nova.sh index 6350ed695c..0b1dc39d3d 100755 --- a/docker/nova-base/config-nova.sh +++ b/docker/nova-base/config-nova.sh @@ -14,6 +14,7 @@ : ${PUBLIC_NETWORK:=eth0} : ${ENABLED_APIS:=ec2,osapi_compute,metadata} : ${METADATA_HOST:=$PUBLIC_IP} +: ${NEUTRON_SHARED_SECRET:=sharedsecret} check_required_vars KEYSTONE_ADMIN_TOKEN NOVA_DB_PASSWORD \ RABBITMQ_SERVICE_HOST GLANCE_API_SERVICE_HOST \ @@ -89,7 +90,15 @@ elif [ "${NETWORK_MANAGER}" == "neutron" ] ; then crudini --set $cfg DEFAULT neutron_default_tenant_id default crudini --set $cfg DEFAULT network_api_class nova.network.neutronv2.api.API crudini --set $cfg DEFAULT security_group_api neutron + crudini --set $cfg DEFAULT linuxnet_interface_driver nova.network.linux_net.NeutronLinuxBridgeInterfaceDriver + crudini --set $cfg DEFAULT libvirt_vif_driver nova.virt.libvirt.vif.LibvirtGenericVIFDriver crudini --set $cfg DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver + crudini --set $cfg neutron url http://${NEUTRON_SERVER_SERVICE_HOST}:${NEUTRON_SERVER_SERVICE_PORT} + crudini --set $cfg neutron auth_strategy keystone + crudini --set $cfg neutron admin_auth_url ${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0 + crudini --set $cfg neutron admin_tenant_name ${ADMIN_TENANT_NAME} + crudini --set $cfg neutron admin_username ${NEUTRON_KEYSTONE_USER} + crudini --set $cfg neutron admin_password ${NEUTRON_KEYSTONE_PASSWORD} else echo "Incorrect NETWORK_MANAGER ${NETWORK_MANAGER}. Supported options are nova and neutron." exit 1 diff --git a/docs/integration-guide.md b/docs/integration-guide.md index 409c47207a..38a9f65459 100644 --- a/docs/integration-guide.md +++ b/docs/integration-guide.md @@ -84,6 +84,14 @@ all containers. This allows a simple method of ensuring every type of node NOVA_EC2_SERVICE_HOST=<IP> _ The IP Address where the Nova EC2 service is hosted NOVA_KEYSTONE_PASSWORD=<password> - The Nova keystone password NOVA_KEYSTONE_USER=<nova> - The Nova keystone username + NEUTRON_DB_NAME=<neutron> - The name of the Neutron database + NEUTRON_DB_USER=<neutron> - The name used by Neutron to access the Neutron database + NEUTRON_DB_PASSWORD=<password> The password used by Neutron to access the Neutron database + NEUTRON_KEYSTONE_USER=<neutron> - The name used by Neutron to communicate with Keystone + NEUTRON_KEYSTONE_PASSWORD=<neutron> - The password used by Neutron to communicate with Keystone + NEUTRON_SERVER_SERVICE_HOST=<$HOST_IP> - The IP address/hostname used to commuicate with the Neutron API + NEUTRON_SHARED_SECRET=<sharedsecret> - The shared secret used between Neutron/Nova to secure metadata communication + NEUTRON_API_PASTE_CONFIG=</usr/share/neutron/api-paste.ini> - Location of Neutron's API paste config file HEAT_DB_NAME=<heat> - The heat DB name HEAT_DB_PASSWORD=<kolla> - The heat db password HEAT_KEYSTONE_PASSWORD=<heat> - The keystone password for the heat user diff --git a/docs/minimal-environment-vars.md b/docs/minimal-environment-vars.md index 713507f795..710ea443ac 100644 --- a/docs/minimal-environment-vars.md +++ b/docs/minimal-environment-vars.md @@ -231,3 +231,17 @@ In order for each service to function, there is a minimum set of required variab NOVA_EC2_NETWORK_SERVICE_HOST NOVA_EC2_SERVICE_HOST PUBLIC_IP + +# Neutron/Nova + + NEUTRON_SHARED_SECRET + +# Neutron Server + + NEUTRON_DB_NAME + NEUTRON_DB_USER + NEUTRON_DB_PASSWORD + NEUTRON_KEYSTONE_USER + NEUTRON_KEYSTONE_PASSWORD + NEUTRON_SERVER_SERVICE_HOST + NEUTRON_API_PASTE_CONFIG diff --git a/tools/genenv b/tools/genenv index bb349b5b0a..0f32260365 100755 --- a/tools/genenv +++ b/tools/genenv @@ -50,6 +50,9 @@ RABBITMQ_SERVICE_HOST=$HOST_IP RABBIT_USER=guest RABBIT_PASSWORD=guest +# Networking Options are nova or neutron +NETWORK_MANAGER=neutron + # Keystone KEYSTONE_ADMIN_TOKEN=$PASSWORD KEYSTONE_DB_PASSWORD=kolla @@ -77,7 +80,6 @@ NOVA_API_SERVICE_HOST=$HOST_IP NOVA_EC2_SERVICE_HOST=$HOST_IP NOVA_PUBLIC_INTERFACE=$MY_DEV NOVA_FLAT_INTERFACE=eth1 -CONFIG_NETWORK=True ENABLED_APIS=ec2,osapi_compute,metadata METADATA_HOST=$HOST_IP @@ -85,6 +87,18 @@ METADATA_HOST=$HOST_IP NEUTRON_FLAT_NETWORK_NAME=physnet1 NEUTRON_FLAT_NETWORK_INTERFACE=eth1 +# Neutron +NEUTRON_DB_NAME=neutron +NEUTRON_DB_USER=neutron +NEUTRON_DB_PASSWORD=password +NEUTRON_KEYSTONE_USER=neutron +NEUTRON_KEYSTONE_PASSWORD=neutron +NEUTRON_SERVER_SERVICE_HOST=$HOST_IP +NEUTRON_API_PASTE_CONFIG=/usr/share/neutron/api-paste.ini + +# Nova/Neutron +NEUTRON_SHARED_SECRET=sharedsecret + # Heat HEAT_DB_NAME=heat HEAT_DB_PASSWORD=kolla @@ -114,7 +128,6 @@ NEUTRON_LINUXBRIDGE_AGENT_LOG_FILE=$NEUTRON_LINUXBRIDGE_AGENT_LOG_FILE NEUTRON_METADATA_AGENT_LOG_FILE=$NEUTRON_METADATA_AGENT_LOG_FILE ADMIN_USER_PASSWORD=$ADMIN_USER_PASSWORD ADMIN_TENANT_NAME=$ADMIN_TENANT_NAME -CONFIG_NETWORK=$CONFIG_NETWORK DB_ROOT_PASSWORD=$MARIADB_ROOT_PASSWORD FLAT_INTERFACE=$NOVA_FLAT_INTERFACE GLANCE_API_SERVICE_HOST=$GLANCE_API_SERVICE_HOST @@ -133,7 +146,7 @@ KEYSTONE_DB_PASSWORD=$KEYSTONE_DB_PASSWORD KEYSTONE_PUBLIC_SERVICE_HOST=$KEYSTONE_PUBLIC_SERVICE_HOST MARIADB_SERVICE_HOST=$HOST_IP MARIADB_ROOT_PASSWORD=$MARIADB_ROOT_PASSWORD -NETWORK_MANAGER=nova +NETWORK_MANAGER=$NETWORK_MANAGER NOVA_API_SERVICE_HOST=$NOVA_API_SERVICE_HOST ENABLED_APIS=$ENABLED_APIS METADATA_HOST=$METADATA_HOST @@ -144,6 +157,14 @@ NOVA_EC2_API_SERVICE_HOST=$NOVA_EC2_SERVICE_HOST NOVA_EC2_SERVICE_HOST=$NOVA_EC2_SERVICE_HOST NOVA_KEYSTONE_PASSWORD=$NOVA_KEYSTONE_PASSWORD NOVA_KEYSTONE_USER=$NOVA_KEYSTONE_USER +NEUTRON_SHARED_SECRET:=$NEUTRON_SHARED_SECRET +NEUTRON_DB_NAME=$NEUTRON_DB_NAME +NEUTRON_DB_USER=$NEUTRON_DB_USER +NEUTRON_DB_PASSWORD=$NEUTRON_DB_PASSWORD +NEUTRON_KEYSTONE_USER=$NEUTRON_KEYSTONE_USER +NEUTRON_KEYSTONE_PASSWORD=$NEUTRON_KEYSTONE_PASSWORD +NEUTRON_SERVER_SERVICE_HOST=$NEUTRON_SERVER_SERVICE_HOST +NEUTRON_API_PASTE_CONFIG=$NEUTRON_API_PASTE_CONFIG HEAT_DB_NAME=$HEAT_DB_NAME HEAT_DB_PASSWORD=$HEAT_DB_PASSWORD HEAT_KEYSTONE_PASSWORD=$HEAT_KEYSTONE_PASSWORD