1
0
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:
2021-04-11 18:55:41 +02:00
parent fc0a19bf38
commit b05b9403c4

79
box.py
View File

@@ -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: