mirror of
https://github.com/gryf/boxpy.git
synced 2025-12-19 13:37:58 +01:00
Added rebuild command.
This commit is contained in:
79
box.py
79
box.py
@@ -16,7 +16,7 @@ META_DATA_TPL = string.Template('''\
|
|||||||
instance-id: $instance_id
|
instance-id: $instance_id
|
||||||
local-hostname: $vmhostname
|
local-hostname: $vmhostname
|
||||||
''')
|
''')
|
||||||
|
UBUNTU_VERSION = '20.04'
|
||||||
USER_DATA_TPL = string.Template('''\
|
USER_DATA_TPL = string.Template('''\
|
||||||
#cloud-config
|
#cloud-config
|
||||||
users:
|
users:
|
||||||
@@ -519,7 +519,46 @@ class VMList:
|
|||||||
subcommand = 'runningvms' if self.running else 'vms'
|
subcommand = 'runningvms' if self.running else 'vms'
|
||||||
long_list = '-l' if self.long else '-s'
|
long_list = '-l' if self.long else '-s'
|
||||||
|
|
||||||
subprocess.call(['vboxmanage', 'list', subcommand, long_list])
|
|
||||||
|
class VMRebuild:
|
||||||
|
def __init__(self, args):
|
||||||
|
self.vbox = VBoxManage(args.name)
|
||||||
|
|
||||||
|
self.memory = args.memory
|
||||||
|
self.cpus = args.cpus
|
||||||
|
self.key = args.key
|
||||||
|
self.size = args.size
|
||||||
|
self.ubuntu_version = args.version
|
||||||
|
self.version = args.version
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
# get the vm infos
|
||||||
|
self.vbox.poweroff(silent=True)
|
||||||
|
|
||||||
|
disk_path = self.vbox.get_disk_path()
|
||||||
|
|
||||||
|
if not disk_path:
|
||||||
|
# no disks, return
|
||||||
|
return
|
||||||
|
|
||||||
|
vm_info = self.vbox.get_vm_info()
|
||||||
|
|
||||||
|
cpus = self.cpus or vm_info['cpus']
|
||||||
|
memory = self.memory or vm_info['memory']
|
||||||
|
|
||||||
|
if not self.size:
|
||||||
|
disk_size = self.vbox.get_media_size(disk_path)
|
||||||
|
else:
|
||||||
|
disk_size = self.size
|
||||||
|
|
||||||
|
args = argparse.Namespace()
|
||||||
|
args.disk_size = disk_size
|
||||||
|
args.memory = memory
|
||||||
|
args.cpus = cpus
|
||||||
|
args.key = self.key
|
||||||
|
args.version = self.ubuntu_version
|
||||||
|
VMDestroy(args).run()
|
||||||
|
VMCreate(args).run()
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@@ -533,20 +572,21 @@ def main():
|
|||||||
'drive and run')
|
'drive and run')
|
||||||
create.set_defaults(func=VMCreate)
|
create.set_defaults(func=VMCreate)
|
||||||
create.add_argument('name', help='name of the VM')
|
create.add_argument('name', help='name of the VM')
|
||||||
create.add_argument('-m', '--memory', default=12288, type=int,
|
|
||||||
help="amount of memory in Megabytes, default 12GB")
|
|
||||||
create.add_argument('-c', '--cpus', default=6, type=int,
|
create.add_argument('-c', '--cpus', default=6, type=int,
|
||||||
help="amount of CPUs to be configured. Default 6.")
|
help="amount of CPUs to be configured. Default 6.")
|
||||||
create.add_argument('-d', '--disk-size', default=32768, type=int,
|
create.add_argument('-d', '--disk-size', default=32768, type=int,
|
||||||
help="disk size to be expanded to. By default to 32GB")
|
help="disk size to be expanded to. By default to 32GB")
|
||||||
create.add_argument('-v', '--version', default="18.04",
|
|
||||||
help="Ubuntu server version. Default 18.04")
|
|
||||||
create.add_argument('-n', '--hostname', default="ubuntu",
|
|
||||||
help="VM hostname. Default ubuntu")
|
|
||||||
create.add_argument('-k', '--key',
|
create.add_argument('-k', '--key',
|
||||||
default=os.path.expanduser("~/.ssh/id_rsa"),
|
default=os.path.expanduser("~/.ssh/id_rsa"),
|
||||||
help="SSH key to be add to the config drive. Default "
|
help="SSH key to be add to the config drive. Default "
|
||||||
"~/.ssh/id_rsa")
|
"~/.ssh/id_rsa")
|
||||||
|
create.add_argument('-m', '--memory', default=12288, type=int,
|
||||||
|
help="amount of memory in Megabytes, default 12GB")
|
||||||
|
create.add_argument('-n', '--hostname', default="ubuntu",
|
||||||
|
help="VM hostname. Default ubuntu")
|
||||||
|
create.add_argument('-v', '--version', default=UBUNTU_VERSION,
|
||||||
|
help=f"Ubuntu server version. Default "
|
||||||
|
f"{UBUNTU_VERSION}")
|
||||||
|
|
||||||
destroy = subparsers.add_parser('destroy', help='destroy VM')
|
destroy = subparsers.add_parser('destroy', help='destroy VM')
|
||||||
destroy.add_argument('name', help='name or UUID of the VM')
|
destroy.add_argument('name', help='name or UUID of the VM')
|
||||||
@@ -560,6 +600,29 @@ def main():
|
|||||||
help='show only running VMs')
|
help='show only running VMs')
|
||||||
list_vms.set_defaults(func=VMList)
|
list_vms.set_defaults(func=VMList)
|
||||||
|
|
||||||
|
rebuild = subparsers.add_parser('rebuild', help='Rebuild VM')
|
||||||
|
rebuild.add_argument('name', help='name or UUID of the VM')
|
||||||
|
rebuild.add_argument('-c', '--cpus', type=int,
|
||||||
|
help="amount of CPUs to be configured. If not "
|
||||||
|
"provided, it will be the same as in rebuilding VM.")
|
||||||
|
rebuild.add_argument('-d', '--disk-size',
|
||||||
|
help="disk size to be expanded to. If not provided, "
|
||||||
|
"it will be the same as the existing image.")
|
||||||
|
rebuild.add_argument('-k', '--key',
|
||||||
|
default=os.path.expanduser("~/.ssh/id_rsa"),
|
||||||
|
help="SSH key to be add to the config drive. Default "
|
||||||
|
"~/.ssh/id_rsa")
|
||||||
|
rebuild.add_argument('-m', '--memory', type=int,
|
||||||
|
help="amount of memory in Megabytes, if not provided "
|
||||||
|
"it will be taken form rebuilding machine.")
|
||||||
|
rebuild.add_argument('-n', '--hostname', default="ubuntu",
|
||||||
|
help="VM hostname. Default ubuntu")
|
||||||
|
rebuild.add_argument('-v', '--version', default=UBUNTU_VERSION,
|
||||||
|
help=f"Ubuntu server version. Default "
|
||||||
|
f"{UBUNTU_VERSION}")
|
||||||
|
rebuild.set_defaults(func=VMRebuild)
|
||||||
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user