zoukankan      html  css  js  c++  java
  • openstack常用shell脚本

    批量创建openstack云主机

    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 "33[1;42;33mAll Server Create completed...33[0m
    "
    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 "
    $ 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.
    "
                    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 "
    start 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 "
    $ 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.
    "
                    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 "
    $ 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
    "
        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
    
    "
      UserHelp
    
    fi
    
  • 相关阅读:
    LeetCode Binary Tree Inorder Traversal
    LeetCode Populating Next Right Pointers in Each Node
    LeetCode Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode Reverse Linked List II
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Pascal's Triangle
    Palindrome Construct Binary Tree from Preorder and Inorder Traversal
    Pascal's Triangle II
    LeetCode Word Ladder
    LeetCode Binary Tree Zigzag Level Order Traversal
  • 原文地址:https://www.cnblogs.com/mycloudedu/p/14998018.html
Copyright © 2011-2022 走看看