函数库路径:https://blog.csdn.net/anqixiang/article/details/89964048
配置文件路径:https://blog.csdn.net/anqixiang/article/details/91038496
#!/bin/bash
#AUTHOR:AN
#VERSION:1.1.0
#DATE:2019-06-05
#MODIFY:
#FUNCTION:快速部署openstack
#加载配置文件
source /cloud_nsd/conf/openstack.conf
#加载函数库
if [ -f "$Script_Path/myfunction.lib" ];then
source $Script_Path/myfunction.lib
else
echo -e "\033[31m函数库不存在\033[0m"
exit $NOEXIST
fi
##############################################################
#配置DNS,主机名,时间同步
DNS_TIME(){
[ ! -f /etc/resolv.conf.bak ] && cp /etc/resolv.conf /etc/resolv.conf.bak
echo "nameserver $Dns_Server" > /etc/resolv.conf #配置DNS
hostnamectl set-hostname $1 #配置主机名
#配置主机名解析
cat >> /etc/hosts << EOF
$OpenStk_Host $OpenS_Name
$Nova01_Host $Nova_Name01
$Nova02_Host $Nova_Name02
EOF
#配置时间同步
sed -i "/^server/c server $Ntp_Server iburst" /etc/chrony.conf
systemctl restart chronyd
systemctl enable chronyd &> /dev/null
chronyc sources -v |grep 'gateway' &> /dev/null
[ $? -ne 0 ] && cecho 31 "NTP Is Error" && exit $ISERROR
}
#配置YUM仓库,确保仓库文件已通过ftp服务器共享
CONF_YUM(){
Yum_conf=/etc/yum.repos.d/openstack.repo
[ ! -f $Yum_conf ] && touch $Yum_conf || > $Yum_conf
cat >> $Yum_conf << EOF
[RHEL7-extras]
name=RHEL7-extras
baseurl="ftp://$Ftp_Server/extras"
enabled=1
gpgcheck=0
[RHEL7OSP-package]
name=RHEL7OSP-package
baseurl="ftp://$Ftp_Server/openstack/rhel-7-server-openstack-10-rpms"
enabled=1
gpgcheck=0
[RHEL7OSP-devtools]
name=RHEL7OSP-devtools
baseurl="ftp://$Ftp_Server/openstack/rhel-7-server-openstack-10-devtools-rpms"
enabled=1
gpgcheck=0
EOF
yum clean all &> /dev/null
yum repolist
}
#基础环境准备
INIT(){
DNS_TIME $1
CONF_YUM
grep vmx /proc/cpuinfo |grep ssse3 &>/dev/null #是否支持虚拟化
[ $? -ne 0 ] && cecho 31 "Don't Support Virtual" && exit $ISERROR
YUMMUL "${Soft_Packet[*]}" #安装需要的包
}
#配置openstack
OPENSTACK(){
yum -y install openstack-packstack
packstack --gen-answer-file=$Answer_File #生成应答文件
#42行为swift对象存储,需ceph支持,45,49,53与计费有关
sed -i -e '42s/y/n/' -e '45s/y/n/' -e '49s/y/n/' -e '53s/y/n/' $Answer_File
sed -i "75c CONFIG_NTP_SERVERS=$Ntp_Server" $Answer_File #NTP服务器地址
sed -i "98c CONFIG_COMPUTE_HOSTS=$Nova01_Host" $Answer_File #在哪台服务器上安装nova主键
sed -i "102c CONFIG_NETWORK_HOSTS=$OpenStk_Host,$Nova01_Host" $Answer_File #哪台机器支持vxlan网络
sed -i "333c CONFIG_KEYSTONE_ADMIN_PW=$Admin_Pwd" $Answer_File #管理员openstack的密码
sed -i '840c CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan' $Answer_File #openstack支持什么网络协议(flat扁平网络)
sed -i '910c CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex' $Answer_File #三层虚拟交换机
sed -i '921c CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0' $Answer_File #三层虚拟交换机的WAN口端口名
sed -i '1179 s/y/n/' $Answer_File #官方写的例子
# packstack --answer-file=$Answer_File #执行应答文件
}
#帮助信息
HELP(){
cat << EOF
Openstack version 1.1.0
Usage: Openstack [-h] [-init 主机名][-openstack]
=======================================================================
optional arguments:
-h 提供帮助信息
-init 主机名 初始化配置
EXAMPLE:
bash Openstack.sh -init nova01
EOF
}
#############################主程序#############################
[ $# -eq 0 ] && HELP
case $1 in
-h)
HELP;;
-init)
if [ ! -z $2 ];then
INIT $2
else
HELP
fi
;;
-openstack)
OPENSTACK;;
*)
cecho 31 "Invalid option:bash `basename $0` [-h]"
esac