daisycloud-core/tools/setup/install/install_func.sh

869 lines
43 KiB
Bash
Executable File

#!/bin/bash
# DAISY upgrade
if [ ! "$_INSTALL_FUNC_FILE" ];then
_INSTALL_FUNC_DIR=`pwd`
cd $_INSTALL_FUNC_DIR/../common/
. daisy_common_func.sh
. daisy_global_var.sh
cd $_INSTALL_FUNC_DIR/../uninstall/
. uninstall_func.sh
cd $_INSTALL_FUNC_DIR
. install_global_var.sh
function ip2int()
{
local ip=$1
[ `echo $ip |grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$"` ] || { echo "ip of $ip format error."; exit 1; }
ip_list=${ip//./ }
read -a ip_array <<<${ip_list};
int_num=`echo $(( ${ip_array[0]}<<24 | ${ip_array[1]}<<16 | ${ip_array[2]}<<8 | ${ip_array[3]} ))`
}
function int2ip()
{
A=$((($1 & 0xff000000 ) >>24))
B=$((($1 & 0x00ff0000)>>16))
C=$((($1 & 0x0000ff00)>>8))
D=$(($1 & 0x000000ff))
ip_addr=$A.$B.$C.$D
}
function netmask_to_int()
{
local netmask=$1
[ `echo $ip |grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$"` ] || { echo "netmask of $netmask format error."; exit 1; }
netmask_int=`echo $netmask |awk -F. -vOFS=\; 'NF+=0{print "obase=2;"$0}'|bc |paste -s -d '' |grep -E '^1[1]*[0]*$' |grep -o '1' |wc -l`
[ "$netmask_int" -eq 0 ] && { echo "error, $netmask is not a correct netmask."; exit 1; }
}
function ip_to_cidr()
{
local ip=$1
local netmask=$2
netmask_to_int $netmask
cidr_int=$netmask_int
ip2int "$ip"
local ip_int=$int_num
ip2int "$netmask"
local netmask_int=$int_num
cidr0_int=$(( $ip_int & $netmask_int ))
int2ip "$cidr0_int"
cidr_ip=$ip_addr
cidr="$cidr_ip/$cidr_int"
}
function kolla_install
{
write_install_log "Begin install kolla depends..."
check_installed "docker-engine"
if [[ "$has_installed" == "yes" ]];then
echo "docker-engine has been already installed"
else
#curl -sSL https://get.docker.io | bash
yum remove -y docker-engine
yum install -y https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-17.05.0.ce-1.el7.centos.x86_64.rpm
fi
[ "$?" -ne 0 ] && { write_install_log "Install docker-engine failed"; exit 1; }
mkdir -p /etc/systemd/system/docker.service.d
config_path=/etc/systemd/system/docker.service.d/kolla.conf
echo -e "[Service]\nMountFlags=shared" > $config_path
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
check_and_install_rpm python2-docker
check_and_install_rpm ntp
systemctl enable ntpd.service
systemctl start ntpd.service
# ansible 2.4.1 has problem with kolla prechecks. Before problem being solved,
# we need to fix the ansible version to 2.4.0
yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/ansible-2.4.0.0-5.el7.noarch.rpm
check_and_install_rpm python2-crypto
check_and_install_rpm python-gitdb
check_and_install_rpm GitPython.noarch
check_and_install_rpm python2-pbr.noarch
check_and_install_rpm python2-oslo-config.noarch
check_and_install_rpm python2-six.noarch
check_and_install_rpm python-beautifulsoup4.noarch
check_and_install_rpm python2-setuptools.noarch
check_and_install_rpm python2-jinja2
imagebranch="pike"
imageversion="180124134113"
imageserver="http://artifacts.opnfv.org/daisy/upstream"
imagedir="/var/lib/daisy/versionfile/kolla"
imagebakdir="/home/kolla_install/docker/"
imagename="kolla-image-$imagebranch-$imageversion.tgz"
sourcedir="/home/kolla_install/"
write_install_log "Begin copy image, name:$imagename"
if [ ! -f "$imagedir/$imagename" ];then
mkdir -p $imagebakdir
cd $imagebakdir
if [ -f "$imagebakdir/$imagename" ];then
echo "$imagename already exist!"
else
wget "$imageserver/$imagename"
fi
cp $imagebakdir/$imagename $imagedir
fi
cd $imagedir
write_install_log "Begin unzip kolla-image, please wait."
tar mzxf $imagedir/$imagename
write_install_log "unzip kolla-image ok!"
sourceversion=$(cat $imagedir/registry-*.version | head -1)
write_install_log "Begin clone kolla... $sourceversion"
if [ -e "$sourcedir/kolla-anbible" ];then
echo "kolla-anbible code already exist!"
else
mkdir -p $sourcedir
cd $sourcedir
git clone https://github.com/huzhijiang/kolla-ansible
fi
cd $sourcedir/kolla-ansible
git remote update
git checkout -b stable/$imagebranch remotes/origin/stable/$imagebranch
cp -r /home/kolla_install/kolla-ansible/etc/kolla /etc
# TODO: (huzhj)Use latest registry server from upstream
if [ ! -f "$imagedir/registry-server.tar" ];then
cd $imagebakdir
if [ -f "$imagebakdir/registry-server.tar" ];then
echo "registry-server.tar already exist!"
else
wget "http://daisycloud.org/static/files/registry-server.tar"
fi
cp $imagebakdir/registry-server.tar $imagedir
fi
if [ ! -f "/var/lib/daisy/tools/registry-server.tar" ];then
cp $imagedir/registry-server.tar /var/lib/daisy/tools/ # keep it for target hosts
fi
docker load < $imagedir/registry-server.tar
rm -rf $imagedir/tmp
rm -rf $imagedir/registry-*.version
}
#rm daisy yum config file
function delete_unused_repo_file
{
rm -f /etc/yum.repos.d/daisy*
}
#create ssh key
function generate_ssh_key
{
local private_key_file=~/.ssh/id_dsa
local public_key_file=~/.ssh/id_dsa.pub
if [ ! -e $private_key_file ] || [ ! -e $public_key_file ]; then
rm -rf $public_key_file
rm -rf $private_key_file
ssh-keygen -t dsa -f $private_key_file -q -P '' -b 1024
[ $? == 0 ] && echo "ssh-keygen -t dsa succssfully!"
else
echo "ssh key is ready!"
fi
}
function get_ip_from_ping
{
input_ip=$1
output_ip=$input_ip
ping_result=`ping $input_ip -c 1 -w 5`
if [ $? -eq 0 ];then
ping_result=`echo $ping_result|tr '(' ' '|tr ')' ' '`
local ip=`echo $ping_result|sed -n '/from/ s/.*from[^0-9]* \([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p'`
[ ! -z "$ip" ] && output_ip=$ip || echo -e "=============\nwarning: can't get ip address from \"ping $input_ip\"\n============="
else
echo -e "=============\nwarning: ping $input_ip failed.\n============="
fi
}
function get_public_ip
{
local_ip_list=`ifconfig | grep "inet " | grep -v "127.0.0.1" | awk -F' ' {'print $2'} `
local def_gw_if=`route | grep default | awk -F' ' '{print $8}'|uniq|head -1`
public_ip=""
if [[ -n "$def_gw_if" ]];then
public_ip=`ifconfig "$def_gw_if" | grep 'inet ' | cut -d: -f2 | awk '{ print $2}'`
fi
}
function get_default_gw_st
{
defaultgw_ip=`route |grep default |awk '{print $2}'`
}
function set_default_gw_st
{
if [ -n "$defaultgw_ip" ] ; then
route add default gw $defaultgw_ip
fi
}
#create daisy component
function create_daisy_component
{
write_install_log "Daisy init and create the component"
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "nova" "The OpenStack Compute component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of nova failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "cinder" "The OpenStack Block Storage component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of cinder failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "glance" "The OpenStack Image component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of glance failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "heat" "The OpenStack Orchestration component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of heat failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "ceilometer" "The OpenStack Telemetry component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of ceilometer failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "horizon" "The OpenStack dashboard component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of horizon failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "neutron" "The OpenStack Networking component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of neutron failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "keystone" "The OpenStack Identity component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of keystone failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "ironic" "The OpenStack Bare Metal component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of ironic failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "database" "Database component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of database failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "amqp" "Message queue component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of amqp failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "loadbalance" "Loadbalance component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of loadbalance failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "ha" "High availability component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of ha failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "camellia" "Camellia component" >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the component of camellia failed"; exit 1; }
# /usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-add "log" "Log component" >> $install_logfile 2>&1
# [ "$?" -ne 0 ] && { write_install_log "Error:create the component of log failed"; exit 1; }
}
#create daisy service
function create_daisy_service
{
write_install_log "Daisy init and create the service"
local nova_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "nova" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of nova component failed"; exit 1; }
local ironic_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "ironic" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of ironic component failed"; exit 1; }
local glance_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "glance" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of glance component failed"; exit 1; }
local cinder_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "cinder" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of cinder component failed"; exit 1; }
local keystone_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "keystone" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of keystone component failed"; exit 1; }
local neutron_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "neutron" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of neutron component failed"; exit 1; }
local horizon_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "horizon" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of horizon component failed"; exit 1; }
local heat_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "heat" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of heat component failed"; exit 1; }
local ceilometer_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "ceilometer" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of ceilometer component failed"; exit 1; }
local amqp_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "amqp" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of amqp component failed"; exit 1; }
local database_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "database" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of datebase component failed"; exit 1; }
local ha_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "ha" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of ha component failed"; exit 1; }
local lb_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "loadbalance" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of loadbalance component failed"; exit 1; }
local camellia_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "camellia" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of camellia component failed"; exit 1; }
# local log_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "log" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
# [ "$?" -ne 0 ] && { write_install_log "Error:query the id of log component failed"; exit 1; }
if [ ! -z $nova_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "nova-api" "The nova api service" --component-id $nova_component_id --backup-type lb >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of nova-api failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "nova-conductor" "The nova conductor service" --component-id $nova_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of nova conductor failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "nova-vncproxy" "The nova vnc proxy service" --component-id $nova_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of nova vnc proxy failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "nova-sched" "The nova scheduler service" --component-id $nova_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of nova scheduler failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "compute" "The nova compute service" --component-id $nova_component_id >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of nova scheduler failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "nova-cert" "The nova certificate service" --component-id $nova_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of nova certificate failed"; exit 1; }
else
write_install_log "Error:there is no componet of nova"
exit 1;
fi
if [ ! -z $ironic_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "ironic" "The nova ironic service" --component-id $ironic_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of ironic failed"; exit 1; }
else
write_install_log "Error:there is no componet of ironic"
exit 1;
fi
if [ ! -z $glance_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "glance" "The glance api service" --component-id $glance_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of glance api failed"; exit 1; }
else
write_install_log "Error:there is no componet of glance"
exit 1;
fi
if [ ! -z $cinder_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "cinder-api" "The cinder api service" --component-id $cinder_component_id --backup-type lb >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of cinder api failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "cinder-scheduler" "The cinder scheduler service" --component-id $cinder_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of cinder scheduler failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "cinder-volume" "The cinder volumes service" --component-id $cinder_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of cinder volumes failed"; exit 1; }
else
write_install_log "Error:there is no componet of cinder"
exit 1;
fi
if [ ! -z $keystone_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "keystone" "The keystone service" --component-id $keystone_component_id --backup-type lb >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of keystone failed"; exit 1; }
else
write_install_log "Error:there is no componet of keystone"
exit 1;
fi
if [ ! -z $neutron_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "neutron-server" "The neutron server service" --component-id $neutron_component_id --backup-type lb >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of neutron server failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "neutron-l3" "The neutron l3 service" --component-id $neutron_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of neutron l3 failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "neutron-dhcp" "The neutron dhcp service" --component-id $neutron_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of neutron dhcp failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "neutron-metadata" "The neutron metadata service" --component-id $neutron_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of neutron metadata failed"; exit 1; }
else
write_install_log "Error:there is no componet of neutron"
exit 1;
fi
if [ ! -z $horizon_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "horizon" "The horizon service" --component-id $horizon_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of horizon failed"; exit 1; }
else
write_install_log "Error:there is no componet of horizon"
exit 1;
fi
if [ ! -z $heat_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "heat-api" "The heat api service" --component-id $heat_component_id --backup-type lb >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of heat api failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "heat-api-cfn" "The heat api cfn service" --component-id $heat_component_id --backup-type lb >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of heat api cfn failed"; exit 1; }
#/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "heat-api-cloudwatch" "The heat api cfn cloudwatch service" --component-id $heat_component_id --backup-type ha>> $install_logfile 2>&1
#[ "$?" -ne 0 ] && { write_install_log "Error:create the service of heat api cloudwatch failed"; exit 1;}
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "heat-engine" "The heat engine service" --component-id $heat_component_id --backup-type ha>> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of heat engine failed"; exit 1;}
else
write_install_log "Error:there is no componet of heat"
exit 1;
fi
if [ ! -z $ceilometer_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "ceilometer-api" "The ceilometer api service" --component-id $ceilometer_component_id --backup-type lb >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of ceilometer api failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "ceilometer-collector" "The ceilometer service" --component-id $ceilometer_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of ceilometer collector failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "ceilometer-notification" "The ceilometer service" --component-id $ceilometer_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of ceilometer notification failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "ceilometer-central" "The ceilometer service" --component-id $ceilometer_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of ceilometer central failed"; exit 1; }
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "ceilometer-alarm" "The ceilometer service" --component-id $ceilometer_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of ceilometer alarm failed"; exit 1; }
else
write_install_log "Error:there is no componet of ceilometer"
exit 1;
fi
if [ ! -z $amqp_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "amqp" "The amqp service" --component-id $amqp_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of amqp failed"; exit 1; }
else
write_install_log "Error:there is no componet of amqp"
exit 1;
fi
if [ ! -z $database_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "mariadb" "The database service" --component-id $database_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of mariadb failed"; exit 1; }
else
write_install_log "Error:there is no componet of database"
exit 1;
fi
if [ ! -z $ha_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "ha" "The high availability service" --component-id $ha_component_id >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of high availability failed"; exit 1; }
else
write_install_log "Error:there is no componet of ha"
exit 1;
fi
if [ ! -z $lb_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "lb" "The loadbalance service" --component-id $lb_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of lb failed"; exit 1; }
else
write_install_log "Error:there is no componet of loadbalance"
exit 1;
fi
# now ceilometer use mariadb default, 10132825 20160202
if [ ! -z $database_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "mongodb" "The database service" --component-id $database_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of mongodb failed"; exit 1; }
else
write_install_log "Error:there is no componet of database"
exit 1;
fi
if [ ! -z $camellia_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "camellia-api" "The camellia-api service" --component-id $camellia_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of camellia-api failed"; exit 1; }
else
write_install_log "Error:there is no componet of camellia"
exit 1;
fi
# if [ ! -z $log_component_id ];then
# /usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "log-server" "The log-server service" --component-id $log_component_id --backup-type ha >> $install_logfile 2>&1
# [ "$?" -ne 0 ] && { write_install_log "Error:create the service of log-server failed"; exit 1; }
# else
# write_install_log "Error:there is no componet of log"
# exit 1;
# fi
}
#create daisy network
function create_daisy_network
{
write_install_log "Daisy init and create the network"
daisy --os-endpoint="http://${public_ip}:$bind_port" network-add "PUBLICAPI" "For public api" "PUBLICAPI" --cidr "1.0.0.0/8" --type template --capability high >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the network of publicAPI failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" network-add "MANAGEMENT" "For internal API and AMQP" "MANAGEMENT" --cidr "1.0.0.0/8" --type template --capability high >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the network of MANAGEMENT failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" network-add "STORAGE" "Storage network plane" "STORAGE" --cidr "1.0.0.0/8" --type template --capability high >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the network of STORAGE failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" network-add "physnet1" "Dataplane network for vms" "DATAPLANE" --type template --ml2-type ovs --capability high >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the network of DATAPLANE failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" network-add "DEPLOYMENT" "For deploy the infrastructure" "DEPLOYMENT" --cidr "99.99.1.1/24" --type template --capability high >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the network of DEPLOYMENT failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" network-add "EXTERNAL" "For external interactive" "EXTERNAL" --cidr "1.0.0.0/8" --type template --capability high >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the network of EXTERNAL failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" network-add "HEARTBEAT" "For keepalive interactive" "HEARTBEAT" --cidr "1.0.0.0/8" --type template --capability high >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the network of HEARTBEAT failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" network-add "DEPLOYMENT" "For build pxe server" "DEPLOYMENT" --cidr "99.99.1.1/24" --ip "99.99.1.5" --ip-ranges "start":"99.99.1.50","end":"99.99.1.150" --type system >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the network of DEPLOYMENT failed"; exit 1; }
}
#create daisy role with tecs
function create_daisy_role_with_tecs
{
write_install_log "Daisy init and create the role with tecs"
local service_type_LB_list=`daisy --os-endpoint="http://${public_ip}:$bind_port" service-list | awk -F "|" '{print $2$6}' | grep -w [Ll][Bb] | awk -F " " '{print $1}'`
local service_type_HA_list=`daisy --os-endpoint="http://${public_ip}:$bind_port" service-list | awk -F "|" '{print $2$6}' | grep -w [Hh][Aa] | awk -F " " '{print $1}'`
local service_type_compute_list=`daisy --os-endpoint="http://${public_ip}:$bind_port" service-list | awk -F "|" '{print $2$3}' | grep -w "compute" | awk -F " " '{print $1}'`
if [ ! -z "$service_type_LB_list" ];then
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "CONTROLLER_LB" "Controller role,backup type is loadbalance" --services $service_type_LB_list --type template --role-type CONTROLLER_LB >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the role of CONTROLLER_LB failed"; exit 1; }
fi
if [ ! -z "$service_type_HA_list" ];then
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "CONTROLLER_HA" "Controller role,backup type is HA,active/standby" --services $service_type_HA_list --type template --role-type CONTROLLER_HA >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the role of CONTROLLER_HA failed"; exit 1; }
fi
if [ ! -z $service_type_compute_list ];then
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "COMPUTER" "Compute role" --services $service_type_compute_list --type template --role-type COMPUTER >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the role of COMPUTER failed"; exit 1; }
fi
# daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "DOCTOR" "Role for health monitoring" --type template >> $install_logfile 2>&1
# [ "$?" -ne 0 ] && { write_install_log "create the role of DOCTOR failed"; exit 1; }
}
function create_daisy_role_with_zenic
{
write_install_log "Daisy init and create the role with zenic"
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "ZENIC_CTL" "Role for zenic controller." --type template --deployment-backend zenic --role-type ZENIC_CTL >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the role of ZENIC_CTL failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "ZENIC_NFM" "Role for zenic nfmanager." --type template --deployment-backend zenic --role-type ZENIC_NFM >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the role of ZENIC_NFM failed"; exit 1; }
#daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "ZENIC_MDB" "Role for zenic mongodb." --type template --deployment-backend zenic --role-type ZENIC_MDB >> $install_logfile 2>&1
#[ "$?" -ne 0 ] && { write_install_log "create the role of ZENIC_MDB failed"; exit 1; }
}
function create_daisy_role_with_proton
{
write_install_log "Daisy init and create the role with proton"
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "PROTON" "Role for proton." --type template --deployment-backend proton --role-type PROTON >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the role of proton failed"; exit 1; }
}
function create_daisy_role_with_kolla
{
write_install_log "Daisy init and create the role with kolla"
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "CONTROLLER_LB" "Controller Role for kolla." --type template --deployment-backend kolla --role-type CONTROLLER_LB >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the controller role of KOLLA failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "COMPUTER" "Computer Role for kolla." --type template --deployment-backend kolla --role-type COMPUTER >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the computer role of KOLLA failed"; exit 1; }
}
function create_daisy_service_role_with_cell
{
write_install_log "Daisy init and create component and role with cell"
local nova_component_id=`/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" component-list |grep -w "nova" |awk -F " " '{print $2}'` >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:query the id of nova component failed"; exit 1; }
if [ ! -z $nova_component_id ];then
/usr/bin/daisy --os-endpoint="http://$public_ip:$bind_port" service-add "nova-cells" "The nova cells service" --component-id $nova_component_id --backup-type ha >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:create the service of nova cell failed"; exit 1; }
fi
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "CHILD_CELL_1_COMPUTER" "Child cell compute role" --type template --role-type CHILD_CELL_1_COMPUTER >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the role of CHILD CELL COMPUTER failed"; exit 1; }
daisy --os-endpoint="http://${public_ip}:$bind_port" role-add "CONTROLLER_CHILD_CELL_1" "Controller role,backup type is cell" --type template --role-type CONTROLLER_CHILD_CELL_1 >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "create the role of cell failed"; exit 1; }
}
function daisy_init_func
{
get_public_ip
if [ -z $public_ip ];then
write_install_log "Error:default gateway is not set!!!"
exit 1
fi
local file="/etc/daisy/daisy-api.conf"
bind_port=""
if [ -e $file ];then
bind_port=`openstack-config --get $file DEFAULT "bind_port"`
if [ $bind_port=="" ];then
bind_port="19292"
fi
fi
create_daisy_component
create_daisy_service
create_daisy_network
config_file="/home/daisy_install/daisy.conf"
[ ! -e $config_file ] && return
get_config "$config_file" default_backend_types
local default_backend_types_params=$config_answer
cell=`echo $default_backend_types_params|grep 'cell'|wc -l`
if [ $cell -ne 0 ];then
create_daisy_service_role_with_cell
fi
tecs=`echo $default_backend_types_params|grep 'tecs'|wc -l`
if [ -z "$default_backend_types_params" ] || [ $tecs -ne 0 ];then
create_daisy_role_with_tecs
fi
zenic=`echo $default_backend_types_params|grep 'zenic'|wc -l`
if [ $zenic -ne 0 ];then
create_daisy_role_with_zenic
fi
proton=`echo $default_backend_types_params|grep 'proton'|wc -l`
if [ $proton -ne 0 ];then
create_daisy_role_with_proton
fi
kolla=`echo $default_backend_types_params|grep 'kolla'|wc -l`
if [ $kolla -ne 0 ];then
create_daisy_role_with_kolla
fi
}
function modify_sudoers
{
local file=$1
local key=$2
[ ! -e $file ] && { write_install_log "Error:$file is not exist"; exit 1;}
#echo update key $key to value $value in file $file ...
local exist=`grep "^[[:space:]]*[^#]" $file | grep -c "[[:space:]]*$key[[:space:]]*"`
if [ $exist -gt 0 ];then
sed -i "/^[^#]/s/Defaults requiretty/#Defaults requiretty/" $file
fi
sudoer_daisy="/etc/sudoers.d/daisy"
if [ ! -e $sudoer_daisy ];then
touch $sudoer_daisy
echo "daisy ALL=(ALL) NOPASSWD: ALL" > $sudoer_daisy
fi
}
function config_rabbitmq_env
{
local config_file="/etc/rabbitmq/rabbitmq-env.conf"
if [ ! -e $config_file ];then
touch $config_file
echo "NODE_PORT=5672" >> $config_file
fi
}
function config_rabbitmq_config
{
local config_file="/etc/rabbitmq/rabbitmq.config"
if [ ! -e $config_file ];then
cat > $config_file <<EOF
% This file managed by Puppet
% Template Path: rabbitmq/templates/rabbitmq.config
[
{rabbit, [
{loopback_users, []},
{tcp_listen_options, [binary,{packet, raw},{reuseaddr, true},{backlog, 128},{nodelay, true},{exit_on_close, false},{keepalive, true}]},
{default_user, <<"guest">>},
{default_pass, <<"guest">>}
]},
{kernel, [
]}
].
% EOF
EOF
fi
}
function config_daisy_discoverd
{
local file=$1
local ip=$2
local daisy_file="/etc/daisy/daisy-api.conf"
local bind_port=""
if [ -e $daisy_file ];then
bind_port=`openstack-config --get $daisy_file DEFAULT "bind_port"`
if [ $bind_port=="" ];then
bind_port="19292"
fi
fi
[ ! -e $file ] && { write_install_log "Error:$file is not exist"; exit 1;}
openstack-config --set "$file" discoverd "os_auth_token" "admin"
openstack-config --set "$file" discoverd "manage_firewall " "false"
openstack-config --set "$file" discoverd "daisy_url " "http://$ip:$bind_port"
}
function daisyrc_admin
{
local ip=$1
local file="/root/daisyrc_admin"
if [ -z $bind_port ];then
bind_port="19292"
fi
if [ ! -e $file ];then
touch $file
echo "export OS_ENDPOINT=http://$ip:$bind_port" >> $file
fi
}
function config_pxe
{
local config_file="/var/lib/daisy/pxe.json"
if [ ! -e $config_file ];then
touch $config_file
fi
echo -e "{\n\"build_pxe\":\"$2\",\n\"ip_addr_l\":\"$3\",\n\"ethname_l\":\"$1\",\n\"net_mask_l\":\"$4\",\n\"client_ip_begin\":\"$5\",\n\"client_ip_end\":\"$6\"\n}" > $config_file
}
function build_pxe_server
{
local ip=$1
local daisy_port=$2
config_file="/home/daisy_install/daisy.conf"
[ ! -e $config_file ] && return
get_config "$config_file" build_pxe
local build_pxe_params=$config_answer
if [ "$build_pxe_params" == yes ];then
write_install_log "build pxe server"
get_config "$config_file" eth_name
pxe_bond_name=$config_answer
if [ -z $pxe_bond_name ];then
write_install_log "Error:In the configuration file daisy.conf,eth_name is blank"
fi
optional_parameters=()
get_config "$config_file" ip_address
ip_address_params=$config_answer
get_config "$config_file" net_mask
net_mask_params=$config_answer
get_config "$config_file" client_ip_begin
client_ip_begin_params=$config_answer
get_config "$config_file" client_ip_end
client_ip_end_params=$config_answer
config_pxe $pxe_bond_name yes $ip_address_params $net_mask_params $client_ip_begin_params $client_ip_end_params
/usr/bin/pxe_server_install /var/lib/daisy/pxe.json >> $install_logfile 2>&1
# write dhcp cidr to DEPLOYMENT network of system for daisy
# to decide which is pxe mac
if [ "$ip_address_params" -a "$net_mask_params" ];then
ip_to_cidr "$ip_address_params" "$net_mask_params"
[ -z "$cidr" ] && { write_install_log "Error: can't get cidr of dhcp"; exit 1; }
dhcp_cidr=$cidr
template_deploy_network_id=`/usr/bin/daisy --os-endpoint="http://${ip}:${daisy_port}" network-list --type "system"|grep -w system |grep -w 'DEPLOYMENT' |awk -F ' ' '{print $2}' 2>&1`
if [ "$client_ip_begin_params" -a "$client_ip_end_params" ];then
ip_ranges="start:$client_ip_begin_params,end:$client_ip_end_params"
else
ip_ranges=""
fi
[ -z "$template_deploy_network_id" ] && { write_install_log "Error:can't find DEPLOYMENT network of system"; exit 1; }
write_install_log "write dhcp cidr to DEPLOYMENT network of system"
if [ "$ip_ranges" ];then
/usr/bin/daisy --os-endpoint="http://${ip}:${daisy_port}" network-update "$template_deploy_network_id" --cidr "$dhcp_cidr" --ip-ranges "$ip_ranges" >> $install_logfile 2>&1
else
/usr/bin/daisy --os-endpoint="http://${ip}:${daisy_port}" network-update "$template_deploy_network_id" --cidr "$dhcp_cidr" >> $install_logfile 2>&1
fi
[ "$?" -ne 0 ] && { write_install_log "Error:update DEPLOYMENT network $template_deploy_network_id of system failed"; exit 1; }
fi
systemctl is-active dhcpd.service >> $install_logfile 2>&1
[ "$?" -ne 0 ] && { write_install_log "Error:dhcpd.service is not active,so build pxe server failed"; exit 1; }
else
write_install_log "Notice:No build PXE server"
fi
}
function config_dashboard_local_setting
{
local dashboard_conf_file="/etc/openstack-dashboard/local_settings"
get_public_ip
if [ -z $public_ip ];then
write_install_log "Error:default gateway is not set!!!"
exit 1
fi
update_config "$dashboard_conf_file" OPENSTACK_KEYSTONE_URL "\"http://${public_ip}:5000/v3\""
update_config "$dashboard_conf_file" DAISY_ENDPOINT_URL "\"http://$public_ip:19292\""
update_config "$dashboard_conf_file" WEBROOT "'/dashboard/'"
update_config "$dashboard_conf_file" LOGIN_URL "'/dashboard/auth/login/'"
update_config "$dashboard_conf_file" LOGOUT_URL "'/dashboard/auth/logout/'"
update_config "$dashboard_conf_file" ALLOWED_HOSTS "['*']"
update_config "$dashboard_conf_file" AUTHENTICATION_URLS "['openstack_auth.urls',]"
touch /var/log/horizon/horizon.log
chown apache:apache /var/log/horizon/horizon.log
config_file="/home/daisy_install/daisy.conf"
local director_theme_conf_file="/usr/share/openstack-dashboard/openstack_dashboard/enabled/_20_director_theme.py"
[ ! -e $config_file ] && return
get_config "$config_file" with_director
local with_director=$config_answer
if [ "$with_director" == yes ];then
update_config "$director_theme_conf_file" DISABLED "False"
else
update_config "$director_theme_conf_file" DISABLED "True"
fi
}
function config_keystone_local_setting
{
local keystone_conf_file="/etc/keystone/keystone.conf"
openstack-config --set "$keystone_conf_file" database connection "mysql+pymysql://keystone:keystone@127.0.0.1/keystone"
openstack-config --set "$keystone_conf_file" token provider "fernet"
openstack-config --set "$keystone_conf_file" token expiration "90000"
}
function config_get_node_info
{
local get_node_info_file="/var/lib/daisy/kolla/getnodeinfo.sh"
if [ ! -e $get_node_info_file ];then
write_install_log "Error:the file $get_node_info_file is not exist"
exit 1
fi
get_public_ip
if [ -z $public_ip ];then
write_install_log "Error:default gateway is not set!!!"
exit 1
fi
sed -i "s/127.0.0.1/$public_ip/g" $get_node_info_file
[ "$?" -ne 0 ] && { write_install_log "Error:config /var/lib/daisy/kolla/getnodeinfo.sh failed"; exit 1;}
}
_INSTALL_FUNC_FILE="install_func.sh"
fi