启动管理vm虚拟机

# /usr/bin/python3
'''
# /usr/bin/python3
'''
#命令管理虚拟机 list, running list, start,stop
https://askubuntu.com/questions/445284/how-to-start-a-virtualbox-machine-via-command-line-without-gui
vboxmanage list vms
vboxmanage startvm "k8s-node1" --type headless
vboxmanage controlvm "k8s-node1" poweroff
'''

import subprocess
import sys

def rep(vm):
    return str(vm).strip().split()[0].replace('"','')

def exec(cmd):
    return str(subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0], "UTF-8").split("\n")

def exec_single(cmd):
    return subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]

# get vm list
def get_vm_list():
    try:
        vm_list = exec(["/usr/bin/vboxmanage", "list", "vms"])
        if len(vm_list) == 0:
            sys.exit(2)
        return vm_list,None
    except Exception as e:
         return [],e

#get running vm list
def get_running_vms():
    vm_list = []
    try:
        vm_list = exec(["/usr/bin/vboxmanage", "list", "runningvms"])
        if len(vm_list) == 0:
            sys.exit(2)
        return vm_list,None
    except Exception as e:
        return [],e

def start_vms():
    try:
        vm_list,err1 = get_vm_list()
        if err1 != None:
            print(f"get running vm list failed:{err1.__str__()}")
            sys.exit(2)
        running_vm_list,err2 = get_running_vms()
        if err2 != None:
            print(f"get running vm list failed:{err2.__str__()}")
            sys.exit(2)

        for vm in vm_list:
            if vm.__contains__("harbor-server") or str(vm).strip() == "":
                continue
            if vm in running_vm_list:
                print(f"【{vm}\tis already started")
                continue
            name = str(vm).strip().split()[0].replace('"','')
            commad = exec_single(["/usr/bin/vboxmanage","startvm", name,"--type","headless"])
            print(str(f"{str(commad).strip()}"))
    except Exception as e:
        print(e.__str__())



def stop_vms():
    try:
        running_vm_list,err = get_running_vms()
        if err != None:
            print(f"get running vm list failed:{err.__str__()}")
            sys.exit(2)
        for vm in running_vm_list:
            if str(vm).strip() == "":
                continue
            print(str(f"Stop【{vm}】"))
            name = rep(vm)
            command = exec_single(["/usr/bin/vboxmanage","controlvm", name,"poweroff"])
            print(str(f"Stop【{vm}】:{str(command).strip()}"))
    except Exception as e:
        print(e)

def start_vm(vm):
    try:
        commad = exec_single(["/usr/bin/vboxmanage","startvm", vm,"--type","headless"])
        print(str(f"{str(commad).strip()}"))
    except Exception as e:
        print(e.__str__())

def stop_vm(vm):
    try:
        print(str(f"Stop【{vm}】"))
        command = exec_single(["/usr/bin/vboxmanage","controlvm", vm,"poweroff"])
        print(str(f"Stop【{vm}】:{str(command).strip()}"))
    except Exception as e:
        print(e)

def print_running_vms():
    run_list,err = get_running_vms()
    if err != None:
        print(f"get running vm list failed:{err.__str__()}")
        sys.exit(2)
    for vm in run_list:
        if str(vm).strip() == "":
            continue
        print(f"{vm}")

def print_vms_list():
    run_list,err = get_vm_list()
    if err != None:
        print(f"get running vm list failed:{err.__str__()}")
        sys.exit(2)
    for vm in run_list:
        if str(vm).strip() == "":
            continue
        print(f"{vm}")

def restart(vms):
    vms = vms.split(";")
    for vm in vms:
        if vm == "":
            continue
        if in_vm_list(vm):
            if in_running(vm):
                stop_vm(vm)
            start_vm(vm)
        else:
            print(f"【{vm}】not in vms list")


def in_running(vm_name):
    running_vm_list,err = get_running_vms()
    if err != None:
        return  False
    for vm in running_vm_list:
        if str(vm).strip() == "":
            continue
        name = rep(vm)
        if vm_name == name:
            return True
    return False

def in_vm_list(vm_name):
    running_vm_list,err = get_vm_list()
    if err != None:
        return  False
    for vm in running_vm_list:
        if str(vm).strip() == "":
            continue
        name = rep(vm)
        if name == vm_name:
            return True
    return False


if __name__ == "__main__":

    if len(sys.argv) < 2:
        print(f"usage: ./{sys.argv[0]} [list|running|start|stop]")
        sys.exit(0)
    else:
        if str(sys.argv[1]) == "":
            print(f"usage: ./{sys.argv[0]} [list|running|start|stop]")
            sys.exit(0)
        else:
            flag = str(sys.argv[1]).strip()
            if flag == "list":
                print_vms_list()
            elif flag == "running":
                print_running_vms()
            elif flag == "start":
                start_vms()
            elif flag == "stop":
                stop_vms()
            elif flag == "restart":
                restart(sys.argv[2])
            else:
                print(f"usage: .{sys.argv[0]} [list|running|start|stop|]")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值