0
点赞
收藏
分享

微信扫一扫

自动化快速部署OpenStack Train版控制节点

[root@openstack-controller1 ~]#cat openstack-deploy-controller-node.sh 
#!/bin/bash
#Author:QsyjSmy
#Date:2022-01-24
#QQ:582673967

#定义变量
HOST_IP=`ifconfig | grep 172 | awk '{print $2}'`
FIREWALLD_STATUS=`systemctl is-enabled firewalld.service`
GETENFORCE_STATUS=`getenforce`

#更改hosts文件
function setup-hosts {
echo "172.31.7.101 openstack-controller1.qsyjsmy.com openstack-controller1" >> /etc/hosts
echo "172.31.7.107 openstack-compute1.qsyjsmy.com openstack-compute1" >> /etc/hosts
echo "172.31.7.108 openstack-compute2.qsyjsmy.com openstack-compute2" >> /etc/hosts
}

#关闭防火墙与selinux
function disable-firewalld-seliunx {
if [ ${FIREWALLD_STATUS} != disabled ]
then
systemctl disable --now firewalld.service && echo "防火墙禁用成功" && sleep 3
fi

if [ ${GETENFORCE_STATUS} != disabled ]
then
sed -i.bak 's/^\(SELINUX=\).*/\1disabled/g' /etc/selinux/config && echo "selinux禁用成功" && sleep 3
fi
}

#配置阿里云yum源
function setup-aliyun-yum {
yum repolist | grep aliyun &> /dev/null
if [ $? -ne 0 ]
then
mkdir -p /etc/yum.repos.d/back/ && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/back/
ping -c 3 www.baidu.com &> /dev/null && curl -so /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[ -f /etc/yum.repos.d/CentOS-Base.repo ] || ( echo "阿里云yum源下载失败,请检查网络配置,,脚本正在退出..." && sleep 3 && exit 1 )
yum clean all &> /dev/null && yum makecache &> /dev/null && yum repolist | grep aliyun &> /dev/null && echo "阿里云yum源配置成功" && sleep 3
fi
}

#安装常用基础命令
function install-software {
yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop lsof \
ntpdate telnet bridge-utils bash-completion sshpass libibverbs && echo "常用基础命令安装完成" && sleep 3
}

#配置时钟同步
function setup-timedate {
crontab -l | grep "ntp.aliyun.com" || echo "*/10 * * * * /usr/sbin/ntpdate ntp.aliyun.com && /usr/sbin/hwclock -w" | crontab && \
echo "时钟同步配置成功"
echo "当前服务器时间是: `date +'%Y年%m月%d日 %H时%M分%S秒'`" && sleep 3
}

#安装Train版yum源
function install-train-yum {
yum list centos-release-openstack* | grep "centos-release-openstack-train" &> /dev/null && yum install -y centos-release-openstack-train.noarch
if [ $? -eq 0 ]
then
yum install -y https://rdoproject.org/repos/rdo-release.rpm && yum repolist | grep train &> /dev/null && echo "Train版yum源安装完成" && \
sleep 3
else
echo "Train版yum源安装失败,请检查网络配置,脚本正在退出..." && sleep 3 && exit 1
fi
}

#安装OpenStack客户端
function install-openstack-client {
yum install -y python2-openstackclient.noarch && echo "OpenStack客户端安装完成" && sleep 3
}

#安装OpenStack selinux管理包
function install-openstack-selinux {
yum install -y openstack-selinux.noarch && echo "OpenStack客户端安装完成" && sleep 3
}

#安装并配置MySQL数据库服务
function install-mysql {
yum install mariadb mariadb-server python2-PyMySQL -y && sleep 3
if [ $? -eq 0 ]
then
wget -O /opt/openstack.conf http://www.qsyjsmy.com/testdir/openstack.conf && cat /opt/openstack.conf > /etc/my.cnf.d/openstack.conf
systemctl enable --now mariadb.service; sleep 3 && systemctl status mariadb.service || \
{ echo "MySQL数据库服务启动失败,正在退出...";sleep 3;exit 1; } && echo "MySQL数据库服务安装配置完成" && sleep 3
else
{ echo "MySQL数据库服务安装失败,请检查网络配置,脚本正在退出...";sleep 3;exit 1; }
fi
}

#安装并配置RabbitMQ服务
function install-rabbitmq {
yum install rabbitmq-server -y && sleep 3
if [ $? -eq 0 ]
then
systemctl enable --now rabbitmq-server.service; sleep 3 && netstat -tnlp | grep 5672 || \
{ echo "RabbitMQ服务启动失败,正在退出...";sleep 3;exit 1; } && echo "RabbitMQ服务启动成功" && sleep 3
rabbitmqctl add_user openstack RABBIT_PASS;sleep 5 && rabbitmqctl set_permissions openstack ".*" ".*" ".*";sleep 5 && \
rabbitmq-plugins enable rabbitmq_management;sleep 5 && echo "RabbitMQ服务配置成功" && sleep 3
else
{ echo "RabbitMQ服务安装失败,请检查网络配置,脚本正在退出...";sleep 3;exit 1; }
fi
}

#安装并配置memcached服务
function install-memcached {
yum install memcached python-memcached -y && sleep 3
if [ $? -eq 0 ]
then
sed -i 's/^\(CACHESIZE=\).*/\1"1024"/g' /etc/sysconfig/memcached
sed -i 's/^\(OPTIONS=\).*/\1"-l 0.0.0.0,::1"/g' /etc/sysconfig/memcached
systemctl enable --now memcached.service; sleep 3 && netstat -tnlp | grep memcached || \
{ echo "memcached服务启动失败,正在退出...";sleep 3;exit 1; } && echo "memcached服务配置成功" && sleep 3
else
{ echo "memcached服务安装失败,请检查网络配置,脚本正在退出...";sleep 3;exit 1; }
fi
}

#安装并配置keystone服务
function install-keystone {
#创建数据库并授权
mysql -e "CREATE DATABASE keystone;" && \
mysql -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';" && \
mysql -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';" && \
mysql -e "show databases;" | grep keystone || { echo "keystone服务创库授权失败,正在退出...";sleep 3;exit 1; } && echo "创库授权完成" && sleep 3
if [ $? -eq 0 ]
then
#安装keystone服务
yum install openstack-keystone httpd mod_wsgi -y && echo "keystone服务安装成功" && sleep 3
#配置keystone服务
cp /etc/keystone/keystone.conf{,.bak} && wget -O /opt/keystone.conf http://www.qsyjsmy.com/testdir/keystone.conf && \
cat /opt/keystone.conf > /etc/keystone/keystone.conf
#初始化数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone;sleep 3 && mysql -e "use keystone;show tables;" | grep "access_rule" || \
{ echo "初始化数据库失败,正在退出...";sleep 3;exit 1; } && echo "初始化数据库成功" && sleep 3
#初始化证书
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone && \
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone && \
[ -d /etc/keystone/credential-keys/ -a -d /etc/keystone/fernet-keys/ ] || { echo "初始化证书失败,正在退出...";sleep 3;exit 1; } && \
echo "证书初始化成功" && sleep 3
#初始化OpenStack
keystone-manage bootstrap --bootstrap-password ADMIN_PASS --bootstrap-admin-url http://openstack-controller1:5000/v3/ \
--bootstrap-internal-url http://openstack-controller1:5000/v3/ --bootstrap-public-url http://openstack-controller1:5000/v3/ \
--bootstrap-region-id RegionOne && echo "初始化OpenStack成功" && sleep 3
#配置Apache
sed -i "s/^#\(ServerName\).*/\1 172.31.7.101:80/g" /etc/httpd/conf/httpd.conf && \
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ && httpd -t && \
systemctl enable --now httpd.service && systemctl status httpd.service &> /dev/null || \
{ echo "Apache服务启动失败,正在退出...";sleep 3;exit 1; } && \
echo "Apache服务启动成功" && sleep 3
#生成环境变量
cat > admin.sh<<EOF
#!/bin/bash
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://openstack-controller1:5000/v3
export OS_IDENTITY_API_VERSION=3
EOF
source admin.sh && curl http://openstack-controller1:5000 || { echo "keystone配置失败,正在退出...";sleep 3;exit 1; } && \
echo "keystone配置成功" && sleep 3
#创建域、用户、项目和角色
openstack domain create --description "An Example Domain" example && openstack domain list | grep example || \
{ echo "创建example域失败,正在退出...";sleep 3;exit 1; } && echo "创建example域成功" && sleep 3
openstack project create --domain default --description "Service Project" service && openstack project list | grep service || \
{ echo "创建service项目失败,正在退出...";sleep 3;exit 1; } && echo "创建service项目成功" && sleep 3
openstack project create --domain default --description "Demo Project" myproject && openstack project list | grep myproject || \
{ echo "创建myproject项目失败,正在退出...";sleep 3;exit 1; } && echo "创建myproject项目成功" && sleep 3
yum install -y expect && expect <<EOF
set timeout 10
spawn openstack user create --domain default --password-prompt myuser
expect {
"User Password:" { send "myuser\n";exp_continue }
"Repeat User Password:" { send "myuser\n" }
}
EOF
openstack role create myrole && openstack role list | grep myrole || \
{ echo "创建myrole角色失败,正在退出...";sleep 3;exit 1; } && echo "创建myrole角色成功" && sleep 3
openstack role add --project myproject --user myuser myrole
#创建OpenStack客户端环境脚本admin用户
cat > admin-openrc.sh<<EOF
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://openstack-controller1:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
#创建OpenStack客户端环境脚本demo用户
cat > demo-openrc.sh<<EOF
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=myuser
export OS_AUTH_URL=http://openstack-controller1:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
#运行脚本,验证keystone
source admin-openrc.sh && openstack token issue | grep "user_id" || \
{ echo "keystone服务运行异常,正在退出...";sleep 3;exit 1; } && echo "keystone服务运行正常" && sleep 3
else
{ echo "keystone数据库创建失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; }
fi
}

#安装并配置glance服务
function install-glance {
#创建数据库并授权
mysql -e "CREATE DATABASE glance;" && \
mysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';" && \
mysql -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';" && \
mysql -e "show databases;" | grep glance || { echo "glance数据库创建失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; } && \
echo "创库授权完成" && sleep 3
#glance服务注册
source admin-openrc.sh && expect <<EOF
set timeout 10
spawn openstack user create --domain default --password-prompt glance
expect {
"User Password:" { send "GLANCE_PASS\n";exp_continue }
"Repeat User Password:" { send "GLANCE_PASS\n" }
}
EOF
openstack role add --project service --user glance admin
openstack service create --name glance --description "OpenStack Image" image
openstack endpoint create --region RegionOne image public http://openstack-controller1:9292
openstack endpoint create --region RegionOne image internal http://openstack-controller1:9292
openstack endpoint create --region RegionOne image admin http://openstack-controller1:9292
source admin-openrc.sh && GLANCE_ENDPOINTS=`openstack endpoint list | grep "glance" | wc -l`
[ ${GLANCE_ENDPOINTS} -eq 3 ] || { echo "glance服务注册失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; } && \
echo "glance服务注册完成" && sleep 3
#安装并配置glance服务
yum install openstack-glance -y && cp /etc/glance/glance-api.conf{,.bak} && \
wget -O /opt/glance-api.conf http://www.qsyjsmy.com/testdir/glance-api.conf && cat /opt/glance-api.conf > /etc/glance/glance-api.conf
#初始化glance数据库
su -s /bin/sh -c "glance-manage db_sync" glance;sleep 3 && mysql -e "use glance;show tables;" | grep "alembic_version" || \
{ echo "初始化数据库失败,正在退出...";sleep 3;exit 1; } && echo "初始化数据库成功" && sleep 3
#启动glance服务
systemctl enable --now openstack-glance-api.service && systemctl status openstack-glance-api.service &> /dev/null || \
{ echo "glance服务启动失败,正在退出...";sleep 3;exit 1; } && echo "glance服务启动成功" && sleep 3
#测试glance上传镜像
wget http://www.qsyjsmy.com/testdir/cirros-0.5.1-x86_64-disk.img && ls -l /root/cirros-0.5.1-x86_64-disk.img || \
{ echo "cirros镜像下载失败,请检查网络连接,正在退出...";sleep 3;exit 1; } && echo "cirros镜像下载成功" && sleep 3
glance image-create --name "cirros-0.5.1" --file /root/cirros-0.5.1-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility public
openstack image list | grep -w cirros | grep active || \
{ echo "cirros镜像上传失败,正在退出...";sleep 3;exit 1; } && echo "cirros镜像上传成功" && sleep 3
}

#安装并配置placement
function install-placement {
#创建数据库并授权
mysql -e "CREATE DATABASE placement;" && \
mysql -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS';" && \
mysql -e "GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';" && \
mysql -e "show databases;" | grep placement || { echo "placement数据库创建失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; } && \
echo "placement创库授权完成" && sleep 3
#placement服务注册
source admin-openrc.sh && expect <<EOF
set timeout 10
spawn openstack user create --domain default --password-prompt placement
expect {
"User Password:" { send "PLACEMENT_PASS\n";exp_continue }
"Repeat User Password:" { send "PLACEMENT_PASS\n" }
}
EOF
openstack role add --project service --user placement admin
openstack service create --name placement --description "Placement API" placement
openstack endpoint create --region RegionOne placement public http://openstack-controller1:8778
openstack endpoint create --region RegionOne placement internal http://openstack-controller1:8778
openstack endpoint create --region RegionOne placement admin http://openstack-controller1:8778
source admin-openrc.sh && PLACEMENT_ENDPOINTS=`openstack endpoint list | grep "placement" | wc -l`
[ ${PLACEMENT_ENDPOINTS} -eq 3 ] || { echo "placement服务注册失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; } && \
echo "placement服务注册完成" && sleep 3
#配置placement服务
yum install openstack-placement-api -y && cp /etc/placement/placement.conf{,.bak} && \
wget -O /opt/placement.conf http://www.qsyjsmy.com/testdir/placement.conf && cat /opt/placement.conf > /etc/placement/placement.conf
#初始化placement数据库
su -s /bin/sh -c "placement-manage db sync" placement;sleep 3 && mysql -e "use placement;show tables;" | grep "alembic_version" || \
{ echo "初始化placement数据库失败,正在退出...";sleep 3;exit 1; } && echo "初始化placement数据库成功" && sleep 3
#配置Apache
cat >> /etc/httpd/conf.d/00-placement-api.conf<<EOF

<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
EOF
#重启Apache服务
httpd -t && systemctl restart httpd.service;sleep 3
#测试服务端口
curl 172.31.7.101:8778 || { echo "placement服务运行异常,正在退出...";sleep 3;exit 1; } && echo "placement服务运行成功" && sleep 3
}

#安装并配置nova计算服务
function install-nova {
#创建数据库并授权
mysql -e "CREATE DATABASE nova_api;" && \
mysql -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';" && \
mysql -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';" && \
mysql -e "CREATE DATABASE nova;" && \
mysql -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';" && \
mysql -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';" && \
mysql -e "CREATE DATABASE nova_cell0;" && \
mysql -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';" && \
mysql -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';" && \
NOVA_DATABASES=`mysql -e "show databases;" | egrep -w "nova_api|nova|nova_cell0" | wc -l` && \
[ ${NOVA_DATABASES} -eq 3 ] || { echo "nova计算服务数据库创建失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; } && \
echo "nova计算服务数据库创建完成" && sleep 3
#nova服务注册
source admin-openrc.sh && expect <<EOF
set timeout 10
spawn openstack user create --domain default --password-prompt nova
expect {
"User Password:" { send "NOVA_PASS\n";exp_continue }
"Repeat User Password:" { send "NOVA_PASS\n" }
}
EOF
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute
openstack endpoint create --region RegionOne compute public http://openstack-controller1:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://openstack-controller1:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://openstack-controller1:8774/v2.1
source admin-openrc.sh && NOVA_ENDPOINTS=`openstack endpoint list | grep "nova" | wc -l`
[ ${NOVA_ENDPOINTS} -eq 3 ] || { echo "nova服务注册失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; } && \
echo "nova服务注册完成" && sleep 3
#配置nova服务
yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y && \
cp /etc/nova/nova.conf{,.bak} && wget -O /opt/nova.conf http://www.qsyjsmy.com/testdir/nova.conf && \
cat /opt/nova.conf > /etc/nova/nova.conf
#初始化nova_api数据库
su -s /bin/sh -c "nova-manage api_db sync" nova;sleep 3
mysql -e "use nova_api;show tables;" | grep "aggregate_hosts" || \
{ echo "初始化nova_api数据库失败,正在退出...";sleep 3;exit 1; } && echo "初始化nova_api数据库成功" && sleep 3
#初始化nova cell0数据库
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova;sleep 3
#创建nova cell1数据库
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova;sleep 3
#初始化nova数据库
su -s /bin/sh -c "nova-manage db sync" nova;sleep 3
#验证nova cell0和nova cell1是否注册成功
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova;sleep 3
#启动nova服务
systemctl enable --now openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service \
openstack-nova-novncproxy.service && sleep 20
#验证nova服务
NOVA_STATUS=`systemctl is-active openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service | grep -w active | wc -l`
[ ${NOVA_STATUS} -eq 4 ] || { echo "nova服务启动失败,正在退出...";sleep 3;exit 1; } && echo "nova服务启动成功" && sleep 3
}

#安装并配置neutron网络服务
function install-neutron {
#创建数据库并授权
mysql -e "CREATE DATABASE neutron;" && \
mysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';" && \
mysql -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';" && \
mysql -e "show databases;" | grep neutron || { echo "neutron数据库创建失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; } && \
echo "neutron创库授权完成" && sleep 3
#neutron服务注册
source admin-openrc.sh && expect <<EOF
set timeout 10
spawn openstack user create --domain default --password-prompt neutron
expect {
"User Password:" { send "NEUTRON_PASS\n";exp_continue }
"Repeat User Password:" { send "NEUTRON_PASS\n" }
}
EOF
openstack role add --project service --user neutron admin
openstack service create --name neutron --description "OpenStack Networking" network
openstack endpoint create --region RegionOne network public http://openstack-controller1:9696
openstack endpoint create --region RegionOne network internal http://openstack-controller1:9696
openstack endpoint create --region RegionOne network admin http://openstack-controller1:9696
source admin-openrc.sh && NEUTRON_ENDPOINTS=`openstack endpoint list | grep "neutron" | wc -l`
[ ${NEUTRON_ENDPOINTS} -eq 3 ] || { echo "neutron服务注册失败,无法继续进行安装和配置,正在退出...";sleep 3;exit 1; } && \
echo "neutron服务注册完成" && sleep 3
#配置neutron服务
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
cp /etc/neutron/neutron.conf{,.bak} && wget -O /opt/neutron.conf http://www.qsyjsmy.com/testdir/neutron.conf && \
cat /opt/neutron.conf > /etc/neutron/neutron.conf
#配置Modular Layer2
cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak} && wget -O /opt/ml2_conf.ini http://www.qsyjsmy.com/testdir/ml2_conf.ini && \
cat /opt/ml2_conf.ini > /etc/neutron/plugins/ml2/ml2_conf.ini
#配置Linuxbridge代理
cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak} && \
wget -O /opt/linuxbridge_agent.ini http://www.qsyjsmy.com/testdir/linuxbridge_agent.ini && \
cat /opt/linuxbridge_agent.ini > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
#添加内核参数
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
#配置DHCP代理
cp /etc/neutron/dhcp_agent.ini{,.bak} && wget -O /opt/dhcp_agent.ini http://www.qsyjsmy.com/testdir/dhcp_agent.ini && \
cat /opt/dhcp_agent.ini > /etc/neutron/dhcp_agent.ini
#配置元数据代理
cp /etc/neutron/metadata_agent.ini{,.bak} && wget -O /opt/metadata_agent.ini http://www.qsyjsmy.com/testdir/metadata_agent.ini && \
cat /opt/metadata_agent.ini > /etc/neutron/metadata_agent.ini
#创建软链接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
#初始化neutron数据库
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" \
neutron >> /tmp/neutron-database-status.txt;sleep 3
grep "OK" /tmp/neutron-database-status.txt || { echo "初始化neutron数据库失败,正在退出...";sleep 3;exit 1; } && \
echo "neutron数据库初始化成功" && sleep 3
#重启nova-api服务
systemctl restart openstack-nova-api.service;sleep 3
#启动neutron服务
systemctl enable --now neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
sleep 3
systemctl status neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service \
&> /dev/null || { echo "neutron服务运行异常,正在退出...";sleep 3;exit 1; } && echo "neutron服务运行正常" && sleep 3
#neutron控制端验证服务是否注册成功
source admin-openrc.sh && NEUTRON_STATUS=`openstack network agent list | grep controller1 | awk -F"[|]|" '{print $6}'`
for i in ${NEUTRON_STATUS}
do
[ ${i} = ":-)" ] || { echo "neutron服务注册异常,正在退出...";exit 1; } && sleep 1
done
echo "neutron服务注册成功"
}

#创建桥接网络
function create-briage-network {
source admin-openrc.sh
openstack network create --share --external --provider-physical-network external --provider-network-type flat external-net
openstack network list | grep "external-net" || \
{ echo "外部网络创建失败,正在退出...";sleep 3;exit 1; } && echo "外部网络创建成功" && sleep 5
openstack subnet create --network external-net --allocation-pool start=172.31.7.51,end=172.31.7.100 --dns-nameserver 223.5.5.5 \
--gateway 172.31.0.2 --subnet-range 172.31.0.0/21 external-sub
openstack subnet list | grep "external-sub" || \
{ echo "子网创建失败,正在退出...";sleep 3;exit 1; } && echo "子网创建成功" && sleep 120
brctl show | grep eth0 || \
{ echo "网卡桥接失败,正在退出...";sleep 3;exit 1; } && echo "网卡桥接成功" && sleep 3
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
openstack flavor list | grep "m1.nano" || \
{ echo "实例类型创建失败,正在退出...";sleep 3;exit 1; } && echo "实例类型创建成功" && sleep 3
[ -f /root/.ssh/id_rsa ] || expect <<EOF
set timeout 10
spawn ssh-keygen -q -N ""
expect {
"/root/.ssh/id_rsa" { send "\n" }
}
expect eof
EOF
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
}

#安装配置管理服务Horizon
function install-horizon {
yum install openstack-dashboard -y
cp /etc/openstack-dashboard/local_settings{,.bak} && wget -O /opt/local_settings http://www.qsyjsmy.com/testdir/local_settings && \
cat /opt/local_settings > /etc/openstack-dashboard/local_settings
sed -i "/WSGISocketPrefix run\/wsgi/a WSGIApplicationGroup %{GLOBAL}" /etc/httpd/conf.d/openstack-dashboard.conf
#重启Apache和memcached服务
systemctl restart httpd.service memcached.service;sleep 3
systemctl status httpd.service memcached.service &> /dev/null || \
{ echo "Apache或memcached服务运行异常,正在退出...";sleep 3;exit 1; } && echo "Apache或memcached服务运行正常" && sleep 3
}

setup-hosts
disable-firewalld-seliunx
setup-aliyun-yum
install-software
setup-timedate
install-train-yum
install-openstack-client
install-openstack-selinux
install-mysql
install-rabbitmq
install-memcached
install-keystone
install-glance
install-placement
install-nova
install-neutron
create-briage-network
install-horizon
echo "OpenStack控制节点安装部署成功!!!"
举报

相关推荐

0 条评论