zoukankan      html  css  js  c++  java
  • openstack- 自动化创建虚机脚本

    工作中需要经常创建虚机、 网络、 检查虚机网络等操作,这样需要多次执行的操作,而且命令比较多使用起来需要查看命令帮助的操作,或者需要多次执行的命令我们可以脚本化

    这里我写了一个shell 脚本,

    1. 创建一个网络               (需要自己去填写固定的网络名,网段信息)

    2. 创建一个虚机               (更加自己的需求选择网络、镜像、flavor、az域 来创建虚机)

    3. 检查虚机的网络             (这个根据环境选择,检查创建的虚机网络的连通性)

    4.快速创建一个虚机             (根据提前的自定义的网络虚机名镜像来创建虚机,不需要我们选择)

    5.退出

    #!/bin/bash
    while :
    do
    echo -e "################################ "
    echo -e "TEST YK SHELL Script "
    echo -e "################################ "

    #VM_NAME=Test-vm-1234
    #NET_NAME=Test-net-yk
    #SUBNET_NAME=Test-subnet-yk
    #NETWORK="199.199.1.0/24"
    #IMAGE_NAME=TestVM

    source /root/openrc
    cat<<EOF
        1. create new network
        2. create new vm
        3. check vm network
    4. quickly create testvm
        q. exit
    EOF

    read -p "Please enter an option:" volume
    case $volume in
    1) echo "create new network"
    openstack network list
    echo -e "--------------------Network name cannot be repeated ---------------- "
    read -p "Please enter an network name:" NET_NAME
    read -p "Please enter an subnet name:" SUBNET_NAME
    read -p "Please enter an nework: eg:192.168.1.0/24:" NETWORK
    echo -e "-----------Create Test Network------------ "
    source /root/openrc
    Net_id=$(openstack network list | grep $NET_NAME | awk -F "|" '{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )

    #openstack network list | grep $NET_NAME | awk -F "|" '{print $2}' > /dev/null 2>&1
    openstack network list | grep $NET_NAME >> /dev/null 2>&1
    if [ $? == 0 ] ; then
    # openstack network delete $Net_id
    # openstack network create $NET_NAME
    # neutron subnet-create --name $SUBNET_NAME $NET_NAME $NETWORK
    # echo "create network success "
    openstack network list | grep $NET_NAME
    echo -e "-------------33[42m $NET_NAME33[0m 33[31m network already exists 33[0m------------- "
    Net_id=$(openstack network list | grep $NET_NAME | awk -F "|" '{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )

    else
    openstack network create $NET_NAME
    neutron subnet-create --name $SUBNET_NAME $NET_NAME $NETWORK
    if [ $? -ne 0 ]; then
    openstack network list
    echo -e "-------------- 33[31m create network failed 33[0m ----------------- "
    Net_id=$(openstack network list | grep $NET_NAME | awk -F "|" '{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )
    openstack network delete $Net_id
    openstack network list
    echo -e "--------------- Delete failed network --------------------- "
    else
    # openstack subnet create $SUBNET_NAME --network $NET_NAME --subnet-range $NETWORK
    echo -e "-------------33[32m create network success 33[0m------------ "
    fi
    fi


    ;;
    2)
    echo -e "-----------Create VM------------ "
    source /root/openrc

    read -p "Please enter an VM name:" VM_NAME
    openstack server list | awk -F "|" '{print $3}'| sed 's/ //g' |grep -x $VM_NAME > /dev/null 2>&1
    if [ $? == 0 ]
    then
    openstack server list | grep $VM_NAME
    echo -e "----------------33[31m $VM_NAME VM already exists 33[0m------------- "

    else


    echo -e "Create VM Please enter the relevant information "
    while :
    do
    echo -e "Please enter an VM use flavor: "
    openstack flavor list
    read -p "Please enter an VM use flavor ID/NAME:" FLAVOR_NAME
    FLAVOR=$(openstack flavor list | awk -F "|" 'NR>2{print $2,$3}' )
    flag=1
    for a in $FLAVOR
    do
    if [ "$FLAVOR_NAME" = "$a" ]; then
    flag=0
    break;
    fi
    done

    if [ $flag -ne 0 ];then
    echo "There is no flavor $FLAVOR_NAME ,Please select the correct one flavor name/id "
    else
    break
    fi

    done

    while :
    do
    echo -e "Please enter an VM use Network: "
    openstack network list
    read -p "Please enter an VM use Network ID/NAME:" NETWORK_NAME
    NETWORK=$(openstack network list | awk -F "|" 'NR>2{print $2,$3}' )
    flag=1
    for b in $NETWORK
    do
    if [ "$NETWORK_NAME" = "$b" ]; then
    flag=0
    break;
    fi
    done

    if [ $flag -ne 0 ];then
    echo "There is no network $NETWORK ,Please select the correct one network name/id "
    else
    break
    fi
    done

    while :
    do
    echo -e "Please enter an VM use Image: "
    openstack image list
    read -p "Please enter an VM use Image ID/NAME:" IMAGE_NAME
    IMAGE=$(openstack image list | awk -F "|" 'NR>2{print $2,$3}' )
    flag=1
    for c in $IMAGE
    do
    if [ "$IMAGE_NAME" = "$c" ]; then
    flag=0
    break;
    fi
    done

    if [ $flag -ne 0 ];then
    echo "There is no image $IMAGE ,Please select the correct one image name/id "
    else
    break
    fi
    done

    while :
    do
    echo -e "Please enter an VM use AZ Zone:"
    openstack availability zone list | grep -vE 'internal|test-az|nova'
    read -p " Please enter an VM use AZ Zone Name:" AZ_NAME
    AZ=$(openstack availability zone list | grep -vE 'internal|test-az|nova' |awk -F "|" 'NR>2{print $2}')
    flag=1
    for d in $AZ
    do
    if [ "$AZ_NAME" = "$d" ]; then
    flag=0
    break
    fi
    done

    if [ $flag -ne 0 ];then
    echo -e "There is no AZ $AZ ,Please select the correct one az name "
    else
    break
    fi
    done


    echo -e "-----------------Create VM------------------- "
    openstack server create --image $IMAGE_NAME --flavor $FLAVOR_NAME --nic net-id=$NETWORK_NAME --availability-zone $AZ_NAME $VM_NAME
    if [ $? -ne 0 ]; then
    echo -e " 33[31m Create VM Failed 33[0m"
    else
    echo -e "-------------33[32m Create VM Success 33[0m------------ "
    fi
    sleep 10
    echo -e "---------------Check VM Status----------------- "
    openstack server list | grep $VM_NAME
    fi

    sleep 10
    ;;
    3)
    source /root/openrc
    echo -e "-----------------Check VM Networking----------------- "
    openstack server list
    read -p "Please Enter VM ID/NAME:" VM_ID
    openstack server list | grep $VM_ID >> /dev/null 2>&1

    if [ $? == 0 ] ; then
    VM_IP=`openstack server list | grep $VM_ID | awk -F "|" '{print $5}' | sed 's/ //g' | awk -F "=" '{print $2}'`
    VM_NETWORK=`openstack server list | grep $VM_ID | awk -F "|" '{print $5}' | sed 's/ //g' | awk -F "=" '{print $1}'`
    Net_id=$(openstack network list | grep $VM_NETWORK | awk -F "|" '{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )
    IP_NETNS=`ip netns list | grep $Net_id`
    echo $VM_IP
    echo $IP_NETNS
    ip netns exec $IP_NETNS ping -c 3 $VM_IP > /dev/null 2>&1
    if [ $? == 0 ]
    then
    ip netns exec $IP_NETNS ping -c 3 $VM_IP
    echo -e "-------------33[32m Check VM networking is OK 33[0m------------- "
    else
    ip netns exec $IP_NETNS ping -c 3 $VM_IP
    echo -e "-------------33[31m Please Check VM network or Check VM Status 33[0m------------- "
    fi
    else
    echo -e "-------33[31m Please Check If The VM Exists 33[0m-------- "

    fi

    ;;


    4)
    echo -e "--------Quickly Create Test VM --------- "
    VM_NAME=Lab-Test-VM
    NET_NAME=Lab-Test-net
    SUBNET_NAME=Lab-Test-subnet
    NETWORK="199.199.1.0/24"
    IMAGE_NAME=TestVM

    source /root/openrc
    #####Create network#####
    source /root/openrc
    Net_id=$(openstack network list | grep $NET_NAME | awk -F "|" '{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )
    #openstack network list | grep $NET_NAME | awk -F "|" '{print $2}' > /dev/null 2>&1
    openstack network list | grep $NET_NAME >> /dev/null 2>&1
    if [ $? == 0 ] ; then
    # openstack network delete $Net_id
    # openstack network create $NET_NAME
    # neutron subnet-create --name $SUBNET_NAME $NET_NAME $NETWORK
    # echo "create network success "
    openstack network list | grep $NET_NAME
    echo -e "-------------33[42m $NET_NAME33[0m 33[31m network already exists 33[0m------------- "
    Net_id=$(openstack network list | grep $NET_NAME | awk -F "|" '{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )

    else
    openstack network create $NET_NAME
    neutron subnet-create --name $SUBNET_NAME $NET_NAME $NETWORK
    if [ $? -ne 0 ]; then
    openstack network list
    echo -e "-------------- 33[31m create network failed 33[0m ----------------- "
    Net_id=$(openstack network list | grep $NET_NAME | awk -F "|" '{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )
    openstack network delete $Net_id
    openstack network list
    echo -e "--------------- Delete failed network --------------------- "
    else
    # openstack subnet create $SUBNET_NAME --network $NET_NAME --subnet-range $NETWORK
    echo -e "-------------33[32m create network success 33[0m------------ "
    fi
    fi


    echo -e "-----------Create VM------------ "
    ####Create VM#####
    source /root/openrc
    AZ_ZONE=`openstack availability zone list | grep available |grep -vE '(internal|test-az)' | awk -F "|" 'NR==1{print $2}' | sed -e 's/ //g'` > /dev/null 2>&1
    Net_id=$(openstack network list | grep $NET_NAME | awk -F "|" 'NR=1{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )

    openstack server list | grep $VM_NAME > /dev/null 2>&1
    if [ $? == 0 ]
    then
    openstack server list | grep $VM_NAME
    VM_ID=`openstack server show $VM_NAME |grep -w id | awk -F "|" '{print $3 }' | sed 's/ //g'`
    echo -e "----------------33[31m $VM_NAME VM already exists 33[0m------------- "

    else
    VM_ID=`openstack server create --image $IMAGE_NAME --flavor 3 --nic net-id=$Net_id --availability-zone $AZ_ZONE $VM_NAME | grep -w id | awk -F "|" '{print $3 }' | sed 's/ //g'i`
    openstack server show $VM_ID
    echo -e "----------------33[32m Create Test VM Success 33[0m------------- "
    fi

    sleep 20

    echo -e "-----------------Check VM Networking----------------- "
    source /root/openrc
    VM_IP=`openstack server list | grep $VM_ID | awk -F "|" '{print $5}' | sed 's/ //g' | awk -F "=" '{print $2}'`
    Net_id=$(openstack network list | grep $NET_NAME | awk -F "|" 'NR=1{print $2}' | tr '/n' ' ' | sed -e 's/^ //g' )
    IP_NETNS=`ip netns list | grep $Net_id`
    openstack server list | grep $VM_NAME
    echo $VM_IP
    echo $Net_id
    ip netns exec $IP_NETNS ping -c 3 $VM_IP > /dev/null 2>&1
    if [ $? == 0 ]
    then
    ip netns exec $IP_NETNS ping -c 3 $VM_IP
    echo -e "-------------33[32m Check VM networking is OK 33[0m------------- "

    else
    ip netns exec $IP_NETNS ping -c 3 $VM_IP
    echo -e "-------------33[31m Please Check VM network 33[0m------------- "

    fi
    ;;


    q)
    exit 0
    ;;

    *)

    echo -e " Input error ,Please Check "
    ;;


    esac


    done

  • 相关阅读:
    软件工程实践总结作业
    SDN第4次上机作业
    SDN第四次作业
    SDN第三次上机作业
    SDN第三次作业
    SDN第二次上机作业
    SDN第一次上机作业
    免费自动生成字幕工具推荐,啃生肉啊(6.12更新)
    博客园美化,自定义你的博客,css+html (iframe)
    找质数、素数_算法优化(C++)
  • 原文地址:https://www.cnblogs.com/yk0625/p/14078432.html
Copyright © 2011-2022 走看看