/
compute-server-setup.sh
executable file
·372 lines (342 loc) · 19.8 KB
/
compute-server-setup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
#!/usr/bin/env bash
if [ -f /etc/redhat-release ]; then
is_redhat=1
is_ubuntu=0
nova_compute_ver=`rpm -q --qf "%{VERSION}\n" openstack-nova-compute`
if [ "$nova_compute_ver" == "2013.1" ]; then
OS_NET=quantum
TENANT_NAME=quantum_admin_tenant_name
ADMIN_USER=quantum_admin_username
ADMIN_PASSWD=quantum_admin_password
ADMIN_AUTH_URL=quantum_admin_auth_url
OS_URL=quantum_url
OS_URL_TIMEOUT=quantum_url_timeout
else
OS_NET=neutron
TENANT_NAME=neutron_admin_tenant_name
ADMIN_USER=neutron_admin_username
ADMIN_PASSWD=neutron_admin_password
ADMIN_AUTH_URL=neutron_admin_auth_url
OS_URL=neutron_url
OS_URL_TIMEOUT=neutron_url_timeout
fi
fi
if [ -f /etc/lsb-release ] && egrep -q 'DISTRIB_ID.*Ubuntu' /etc/lsb-release; then
is_ubuntu=1
is_redhat=0
nova_compute_version=`dpkg -l | grep 'ii' | grep nova-compute | grep -v vif | grep -v nova-compute-kvm | grep -v nova-compute-libvirt | awk '{print $3}'`
echo $nova_compute_version
if [ "$nova_compute_version" == "2:2013.1.3-0ubuntu1" ]; then
OS_NET=quantum
TENANT_NAME=quantum_admin_tenant_name
ADMIN_USER=quantum_admin_username
ADMIN_PASSWD=quantum_admin_password
ADMIN_AUTH_URL=quantum_admin_auth_url
OS_URL=quantum_url
OS_URL_TIMEOUT=quantum_url_timeout
else
OS_NET=neutron
TENANT_NAME=neutron_admin_tenant_name
ADMIN_USER=neutron_admin_username
ADMIN_PASSWD=neutron_admin_password
ADMIN_AUTH_URL=neutron_admin_auth_url
OS_URL=neutron_url
OS_URL_TIMEOUT=neutron_url_timeout
fi
fi
#CONTROLLER=10.1.5.12
#SERVICE_TOKEN=ded4dd496c91df8eb61b
if [ $is_ubuntu -eq 1 ] ; then
lsmod | grep kvm
if [ $? -ne 0 ]; then
modprobe -a kvm
echo "kvm" >> /etc/modules
VENDOR=`cat /proc/cpuinfo | grep 'vendor_id' | cut -d: -f2 | awk 'NR==1'`
if [[ "${VENDOR}" == *Intel* ]]; then
modprobe -a kvm-intel
echo "kvm-intel" >> /etc/modules
else
modprobe -a kvm-amd
echo "kvm-amd" >> /etc/modules
fi
fi
fi
source /etc/contrail/ctrl-details
HYPERVISOR=${HYPERVISOR:-"libvirt"}
if [ $CONTROLLER != $COMPUTE ] ; then
openstack-config --del /etc/nova/nova.conf DEFAULT sql_connection
openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
openstack-config --set /etc/nova/nova.conf DEFAULT libvirt_nonblocking True
openstack-config --set /etc/nova/nova.conf DEFAULT libvirt_inject_partition -1
openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_host $AMQP_SERVER
openstack-config --set /etc/nova/nova.conf DEFAULT glance_host $CONTROLLER
openstack-config --set /etc/nova/nova.conf DEFAULT $TENANT_NAME $SERVICE_TENANT_NAME
openstack-config --set /etc/nova/nova.conf DEFAULT $ADMIN_USER $OS_NET
openstack-config --set /etc/nova/nova.conf DEFAULT $ADMIN_PASSWD $NEUTRON_PASSWORD
openstack-config --set /etc/nova/nova.conf DEFAULT $ADMIN_AUTH_URL $AUTH_PROTOCOL://$CONTROLLER:35357/v2.0/
openstack-config --set /etc/nova/nova.conf DEFAULT $OS_URL ${QUANTUM_PROTOCOL}://$QUANTUM:9696/
openstack-config --set /etc/nova/nova.conf DEFAULT $OS_URL_TIMEOUT 300
if [ $is_ubuntu -eq 1 ] ; then
openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova.network.${OS_NET}v2.api.API
openstack-config --set /etc/nova/nova.conf DEFAULT compute_driver libvirt.LibvirtDriver
if [[ $nova_compute_version == *":"* ]]; then
nova_compute_version_without_epoch=`echo $nova_compute_version | cut -d':' -f2`
else
nova_compute_version_without_epoch=`echo $nova_compute_version`
fi
kilo_or_above=0
dpkg --compare-versions $nova_compute_version_without_epoch ge 2015
if [ $? -eq 0 ]; then
kilo_or_above=1
else
if [[ $nova_compute_version == *"12.0."* ]]; then
kilo_or_above=1
fi
fi
if [ $kilo_or_above -eq 1 ] ; then
openstack-config --set /etc/nova/nova.conf neutron admin_auth_url ${AUTH_PROTOCOL}://$CONTROLLER:35357/v2.0/
openstack-config --set /etc/nova/nova.conf neutron admin_username $OS_NET
openstack-config --set /etc/nova/nova.conf neutron admin_password $ADMIN_TOKEN
openstack-config --set /etc/nova/nova.conf neutron admin_tenant_name service
openstack-config --set /etc/nova/nova.conf neutron url ${QUANTUM_PROTOCOL}://$QUANTUM:9696/
openstack-config --set /etc/nova/nova.conf neutron url_timeout 300
openstack-config --set /etc/nova/nova.conf neutron service_metadata_proxy True
openstack-config --set /etc/nova/nova.conf compute compute_driver libvirt.LibvirtDriver
openstack-config --set /etc/nova/nova.conf glance host $CONTROLLER
fi
else
if [ ${nova_compute_ver%%.*} -ge 2014 ]; then
openstack-config --set /etc/nova/nova.conf DEFAULT compute_driver libvirt.LibvirtDriver
openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova.network.${OS_NET}v2.api.API
openstack-config --set /etc/nova/nova.conf DEFAULT state_path /var/lib/nova
openstack-config --set /etc/nova/nova.conf DEFAULT lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf DEFAULT instaces_path /var/lib/nova/instances
fi
if [ $is_redhat -eq 1 ]; then
# For Kilo openstack release, set network_api_class as nova.network.neutronv2.api.API
is_kilo_or_above=$(python -c "from distutils.version import LooseVersion; \
print LooseVersion('$nova_compute_ver') >= LooseVersion('2015.1.1')")
# For Juno, set network_api_class as nova_contrail_vif.contrailvif.ContrailNetworkAPI even
# if controller node is compute node so the VIF_TYPE=vrouter is available
is_juno_or_above=$(python -c "from distutils.version import LooseVersion; \
print LooseVersion('$nova_compute_ver') >= LooseVersion('2014.2.2')")
if [ "$is_kilo_or_above" == "True" ]; then
# Neutron section in nova.conf
openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova.network.neutronv2.api.API
openstack-config --set /etc/nova/nova.conf neutron url ${QUANTUM_PROTOCOL}://$QUANTUM:9696/
openstack-config --set /etc/nova/nova.conf neutron admin_tenant_name $SERVICE_TENANT_NAME
openstack-config --set /etc/nova/nova.conf neutron auth_strategy keystone
openstack-config --set /etc/nova/nova.conf neutron admin_auth_url ${AUTH_PROTOCOL}://$CONTROLLER:35357/v2.0/
openstack-config --set /etc/nova/nova.conf neutron admin_username neutron
openstack-config --set /etc/nova/nova.conf neutron admin_password $NEUTRON_PASSWORD
openstack-config --set /etc/nova/nova.conf neutron service_metadata_proxy True
openstack-config --set /etc/nova/nova.conf compute compute_driver libvirt.LibvirtDriver
openstack-config --set /etc/nova/nova.conf glance host $CONTROLLER
# New configs in keystone section
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASSWORD
elif [ "$is_juno_or_above" == "True" ]; then
openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova_contrail_vif.contrailvif.ContrailNetworkAPI
fi
fi
fi
openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password $NOVA_PASSWORD
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host $CONTROLLER
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_protocol http
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 35357
openstack-config --set /etc/nova/nova.conf keystone_authtoken signing_dir /tmp/keystone-signing-nova
else
if [ $is_redhat -eq 1 ]; then
# For Kilo openstack release, set network_api_class as nova.network.neutronv2.api.API
is_kilo_or_above=$(python -c "from distutils.version import LooseVersion; \
print LooseVersion('$nova_compute_ver') >= LooseVersion('2015.1.1')")
# For Juno, set network_api_class as nova_contrail_vif.contrailvif.ContrailNetworkAPI even
# if controller node is compute node so the VIF_TYPE=vrouter is available
is_juno_or_above=$(python -c "from distutils.version import LooseVersion; \
print LooseVersion('$nova_compute_ver') >= LooseVersion('2014.2.2')")
if [ "$is_kilo_or_above" == "True" ]; then
# Neutron section in nova.conf
openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova.network.neutronv2.api.API
openstack-config --set /etc/nova/nova.conf neutron url ${QUANTUM_PROTOCOL}://$QUANTUM:9696/
openstack-config --set /etc/nova/nova.conf neutron admin_tenant_name $SERVICE_TENANT_NAME
openstack-config --set /etc/nova/nova.conf neutron auth_strategy keystone
openstack-config --set /etc/nova/nova.conf neutron admin_auth_url ${AUTH_PROTOCOL}://$CONTROLLER:35357/v2.0/
openstack-config --set /etc/nova/nova.conf neutron admin_username neutron
openstack-config --set /etc/nova/nova.conf neutron admin_password $NEUTRON_PASSWORD
openstack-config --set /etc/nova/nova.conf neutron service_metadata_proxy True
openstack-config --set /etc/nova/nova.conf compute compute_driver libvirt.LibvirtDriver
openstack-config --set /etc/nova/nova.conf glance host $CONTROLLER
# New configs in keystone section
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password $NOVA_PASSWORD
elif [ "$is_juno_or_above" == "True" ]; then
openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova_contrail_vif.contrailvif.ContrailNetworkAPI
fi
fi
fi
if [ $VMWARE_IP ]; then
openstack-config --del /etc/nova/nova.conf DEFAULT compute_driver
openstack-config --set /etc/nova/nova.conf DEFAULT compute_driver vmwareapi.ContrailESXDriver
if [ -f /etc/nova/nova-compute.conf ]; then
openstack-config --del /etc/nova/nova-compute.conf DEFAULT compute_driver
openstack-config --set /etc/nova/nova-compute.conf DEFAULT compute_driver vmwareapi.ContrailESXDriver
fi
fi
openstack-config --del /etc/nova/nova.conf DEFAULT pci_passthrough_whitelist
if [ ! -z $SRIOV_INTERFACES ] ; then
OLD_IFS=$IFS
IFS=','
intf_list=($SRIOV_INTERFACES)
physnet_list=($SRIOV_PHYSNETS)
search_pattern=""
i=0
IFS='%'
for intf in ${intf_list[@]}; do
physnets=${physnet_list[$i]}
i=$((i+1))
phys=($physnets)
for physnet_name in ${phys[@]}; do
wl="{ \"devname\": \"$intf\", \"physical_network\": \"$physnet_name\"}"
if [ $search_pattern ]; then
pci_wl="pci_passthrough_whitelist = $wl"
sed -i "/$search_pattern/a \
$pci_wl" /etc/nova/nova.conf
else
openstack-config --set /etc/nova/nova.conf DEFAULT pci_passthrough_whitelist $wl
fi
search_pattern=$wl
done
done
IFS=$OLD_IFS
fi
if [ $VCENTER_IP ]; then
openstack-config --set /etc/nova/nova.conf vmware host_ip $VCENTER_IP
openstack-config --set /etc/nova/nova.conf vmware host_username $VCENTER_USERNAME
openstack-config --set /etc/nova/nova.conf vmware host_password $VCENTER_PASSWORD
openstack-config --del /etc/nova/nova.conf vmware cluster_name
cluster_list=$(echo $VCENTER_CLUSTER | tr "," "\n")
for cluster in $cluster_list
do
echo "cluster_name = " $cluster >> /etc/nova/nova.conf
done
openstack-config --set /etc/nova/nova.conf vmware vcenter_dvswitch $VCENTER_DVSWITCH
openstack-config --del /etc/nova/nova.conf DEFAULT compute_driver
openstack-config --set /etc/nova/nova.conf DEFAULT compute_driver nova.virt.vmwareapi.contrailVCDriver
if [ -f /etc/nova/nova-compute.conf ]; then
openstack-config --set /etc/nova/nova-compute.conf DEFAULT compute_driver nova.virt.vmwareapi.contrailVCDriver
openstack-config --set /etc/nova/nova-compute.conf libvirt virt_type vmwareapi
fi
fi
openstack-config --set /etc/nova/nova.conf DEFAULT ec2_private_dns_show_ip False
openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_base_url http://$CONTROLLER_MGMT:5999/vnc_auto.html
openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_enabled true
openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen $COMPUTE
openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address $COMPUTE
openstack-config --set /etc/nova/nova.conf DEFAULT security_group_api $OS_NET
openstack-config --set /etc/nova/nova.conf DEFAULT heal_instance_info_cache_interval 0
openstack-config --set /etc/nova/nova.conf DEFAULT image_cache_manager_interval 0
if [ "$HYPERVISOR" == "libvirt" ]; then
# Running DPDK apps inside VMs require more modern cpu model
if [ "$DPDK_MODE" == "True" ]; then
openstack-config --set /etc/nova/nova.conf DEFAULT libvirt_cpu_mode host-model
else
openstack-config --set /etc/nova/nova.conf DEFAULT libvirt_cpu_mode none
fi
#use contrail specific vif driver
openstack-config --set /etc/nova/nova.conf DEFAULT libvirt_vif_driver nova_contrail_vif.contrailvif.VRouterVIFDriver
elif [ "$HYPERVISOR" == "docker" ]; then
openstack-config --del /etc/nova/nova.conf DEFAULT libvirt_nonblocking
openstack-config --del /etc/nova/nova.conf DEFAULT libvirt_inject_partition
openstack-config --set /etc/nova/nova.conf DEFAULT compute_driver novadocker.virt.docker.DockerDriver
openstack-config --set /etc/nova/nova-compute.conf DEFAULT compute_driver novadocker.virt.docker.DockerDriver
openstack-config --set /etc/nova/nova.conf docker vif_driver novadocker.virt.docker.opencontrail.OpenContrailVIFDriver
openstack-config --set /etc/nova/nova-compute.conf docker vif_driver novadocker.virt.docker.opencontrail.OpenContrailVIFDriver
openstack-config --del /etc/nova/nova.conf DEFAULT libvirt_use_virtio_for_bridges
openstack-config --del /etc/nova/nova-compute.conf libvirt
openstack-config --del /etc/nova/nova-compute.conf DEFAULT network_api_class
fi
# Use noopdriver for firewall
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
if [ $VMWARE_IP ]; then
openstack-config --set /etc/nova/nova.conf vmware host_ip $VMWARE_IP
openstack-config --set /etc/nova/nova.conf vmware host_username $VMWARE_USERNAME
openstack-config --set /etc/nova/nova.conf vmware host_password $VMWARE_PASSWD
openstack-config --set /etc/nova/nova.conf vmware vmpg_vswitch $VMWARE_VMPG_VSWITCH
fi
# Openstack HA specific configs
INTERNAL_VIP=${INTERNAL_VIP:-none}
CONTRAIL_INTERNAL_VIP=${CONTRAIL_INTERNAL_VIP:-none}
EXTERNAL_VIP=${EXTERNAL_VIP:-$INTERNAL_VIP}
AMQP_PORT=5672
if [ "$CONTRAIL_INTERNAL_VIP" == "$AMQP_SERVER" ] || [ "$INTERNAL_VIP" == "$AMQP_SERVER" ]; then
AMQP_PORT=5673
fi
if [ "$INTERNAL_VIP" != "none" ] || [ "$CONTRAIL_INTERNAL_VIP" != "none" ]; then
openstack-config --set /etc/nova/nova.conf DEFAULT glance_port 9292
openstack-config --set /etc/nova/nova.conf DEFAULT glance_num_retries 10
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 5000
openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_host $AMQP_SERVER
openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_port $AMQP_PORT
openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_retry_interval 10
openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_retry_backoff 5
openstack-config --set /etc/nova/nova.conf DEFAULT kombu_reconnect_delay 10
openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_max_retries 0
openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_ha_queues True
openstack-config --set /etc/nova/nova.conf DEFAULT rpc_cast_timeout 30
openstack-config --set /etc/nova/nova.conf DEFAULT rpc_conn_pool_size 40
openstack-config --set /etc/nova/nova.conf DEFAULT rpc_response_timeout 60
openstack-config --set /etc/nova/nova.conf DEFAULT rpc_thread_pool_size 70
openstack-config --set /etc/nova/nova.conf DEFAULT report_interval 15
openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_port 6080
openstack-config --set /etc/nova/nova.conf DEFAULT vnc_port 5900
openstack-config --set /etc/nova/nova.conf DEFAULT vnc_port_total 100
openstack-config --set /etc/nova/nova.conf DEFAULT resume_guests_state_on_host_boot True
openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen $SELF_MGMT_IP
openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address $SELF_MGMT_IP
openstack-config --set /etc/nova/nova.conf DEFAULT service_down_time 300
openstack-config --set /etc/nova/nova.conf DEFAULT periodic_fuzzy_delay 30
openstack-config --set /etc/nova/nova.conf DEFAULT lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf DEFAULT disable_process_locking True
fi
# Openstack and Contrail in different nodes.
if [ "$INTERNAL_VIP" != "none" ] && [ "$CONTRAIL_INTERNAL_VIP" != "none" ]; then
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host $INTERNAL_VIP
openstack-config --set /etc/nova/nova.conf DEFAULT $ADMIN_AUTH_URL http://$INTERNAL_VIP:5000/v2.0/
openstack-config --set /etc/nova/nova.conf DEFAULT $OS_URL http://$CONTRAIL_INTERNAL_VIP:9696/
openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_base_url http://$EXTERNAL_VIP:6080/vnc_auto.html
# Contrail HA.
elif [ "$INTERNAL_VIP" == "none" ] && [ "$CONTRAIL_INTERNAL_VIP" != "none" ]; then
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host $CONTROLLER
openstack-config --set /etc/nova/nova.conf DEFAULT $ADMIN_AUTH_URL http://$CONTROLLER:5000/v2.0/
openstack-config --set /etc/nova/nova.conf DEFAULT $OS_URL http://$CONTRAIL_INTERNAL_VIP:9696/
openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_base_url http://$CONTROLLER_MGMT:5999/vnc_auto.html
openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_port 5999
# Openstack and Contrail in same nodes.
elif [ "$INTERNAL_VIP" != "none" ] && [ "$CONTRAIL_INTERNAL_VIP" == "none" ]; then
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host $INTERNAL_VIP
openstack-config --set /etc/nova/nova.conf DEFAULT $ADMIN_AUTH_URL http://$INTERNAL_VIP:5000/v2.0/
openstack-config --set /etc/nova/nova.conf DEFAULT $OS_URL http://$INTERNAL_VIP:9696/
openstack-config --set /etc/nova/nova.conf DEFAULT novncproxy_base_url http://$EXTERNAL_VIP:6080/vnc_auto.html
fi
# Set userspace vhost and hugepages for DPDK vRouter
if [ "$DPDK_MODE" == "True" ]; then
openstack-config --set /etc/nova/nova.conf CONTRAIL use_userspace_vhost true
openstack-config --set /etc/nova/nova.conf LIBVIRT use_huge_pages true
fi
# Add respawn in nova-compute upstart script
nova_compute_upstart='/etc/init/nova-compute.conf'
if [ -f $nova_compute_upstart ]; then
ret_val=`grep "^respawn" $nova_compute_upstart > /dev/null;echo $?`
if [ $ret_val == 1 ]; then
sed -i 's/pre-start script/respawn\n&/' $nova_compute_upstart
sed -i 's/pre-start script/respawn limit 10 90\n&/' $nova_compute_upstart
fi
fi
for svc in openstack-nova-compute supervisor-vrouter; do
chkconfig $svc on
done
#for svc in openstack-nova-compute; do
# service $svc restart
#done