Update devstack plugin and examples

The devstack plugin should only use the openstackclient to
interact with OpenStack services via CLI.

This patch fixes both the devstack plugin and the examples.

Task: 5678
Task: 5680
Task: 5698
Story: 2001183

Change-Id: Id30ab0484edb350f0a424a0fc90c381357614b8e
This commit is contained in:
Nir Magnezi
2017-09-13 15:54:28 +03:00
parent bb9bb2d05b
commit 662485e2d2
6 changed files with 52 additions and 71 deletions

View File

@@ -16,9 +16,8 @@ git clone https://github.com/openstack-dev/devstack.git $HOME/devstack
cat <<EOF > $HOME/devstack/localrc cat <<EOF > $HOME/devstack/localrc
enable_plugin barbican https://review.openstack.org/openstack/barbican enable_plugin barbican https://review.openstack.org/openstack/barbican
enable_plugin neutron-lbaas https://review.openstack.org/openstack/neutron-lbaas
enable_plugin octavia https://review.openstack.org/openstack/octavia enable_plugin octavia https://review.openstack.org/openstack/octavia
LIBS_FROM_GIT+=python-neutronclient LIBS_FROM_GIT+=python-octaviaclient
KEYSTONE_TOKEN_FORMAT=UUID KEYSTONE_TOKEN_FORMAT=UUID
@@ -41,10 +40,6 @@ ENABLED_SERVICES+=,placement-api,placement-client
ENABLED_SERVICES+=,g-api,g-reg ENABLED_SERVICES+=,g-api,g-reg
# Neutron # Neutron
ENABLED_SERVICES+=,q-svc,q-agt,q-dhcp,q-l3,q-meta,neutron ENABLED_SERVICES+=,q-svc,q-agt,q-dhcp,q-l3,q-meta,neutron
# Enable LBaaS V2
ENABLED_SERVICES+=,q-lbaasv2
# Cinder (optional)
#ENABLED_SERVICES+=,cinder,c-api,c-vol,c-sch
# Tempest (optional) # Tempest (optional)
#ENABLED_SERVICES+=,tempest #ENABLED_SERVICES+=,tempest
# Octavia # Octavia

View File

@@ -61,7 +61,7 @@ function build_octavia_worker_image {
else else
export DIB_REPOREF_amphora_agent=$(git -c "$OCTAVIA_DIR" log -1 --pretty="format:%H") export DIB_REPOREF_amphora_agent=$(git -c "$OCTAVIA_DIR" log -1 --pretty="format:%H")
fi fi
TOKEN=$(openstack token issue | grep ' id ' | get_field 2) TOKEN=$(openstack token issue -f value -c id)
die_if_not_set $LINENO TOKEN "Keystone failed to get token." die_if_not_set $LINENO TOKEN "Keystone failed to get token."
octavia_dib_tracing_arg= octavia_dib_tracing_arg=
@@ -234,6 +234,7 @@ function octavia_configure {
iniset $OCTAVIA_CONF oslo_messaging rpc_thread_pool_size 2 iniset $OCTAVIA_CONF oslo_messaging rpc_thread_pool_size 2
iniset $OCTAVIA_CONF oslo_messaging topic octavia_prov iniset $OCTAVIA_CONF oslo_messaging topic octavia_prov
# TODO(nmagnezi): Remove this when neutron-lbaas gets deprecated
# Setting neutron request_poll_timeout # Setting neutron request_poll_timeout
iniset $NEUTRON_CONF octavia request_poll_timeout 3000 iniset $NEUTRON_CONF octavia request_poll_timeout 3000
if [[ "$WSGI_MODE" == "uwsgi" ]]; then if [[ "$WSGI_MODE" == "uwsgi" ]]; then
@@ -314,16 +315,13 @@ function octavia_configure {
function create_mgmt_network_interface { function create_mgmt_network_interface {
if [ $OCTAVIA_MGMT_PORT_IP != 'auto' ]; then if [ $OCTAVIA_MGMT_PORT_IP != 'auto' ]; then
SUBNET_ID=$(neutron subnet-show lb-mgmt-subnet | awk '/ id / {print $4}') SUBNET_ID=$(openstack subnet show lb-mgmt-subnet -f value -c id)
PORT_FIXED_IP="--fixed-ip subnet_id=$SUBNET_ID,ip_address=$OCTAVIA_MGMT_PORT_IP" PORT_FIXED_IP="--fixed-ip subnet=$SUBNET_ID,ip-address=$OCTAVIA_MGMT_PORT_IP"
fi fi
# TODO(johnsom) Change this to OSC when security group is working MGMT_PORT_ID=$(openstack port create --security-group lb-health-mgr-sec-grp --device-owner Octavia:health-mgr --host=$(hostname) -c id -f value --network lb-mgmt-net $PORT_FIXED_IP octavia-health-manager-$OCTAVIA_NODE-listen-port)
id_and_mac=$(neutron port-create --name octavia-health-manager-$OCTAVIA_NODE-listen-port --security-group lb-health-mgr-sec-grp --device-owner Octavia:health-mgr --binding:host_id=$(hostname) lb-mgmt-net $PORT_FIXED_IP | awk '/ id | mac_address / {print $4}') MGMT_PORT_MAC=$(openstack port show -c mac_address -f value $MGMT_PORT_ID)
id_and_mac=($id_and_mac)
MGMT_PORT_ID=${id_and_mac[0]}
MGMT_PORT_MAC=${id_and_mac[1]}
# TODO(johnsom) This gets the IPv4 address, should be updated for IPv6 # TODO(johnsom) This gets the IPv4 address, should be updated for IPv6
MGMT_PORT_IP=$(openstack port show -f value -c fixed_ips $MGMT_PORT_ID | awk '{FS=",| "; gsub(",",""); gsub("'\''",""); for(i = 1; i <= NF; ++i) {if ($i ~ /^ip_address/) {n=index($i, "="); if (substr($i, n+1) ~ "\\.") print substr($i, n+1)}}}') MGMT_PORT_IP=$(openstack port show -f value -c fixed_ips $MGMT_PORT_ID | awk '{FS=",| "; gsub(",",""); gsub("'\''",""); for(i = 1; i <= NF; ++i) {if ($i ~ /^ip_address/) {n=index($i, "="); if (substr($i, n+1) ~ "\\.") print substr($i, n+1)}}}')
if function_exists octavia_create_network_interface_device ; then if function_exists octavia_create_network_interface_device ; then
@@ -358,8 +356,8 @@ function create_mgmt_network_interface {
function build_mgmt_network { function build_mgmt_network {
# Create network and attach a subnet # Create network and attach a subnet
OCTAVIA_AMP_NETWORK_ID=$(openstack network create lb-mgmt-net | awk '/ id / {print $4}') OCTAVIA_AMP_NETWORK_ID=$(openstack network create lb-mgmt-net -f value -c id)
OCTAVIA_AMP_SUBNET_ID=$(openstack subnet create --subnet-range $OCTAVIA_MGMT_SUBNET --allocation-pool start=$OCTAVIA_MGMT_SUBNET_START,end=$OCTAVIA_MGMT_SUBNET_END --network lb-mgmt-net lb-mgmt-subnet | awk '/ id / {print $4}') OCTAVIA_AMP_SUBNET_ID=$(openstack subnet create --subnet-range $OCTAVIA_MGMT_SUBNET --allocation-pool start=$OCTAVIA_MGMT_SUBNET_START,end=$OCTAVIA_MGMT_SUBNET_END --network lb-mgmt-net lb-mgmt-subnet -f value -c id)
# Create security group and rules # Create security group and rules
openstack security group create lb-mgmt-sec-grp openstack security group create lb-mgmt-sec-grp
@@ -377,7 +375,7 @@ function build_mgmt_network {
} }
function configure_lb_mgmt_sec_grp { function configure_lb_mgmt_sec_grp {
OCTAVIA_MGMT_SEC_GRP_ID=$(openstack security group list | awk ' / lb-mgmt-sec-grp / {print $2}') OCTAVIA_MGMT_SEC_GRP_ID=$(openstack security group show lb-mgmt-sec-grp -f value -c id)
iniset ${OCTAVIA_CONF} controller_worker amp_secgroup_list ${OCTAVIA_MGMT_SEC_GRP_ID} iniset ${OCTAVIA_CONF} controller_worker amp_secgroup_list ${OCTAVIA_MGMT_SEC_GRP_ID}
} }
@@ -394,7 +392,7 @@ function configure_octavia_tempest {
function create_amphora_flavor { function create_amphora_flavor {
# Pass even if it exists to avoid race condition on multinode # Pass even if it exists to avoid race condition on multinode
openstack flavor create --id auto --ram 1024 --disk 2 --vcpus 1 --private m1.amphora -f value -c id || true openstack flavor create --id auto --ram 1024 --disk 2 --vcpus 1 --private m1.amphora -f value -c id || true
amp_flavor_id=$(openstack flavor list --all -c ID -c Name | awk ' / m1.amphora / {print $2}') amp_flavor_id=$(openstack flavor show m1.amphora -f value -c id)
iniset $OCTAVIA_CONF controller_worker amp_flavor_id $amp_flavor_id iniset $OCTAVIA_CONF controller_worker amp_flavor_id $amp_flavor_id
} }
@@ -477,7 +475,7 @@ function octavia_start {
iniset $OCTAVIA_CONF controller_worker amp_image_tag ${OCTAVIA_AMP_IMAGE_TAG} iniset $OCTAVIA_CONF controller_worker amp_image_tag ${OCTAVIA_AMP_IMAGE_TAG}
OCTAVIA_AMP_NETWORK_ID=$(openstack network list | awk '/ lb-mgmt-net / {print $2}') OCTAVIA_AMP_NETWORK_ID=$(openstack network show lb-mgmt-net -f value -c id)
iniset $OCTAVIA_CONF controller_worker amp_boot_network_list ${OCTAVIA_AMP_NETWORK_ID} iniset $OCTAVIA_CONF controller_worker amp_boot_network_list ${OCTAVIA_AMP_NETWORK_ID}

View File

@@ -9,7 +9,7 @@ RECLONE=True
enable_plugin octavia https://git.openstack.org/openstack/octavia enable_plugin octavia https://git.openstack.org/openstack/octavia
LIBS_FROM_GIT+=python-neutronclient LIBS_FROM_GIT+=python-octaviaclient
DATABASE_PASSWORD=password DATABASE_PASSWORD=password
ADMIN_PASSWORD=password ADMIN_PASSWORD=password
SERVICE_PASSWORD=password SERVICE_PASSWORD=password
@@ -20,8 +20,6 @@ LOGFILE=$DEST/logs/stack.sh.log
VERBOSE=True VERBOSE=True
LOG_COLOR=True LOG_COLOR=True
ENABLED_SERVICES=
# Nova # Nova
enable_service n-cpu enable_service n-cpu
@@ -53,8 +51,6 @@ DATABASE_TYPE=mysql
Q_PLUGIN=ml2 Q_PLUGIN=ml2
Q_ML2_TENANT_NETWORK_TYPE=vxlan Q_ML2_TENANT_NETWORK_TYPE=vxlan
IMAGE_URLS+=",http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img"
LOGFILE=$DEST/logs/stack.sh.log LOGFILE=$DEST/logs/stack.sh.log
# Old log files are automatically removed after 7 days to keep things neat. Change # Old log files are automatically removed after 7 days to keep things neat. Change

View File

@@ -5,14 +5,13 @@
RECLONE=True RECLONE=True
# Load the external LBaaS plugin. # Load the external Octavia plugin.
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas enable_plugin octavia-dashboard https://git.openstack.org/openstack/octavia-dashboard
enable_plugin neutron-lbaas-dashboard https://git.openstack.org/openstack/neutron-lbaas-dashboard
enable_plugin octavia https://git.openstack.org/openstack/octavia enable_plugin octavia https://git.openstack.org/openstack/octavia
enable_plugin barbican https://git.openstack.org/openstack/barbican enable_plugin barbican https://git.openstack.org/openstack/barbican
LIBS_FROM_GIT+=python-neutronclient LIBS_FROM_GIT+=python-octaviaclient
DATABASE_PASSWORD=password DATABASE_PASSWORD=password
ADMIN_PASSWORD=password ADMIN_PASSWORD=password
SERVICE_PASSWORD=password SERVICE_PASSWORD=password
@@ -46,20 +45,14 @@ enable_service g-api
enable_service g-reg enable_service g-reg
# Neutron # Neutron
enable_service neutron
enable_service q-svc enable_service q-svc
enable_service q-agt enable_service q-agt
enable_service q-dhcp enable_service q-dhcp
enable_service q-l3 enable_service q-l3
enable_service q-meta enable_service q-meta
# Cinder # Octavia
enable_service c-api
enable_service c-vol
enable_service c-sch
# LBaaS V2 and Octavia
enable_service q-lbaasv2
enable_service octavia enable_service octavia
enable_service o-cw enable_service o-cw
enable_service o-hm enable_service o-hm
@@ -76,8 +69,6 @@ OCTAVIA_NODES=main:192.168.42.10,second:192.168.42.11
Q_PLUGIN=ml2 Q_PLUGIN=ml2
Q_ML2_TENANT_NETWORK_TYPE=vxlan Q_ML2_TENANT_NETWORK_TYPE=vxlan
IMAGE_URLS+=",http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img"
LOGFILE=$DEST/logs/stack.sh.log LOGFILE=$DEST/logs/stack.sh.log
# Old log files are automatically removed after 7 days to keep things neat. Change # Old log files are automatically removed after 7 days to keep things neat. Change

View File

@@ -18,14 +18,13 @@
RECLONE=True RECLONE=True
# Load the external LBaaS plugin. # Load the external Octavia plugin.
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas enable_plugin octavia-dashboard https://git.openstack.org/openstack/octavia-dashboard
enable_plugin neutron-lbaas-dashboard https://git.openstack.org/openstack/neutron-lbaas-dashboard
enable_plugin octavia https://git.openstack.org/openstack/octavia enable_plugin octavia https://git.openstack.org/openstack/octavia
enable_plugin barbican https://git.openstack.org/openstack/barbican enable_plugin barbican https://git.openstack.org/openstack/barbican
LIBS_FROM_GIT+=python-neutronclient LIBS_FROM_GIT+=python-octaviaclient
DATABASE_PASSWORD=password DATABASE_PASSWORD=password
ADMIN_PASSWORD=password ADMIN_PASSWORD=password
SERVICE_PASSWORD=password SERVICE_PASSWORD=password
@@ -59,20 +58,14 @@ enable_service g-api
enable_service g-reg enable_service g-reg
# Neutron # Neutron
enable_service neutron
enable_service q-svc enable_service q-svc
enable_service q-agt enable_service q-agt
enable_service q-dhcp enable_service q-dhcp
enable_service q-l3 enable_service q-l3
enable_service q-meta enable_service q-meta
# Cinder # Octavia
enable_service c-api
enable_service c-vol
enable_service c-sch
# LBaaS V2 and Octavia
enable_service q-lbaasv2
enable_service octavia enable_service octavia
enable_service o-cw enable_service o-cw
enable_service o-hm enable_service o-hm
@@ -86,8 +79,6 @@ Q_PLUGIN=ml2
Q_ML2_TENANT_NETWORK_TYPE=vxlan Q_ML2_TENANT_NETWORK_TYPE=vxlan
Q_DVR_MODE=dvr_snat Q_DVR_MODE=dvr_snat
IMAGE_URLS+=",http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img"
LOGFILE=$DEST/logs/stack.sh.log LOGFILE=$DEST/logs/stack.sh.log
# Old log files are automatically removed after 7 days to keep things neat. Change # Old log files are automatically removed after 7 days to keep things neat. Change

View File

@@ -20,7 +20,7 @@ DEST=${DEST:-/opt/stack}
# Polling functions # Polling functions
function wait_for_loadbalancer_active() { function wait_for_loadbalancer_active() {
lb_name=$1 lb_name=$1
while [ $(neutron lbaas-loadbalancer-list | grep $lb_name | grep ACTIVE | wc --lines) == 0 ]; do while [ $(openstack loadbalancer show $lb_name -f value -c provisioning_status) != "ACTIVE" ]; do
sleep 2 sleep 2
done done
} }
@@ -33,12 +33,12 @@ if is_service_enabled nova; then
source ${TOP_DIR}/openrc demo demo source ${TOP_DIR}/openrc demo demo
# Create an SSH key to use for the instances # Create an SSH key to use for the instances
DEVSTACK_LBAAS_SSH_KEY_NAME=$(hostname)_DEVSTACK_LBAAS_SSH_KEY_RSA DEVSTACK_LBAAS_SSH_KEY_NAME=DEVSTACK_LBAAS_SSH_KEY_RSA
DEVSTACK_LBAAS_SSH_KEY_DIR=${TOP_DIR} DEVSTACK_LBAAS_SSH_KEY_DIR=${TOP_DIR}
DEVSTACK_LBAAS_SSH_KEY=${DEVSTACK_LBAAS_SSH_KEY_DIR}/${DEVSTACK_LBAAS_SSH_KEY_NAME} DEVSTACK_LBAAS_SSH_KEY=${DEVSTACK_LBAAS_SSH_KEY_DIR}/${DEVSTACK_LBAAS_SSH_KEY_NAME}
rm -f ${DEVSTACK_LBAAS_SSH_KEY}.pub ${DEVSTACK_LBAAS_SSH_KEY} rm -f ${DEVSTACK_LBAAS_SSH_KEY}.pub ${DEVSTACK_LBAAS_SSH_KEY}
ssh-keygen -b 2048 -t rsa -f ${DEVSTACK_LBAAS_SSH_KEY} -N "" ssh-keygen -b 2048 -t rsa -f ${DEVSTACK_LBAAS_SSH_KEY} -N ""
nova keypair-add --pub-key=${DEVSTACK_LBAAS_SSH_KEY}.pub ${DEVSTACK_LBAAS_SSH_KEY_NAME} openstack keypair create --public-key=${DEVSTACK_LBAAS_SSH_KEY}.pub ${DEVSTACK_LBAAS_SSH_KEY_NAME}
# Add tcp/22,80 and icmp to default security group # Add tcp/22,80 and icmp to default security group
openstack security group rule create --protocol tcp --dst-port 22:22 default openstack security group rule create --protocol tcp --dst-port 22:22 default
@@ -46,46 +46,56 @@ if is_service_enabled nova; then
openstack security group rule create --protocol icmp default openstack security group rule create --protocol icmp default
# Boot some instances # Boot some instances
NOVA_BOOT_ARGS="--key-name ${DEVSTACK_LBAAS_SSH_KEY_NAME} --image $(openstack image list | awk '/ cirros-0.3.4-x86_64-disk / {print $2}') --flavor 1 --nic net-id=$(neutron net-list | awk '/ private / {print $2}')" NOVA_BOOT_ARGS="--key-name ${DEVSTACK_LBAAS_SSH_KEY_NAME} --image $(openstack image show cirros-0.3.5-x86_64-disk -f value -c id) --flavor 1 --nic net-id=$(openstack network show private -f value -c id)"
nova boot ${NOVA_BOOT_ARGS} node1 openstack server create ${NOVA_BOOT_ARGS} node1
nova boot ${NOVA_BOOT_ARGS} node2 openstack server create ${NOVA_BOOT_ARGS} node2
echo "Waiting ${BOOT_DELAY} seconds for instances to boot" echo "Waiting ${BOOT_DELAY} seconds for instances to boot"
sleep ${BOOT_DELAY} sleep ${BOOT_DELAY}
IP1=$(nova show node1 | grep "private network" | awk '/private network/ {ip = substr($5, 0, length($5)-1); if (ip ~ "\\.") print ip; else print $6}') IP1=$(openstack server show node1 | awk '/private/ {ip = substr($4, 9, length($4)-9) ; if (ip ~ "\\.") print ip ; else print $5}')
IP2=$(nova show node2 | grep "private network" | awk '/private network/ {ip = substr($5, 0, length($5)-1); if (ip ~ "\\.") print ip; else print $6}') IP2=$(openstack server show node2 | awk '/private/ {ip = substr($4, 9, length($4)-9) ; if (ip ~ "\\.") print ip ; else print $5}')
touch ~/.ssh/known_hosts touch ~/.ssh/known_hosts
ssh-keygen -R ${IP1} ssh-keygen -R ${IP1}
ssh-keygen -R ${IP2} ssh-keygen -R ${IP2}
# Get Neutron router namespace details
NAMESPACE_NAME='qrouter-'$(openstack router show router1 -f value -c id)
NAMESPACE_CMD_PREFIX='sudo ip netns exec'
# Run a simple web server on the instances # Run a simple web server on the instances
chmod 0755 ${TOP_DIR}/webserver.sh chmod 0755 ${TOP_DIR}/webserver.sh
scp -i ${DEVSTACK_LBAAS_SSH_KEY} -o StrictHostKeyChecking=no ${TOP_DIR}/webserver.sh cirros@${IP1}:webserver.sh $NAMESPACE_CMD_PREFIX $NAMESPACE_NAME scp -i ${DEVSTACK_LBAAS_SSH_KEY} -o StrictHostKeyChecking=no ${TOP_DIR}/webserver.sh cirros@${IP1}:webserver.sh
scp -i ${DEVSTACK_LBAAS_SSH_KEY} -o StrictHostKeyChecking=no ${TOP_DIR}/webserver.sh cirros@${IP2}:webserver.sh $NAMESPACE_CMD_PREFIX $NAMESPACE_NAME scp -i ${DEVSTACK_LBAAS_SSH_KEY} -o StrictHostKeyChecking=no ${TOP_DIR}/webserver.sh cirros@${IP2}:webserver.sh
$NAMESPACE_CMD_PREFIX $NAMESPACE_NAME ssh -o UserKnownHostsFile=/dev/null -i ${DEVSTACK_LBAAS_SSH_KEY} -o StrictHostKeyChecking=no -q cirros@${IP1} "screen -d -m sh webserver.sh"
screen_process node1 "ssh -i ${DEVSTACK_LBAAS_SSH_KEY} -o StrictHostKeyChecking=no cirros@${IP1} ./webserver.sh" $NAMESPACE_CMD_PREFIX $NAMESPACE_NAME ssh -o UserKnownHostsFile=/dev/null -i ${DEVSTACK_LBAAS_SSH_KEY} -o StrictHostKeyChecking=no -q cirros@${IP2} "screen -d -m sh webserver.sh"
screen_process node2 "ssh -i ${DEVSTACK_LBAAS_SSH_KEY} -o StrictHostKeyChecking=no cirros@${IP2} ./webserver.sh"
fi fi
if is_service_enabled q-lbaasv2; then if is_service_enabled octavia; then
neutron lbaas-loadbalancer-create --name lb1 private-subnet SUBNET_ID=$(openstack subnet show private-subnet -f value -c id)
openstack loadbalancer create --name lb1 --vip-subnet-id $SUBNET_ID
wait_for_loadbalancer_active lb1 wait_for_loadbalancer_active lb1
neutron lbaas-listener-create --loadbalancer lb1 --protocol HTTP --protocol-port 80 --name listener1 openstack loadbalancer listener create lb1 --protocol HTTP --protocol-port 80 --name listener1
wait_for_loadbalancer_active lb1 wait_for_loadbalancer_active lb1
neutron lbaas-pool-create --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP --name pool1 openstack loadbalancer pool create --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP --name pool1
wait_for_loadbalancer_active lb1 wait_for_loadbalancer_active lb1
neutron lbaas-member-create --subnet private-subnet --address ${IP1} --protocol-port 80 pool1 openstack loadbalancer member create --subnet-id $SUBNET_ID --address ${IP1} --protocol-port 80 pool1
wait_for_loadbalancer_active lb1 wait_for_loadbalancer_active lb1
neutron lbaas-member-create --subnet private-subnet --address ${IP2} --protocol-port 80 pool1 openstack loadbalancer member create --subnet-id $SUBNET_ID --address ${IP2} --protocol-port 80 pool1
fi fi
echo "How to test load balancing:"
echo ""
echo "${NAMESPACE_CMD_PREFIX} ${NAMESPACE_NAME} curl $(openstack loadbalancer show lb1 -f value -c vip_address)"
echo ""