blob: f7fe90a0bc240e7a67c5469a8047768ba1e539a3 [file] [log] [blame]
Salvatore Orlandod6767d02012-08-31 04:55:20 -07001# lib/quantum
2# functions - funstions specific to quantum
3
4# Save trace setting
5XTRACE=$(set +o | grep xtrace)
6set +o xtrace
7
Nachi Ueno8bc21f62012-11-19 22:04:28 -08008QUANTUM_DIR=$DEST/quantum
Nachi Ueno5db5bfa2012-10-29 11:25:29 -07009export QUANTUM_TEST_CONFIG_FILE=${QUANTUM_TEST_CONFIG_FILE:-"/etc/quantum/debug.ini"}
Gary Kotton9343df12012-11-28 10:05:53 +000010QUANTUM_AUTH_CACHE_DIR=${QUANTUM_AUTH_CACHE_DIR:-/var/cache/quantum}
Nachi Ueno5db5bfa2012-10-29 11:25:29 -070011
Nachi Ueno8bc21f62012-11-19 22:04:28 -080012if is_service_enabled quantum; then
13 Q_CONF_FILE=/etc/quantum/quantum.conf
14 Q_RR_CONF_FILE=/etc/quantum/rootwrap.conf
15 if [[ "$Q_USE_ROOTWRAP" == "False" ]]; then
16 Q_RR_COMMAND="sudo"
17 else
Nachi Uenoeb1aa3d2012-12-06 11:55:29 -080018 QUANTUM_ROOTWRAP=$(get_rootwrap_location quantum)
19 Q_RR_COMMAND="sudo $QUANTUM_ROOTWRAP $Q_RR_CONF_FILE"
Nachi Ueno8bc21f62012-11-19 22:04:28 -080020 fi
21fi
22
Nachi Uenoeb1aa3d2012-12-06 11:55:29 -080023# configure_quantum_rootwrap() - configure Quantum's rootwrap
24function configure_quantum_rootwrap() {
25 if [[ "$Q_USE_ROOTWRAP" == "False" ]]; then
26 return
27 fi
28 # Deploy new rootwrap filters files (owned by root).
29 # Wipe any existing rootwrap.d files first
30 Q_CONF_ROOTWRAP_D=/etc/quantum/rootwrap.d
31 if [[ -d $Q_CONF_ROOTWRAP_D ]]; then
32 sudo rm -rf $Q_CONF_ROOTWRAP_D
33 fi
34 # Deploy filters to /etc/quantum/rootwrap.d
35 mkdir -p -m 755 $Q_CONF_ROOTWRAP_D
36 cp -pr $QUANTUM_DIR/etc/quantum/rootwrap.d/* $Q_CONF_ROOTWRAP_D/
37 sudo chown -R root:root $Q_CONF_ROOTWRAP_D
38 sudo chmod 644 $Q_CONF_ROOTWRAP_D/*
39 # Set up rootwrap.conf, pointing to /etc/quantum/rootwrap.d
40 sudo cp -p $QUANTUM_DIR/etc/rootwrap.conf $Q_RR_CONF_FILE
41 sudo sed -e "s:^filters_path=.*$:filters_path=$Q_CONF_ROOTWRAP_D:" -i $Q_RR_CONF_FILE
42 sudo chown root:root $Q_RR_CONF_FILE
43 sudo chmod 0644 $Q_RR_CONF_FILE
44 # Specify rootwrap.conf as first parameter to quantum-rootwrap
45 ROOTWRAP_SUDOER_CMD="$QUANTUM_ROOTWRAP $Q_RR_CONF_FILE *"
46
47 # Set up the rootwrap sudoers for quantum
48 TEMPFILE=`mktemp`
49 echo "$USER ALL=(root) NOPASSWD: $ROOTWRAP_SUDOER_CMD" >$TEMPFILE
50 chmod 0440 $TEMPFILE
51 sudo chown root:root $TEMPFILE
52 sudo mv $TEMPFILE /etc/sudoers.d/quantum-rootwrap
53}
54
55
Salvatore Orlandod6767d02012-08-31 04:55:20 -070056# Configures keystone integration for quantum service and agents
57function quantum_setup_keystone() {
58 local conf_file=$1
59 local section=$2
60 local use_auth_url=$3
61 if [[ -n $use_auth_url ]]; then
62 iniset $conf_file $section auth_url "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT/v2.0"
63 else
64 iniset $conf_file $section auth_host $KEYSTONE_SERVICE_HOST
65 iniset $conf_file $section auth_port $KEYSTONE_AUTH_PORT
66 iniset $conf_file $section auth_protocol $KEYSTONE_SERVICE_PROTOCOL
67 fi
68 iniset $conf_file $section admin_tenant_name $SERVICE_TENANT_NAME
69 iniset $conf_file $section admin_user $Q_ADMIN_USERNAME
70 iniset $conf_file $section admin_password $SERVICE_PASSWORD
Akihiro MOTOKI5e3deb62012-12-11 17:09:02 +090071 iniset $conf_file $section signing_dir $QUANTUM_AUTH_CACHE_DIR
72 # Create cache dir
73 sudo mkdir -p $QUANTUM_AUTH_CACHE_DIR
74 sudo chown `whoami` $QUANTUM_AUTH_CACHE_DIR
Salvatore Orlandod6767d02012-08-31 04:55:20 -070075}
76
77function quantum_setup_ovs_bridge() {
78 local bridge=$1
79 for PORT in `sudo ovs-vsctl --no-wait list-ports $bridge`; do
80 if [[ "$PORT" =~ tap* ]]; then echo `sudo ip link delete $PORT` > /dev/null; fi
81 sudo ovs-vsctl --no-wait del-port $bridge $PORT
82 done
83 sudo ovs-vsctl --no-wait -- --if-exists del-br $bridge
84 sudo ovs-vsctl --no-wait add-br $bridge
85 sudo ovs-vsctl --no-wait br-set-external-id $bridge bridge-id $bridge
86}
87
Yoshihiro Kaneko602cf9b2012-07-23 06:27:36 +000088function quantum_setup_external_bridge() {
89 local bridge=$1
90 # Create it if it does not exist
91 sudo ovs-vsctl --no-wait -- --may-exist add-br $bridge
92 # remove internal ports
93 for PORT in `sudo ovs-vsctl --no-wait list-ports $bridge`; do
94 TYPE=$(sudo ovs-vsctl get interface $PORT type)
95 if [[ "$TYPE" == "internal" ]]; then
96 echo `sudo ip link delete $PORT` > /dev/null
97 sudo ovs-vsctl --no-wait del-port $bridge $PORT
98 fi
99 done
100 # ensure no IP is configured on the public bridge
101 sudo ip addr flush dev $bridge
102}
103
104function is_quantum_ovs_base_plugin() {
Dean Troyer5a4148d2012-10-23 15:47:01 -0500105 local plugin=$1
Yoshihiro Kaneko602cf9b2012-07-23 06:27:36 +0000106 if [[ ",openvswitch,ryu," =~ ,${plugin}, ]]; then
107 return 0
108 fi
109 return 1
110}
111
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700112function _get_net_id() {
113 quantum --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD net-list | grep $1 | awk '{print $2}'
114}
115
116function _get_probe_cmd_prefix() {
117 local from_net="$1"
118 net_id=`_get_net_id $from_net`
119 probe_id=`quantum-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-list -c id -c network_id | grep $net_id | awk '{print $2}' | head -n 1`
Nachi Ueno8bc21f62012-11-19 22:04:28 -0800120 echo "$Q_RR_COMMAND ip netns exec qprobe-$probe_id"
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700121}
122
123function delete_probe() {
124 local from_net="$1"
125 net_id=`_get_net_id $from_net`
126 probe_id=`quantum-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-list -c id -c network_id | grep $net_id | awk '{print $2}'`
127 quantum-debug --os-tenant-name admin --os-username admin probe-delete $probe_id
128}
129
130function _ping_check_quantum() {
131 local from_net=$1
132 local ip=$2
133 local timeout_sec=$3
134 local expected=${4:-"True"}
135 local check_command=""
136 probe_cmd=`_get_probe_cmd_prefix $from_net`
137 if [[ "$expected" = "True" ]]; then
Nachi Ueno8bc21f62012-11-19 22:04:28 -0800138 check_command="while ! $probe_cmd ping -w 1 -c 1 $ip; do sleep 1; done"
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700139 else
Nachi Ueno8bc21f62012-11-19 22:04:28 -0800140 check_command="while $probe_cmd ping -w 1 -c 1 $ip; do sleep 1; done"
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700141 fi
142 if ! timeout $timeout_sec sh -c "$check_command"; then
143 if [[ "$expected" = "True" ]]; then
144 echo "[Fail] Couldn't ping server"
145 else
146 echo "[Fail] Could ping server"
147 fi
148 exit 1
149 fi
150}
151
152# ssh check
153function _ssh_check_quantum() {
154 local from_net=$1
155 local key_file=$2
156 local ip=$3
157 local user=$4
158 local timeout_sec=$5
159 local probe_cmd = ""
160 probe_cmd=`_get_probe_cmd_prefix $from_net`
161 if ! timeout $timeout_sec sh -c "while ! $probe_cmd ssh -o StrictHostKeyChecking=no -i $key_file ${user}@$ip echo success ; do sleep 1; done"; then
162 echo "server didn't become ssh-able!"
163 exit 1
164 fi
165}
166
167function setup_quantum() {
168 public_net_id=`_get_net_id $PUBLIC_NETWORK_NAME`
169 quantum-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create $public_net_id
170 private_net_id=`_get_net_id $PRIVATE_NETWORK_NAME`
171 quantum-debug --os-tenant-name admin --os-username admin --os-password $ADMIN_PASSWORD probe-create $private_net_id
172}
173
174function teardown_quantum() {
175 delete_probe $PUBLIC_NETWORK_NAME
176 delete_probe $PRIVATE_NETWORK_NAME
177}
178
Salvatore Orlandod6767d02012-08-31 04:55:20 -0700179# Restore xtrace
180$XTRACE