cat createServer.sh
#/bin/bash
help() {
cat <<EOF
# Start openstack cloud hosts in batches
Usage:
./createServer.sh <OPTION> server..
Options:
-u, --user-data Use a custom template to create a cloud host.
Note: The long format cannot be used because the long format contains the "-" character
-i, --image Enter image name. For example: CentOS7 , Ubuntu20 ...
-n, --network Enter the network name. If there are multiple networks, separate them with commas. For example: selfnetwork,provider
-f, --flavor Enter the flavor name. For example: standard(disk 15G, RAM 4G, VCPU 4), luxury(disk 20G, RAM 8G, VCPU 8)
Example:
# Multiple single network
./createServer.sh --flavor standard --image CentOS7 --network selfnetwork test1 test2
# Custom simulation host. The value of -u must be combined with the parameter
./createServer.sh -u./cloud-config-centos.txt --flavor standard --image CentOS7 --network selfnetwork test1 test2
# Multiple stations and multiple networks
./createServer.sh --flavor standard --image CentOS7 --network selfnetwork,provider test1 test2
EOF
}
# Define help information
if [[ $# == 0 || "$1" == "-h" || "$1" == "--help" || "$1" == "help" ]]; then
help
exit 1
fi
# Set script parameter information
args=$(getopt -l "flavor:,image:,network:,server:,user-data::" -o "f:i:n:s:u::" -- "$@")
eval set -- "$args"
while [ $# -ge 1 ]; do
case $1 in
-f|--flavor)
flavor="$2"
shift
;;
-i|--image)
image="$2"
shift
;;
-n|--network)
network="`echo $2 | sed 's/,/ --network /g'`"
shift
;;
-u|--user-data)
Userdata="$2"
shift
;;
--)
shift
name=$*
if [[ -z $name ]];then
exit
fi
;;
esac
shift
done
# Do you agree to create servers
read -p "请确认是否需要创建 $name 服务器[yes,no]: " val
if [[ $val == 'yes' || $val == 'y' ]]; then
# Create servers
source admin-openrc
for i in $name; do
echo "Create server $i..."
if [[ ! -z $Userdata ]];then
openstack server create --user-data $Userdata --flavor $flavor --network $network --image $image --security-group all $i &> /dev/null
# echo openstack server create --user-data $Userdata --flavor $flavor --network $network --image $image --security-group all $i
else
openstack server create --flavor $flavor --network $network --image $image --security-group all $i &> /dev/null
fi
done
elif [[ $val == 'no' || $val == 'n' ]]; then
echo '[INFO] exit...'
exit
else
echo '[ERROR] The input format is incorrect, exit...'
exit
fi
# View server creation
echo -e "\033[1;42;33mAll Server Create completed...\033[0m\n"
sleep 20
echo '$ openstack server list'
openstack server list
一键启动云主机
cat startServer.sh
#/bin/bash
help() {
cat <<EOF
# Start openstack cloud hosts in batches
Usage:
./startServer.sh <OPTION> server..
Options:
start: Start the cloud server. Support one-click start, server designated as all.
stop: Shut down cloud server. Support one-click start, server designated as all.
Example:
# Start ceph and k8s cloud server
./startServer.sh start ceph k8s
# Shut down all cloud servers
./startServer.sh stop all
EOF
}
# Define help information
if [[ $# == 0 || "$1" == "-h" || "$1" == "--help" || "$1" == "help" ]]; then
help
exit
fi
source admin-openrc
# View service status information
status_server(){
# Cycle all parameters
for i in $*;do
# The host that loops all parameters
for j in `openstack server list | egrep $i | awk -F'|' '{print $4}'`;do
# The host is not started, return 255
if [[ ! $j == 'ACTIVE' ]];then
return 255
fi
done
done
}
jumpserver(){
echo 'start server jumpserver...'
openstack server start jumpserver &> /dev/null && sleep 30
while true; do
ping -c4 192.168.31.20 &> /dev/null && break
if [ $? -ne 0 ]; then
systemctl restart neutron-dhcp-agent.service neutron-linuxbridge-agent.service
openstack server reboot jumpserver &> /dev/null
sleep 30
fi
done
}
start_server(){
for k in $*;do
eval status_server $k
if [[ $? -ne 255 ]];then
if [[ $k == 'jumpserver' ]];then
ping 192.168.31.20 -c2 &> /dev/null
if [ $? -ne 0 ]; then
openstack server stop jumpserver &> /dev/null && sleep 10
jumpserver
fi
fi
echo "$k server has started..."
# echo -e "\n$ openstack server list"
# openstack server list
# exit
continue
fi
if [[ $k == 'jumpserver' ]];then
jumpserver
elif [[ $k == 'k8s' ]];then
status_server ceph
if [[ $? -eq 255 ]];then
echo -e "[ERROR] The ceph service is not started. Start the ceph host first, then start the k8s host.\n"
exit
fi
echo 'start server k8s...'
for z in `openstack server list | egrep k8s | awk -F'|' '{print $3}'`;do
openstack server start $z &> /dev/null
done
else
echo -e "\nstart server $k..."
for z in `openstack server list | egrep $k | awk -F'|' '{print $3}'`;do
openstack server start $z &> /dev/null
done
fi
sleep 15
echo "$k server has started completed..."
done
echo -e "\n$ openstack server list"
openstack server list
}
stop_server(){
for k in $*;do
if [[ $k == 'ceph' ]];then
status_server k8s
if [[ $? -ne 255 ]];then
echo -e "[ERROR] The k8s service is not shut down. Stop the k8s host first, and then stop the ceph host.\n"
exit
fi
fi
eval status_server $k
if [[ $? -ne 255 ]];then
echo -e "stop server $k..."
for z in `openstack server list | egrep $k | awk -F'|' '{print $3}'`;do
openstack server stop $z &> /dev/null
done
fi
echo "$k server has stoped completed..."
done
sleep 10
echo -e "\n$ openstack server list"
openstack server list
}
if [[ $1 == 'start' ]];then
shift
if [[ $1 == 'all' ]];then
start_server jumpserver ceph debian k8s
exit
fi
eval start_server $*
elif [[ $1 == 'stop' ]];then
shift
if [[ $1 == 'all' ]];then
stop_server k8s debian ceph jumpserver
exit
fi
eval stop_server $*
else
echo -e "[ERROR] Syntax error, view help through -h option\n"
exit
fi
禁用安全端口
cat disablePort.sh
#!/bin/bash
source ~/admin-openrc
UserHelp() {
cat <<EOF
# Disable the security rules and ports of the cloud host
Usage:
./disablePort.sh <network> server..
Options:
<network> Enter the network name. For example: selfnetwork provider
Example:
./disablePort.sh selfnetwork test01 test02
EOF
}
if [[ $1 == 'selfnetwork' || $1 == 'provider' ]]; then
network=$1
shift
for i in $*; do
# 根据主机名,查IP地址
# "/${i}/"'{print $5}' 两者之间不能有空格,如果过滤项是变量请使用双引号
# '{sub("^ *","");sub(" *$","");print $2}' 显示第二项并删除前后空格
IP_Field=`openstack server list | awk -F"|" "/ $i /"'{print $5}'`
if [[ -z $IP_Field ]];then
echo "$i Host does not exist"
continue
fi
for j in $IP_Field;do
if [[ $j =~ "$network" ]];then
IP=`echo $j | awk -F"[,;=]" '{sub("^ *","");sub(" *$","");print $2}'`
# echo $IP
fi
done
# 根据IP地址,查port id
if [[ ! -z $IP ]];then
Port_id=`openstack port list | awk "/'${IP}'/"'{print $2}'`
# echo $Port_id
fi
# 禁用安全规则和端口规格
openstack port set --no-security-group --disable-port-security ${Port_id}
echo "$i host set complete."
done
elif [[ $1 == '--help' || $1 == '-h' || $# == 0 ]];then
UserHelp
else
echo -e "Wrong option\n\n"
UserHelp
fi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具