Files
vms/test.xsh
T

84 lines
2.3 KiB
Plaintext
Raw Normal View History

2023-08-03 14:44:02 -05:00
#!env xonsh
# vim: set ft=xonsh:
import argparse
import pathlib
import re
2023-08-10 14:10:58 -05:00
import sys
2023-08-03 14:44:02 -05:00
import time
2023-12-07 12:15:48 -06:00
from shutil import rmtree
2023-08-03 14:44:02 -05:00
def get_vagrant_provider(provider):
"Vagrant provider is not always the same as Packer provider"
if provider.startswith("qemu"):
return "libvirt"
elif provider.startswith("virtualbox"):
return "virtualbox"
2023-08-15 11:23:29 -05:00
elif provider.startswith("vmware"):
return "vmware"
2023-08-25 11:51:45 -05:00
elif provider.startswith("hyperv"):
return "hyperv"
else:
return provider
2023-08-03 14:44:02 -05:00
def get_providers():
"List of providers as defined in sources/"
2023-08-10 14:10:58 -05:00
providers: set[str] = {
2023-11-27 21:00:35 -06:00
"qemu.amd64"
"virtualbox-iso.amd64",
"vmware-iso.amd64"
2023-08-10 14:10:58 -05:00
}
2023-08-03 14:44:02 -05:00
return providers
2023-08-10 14:10:58 -05:00
def get_parser(args, unsupported=set()):
2023-08-03 15:46:44 -05:00
parser = argparse.ArgumentParser("Builder")
parser.add_argument("--headless", action="store_true")
parser.add_argument("--upload", action="store_true")
2023-08-10 14:10:58 -05:00
parser.add_argument("--provider", action="append")
2023-08-03 15:46:44 -05:00
parsed = parser.parse_args(args)
opts = {}
if parsed.headless:
2023-08-10 14:10:58 -05:00
opts["headless"] = "headless=true"
2023-08-03 15:46:44 -05:00
else:
opts["headless"] = "headless=false"
if parsed.upload:
opts["upload"] = ""
else:
opts["upload"] = "-except=upload"
2023-08-10 14:10:58 -05:00
if parsed.provider:
opts["providers"] = set(parsed.provider)
else:
opts["providers"] = get_providers()
# Filter providers
opts["providers"] -= unsupported
2023-08-03 15:46:44 -05:00
return opts
2023-08-03 14:44:02 -05:00
def main():
# Equivalent of `set -e` in Bash
2023-08-10 14:10:58 -05:00
#$RAISE_SUBPROC_ERROR = True
2023-08-12 13:54:23 -05:00
for box in g`output/**/*.box`:
p = pathlib.Path(box)
2023-08-25 11:51:45 -05:00
with open("Vagrantfile.in", "r") as fr:
content = fr.read()
2023-12-07 12:15:48 -06:00
content = content.replace("@@BOX@@", p.resolve().as_uri())
2023-08-25 11:51:45 -05:00
content = content.replace("@@BOX_NAME@@", p.name)
with open("Vagrantfile", "w") as fw:
fw.write(content)
2023-08-15 11:23:29 -05:00
vagrant box add @(box) --name @(p.name)
2023-08-25 11:51:45 -05:00
if str(p.parent.name) in ["virtualbox", "libvirt", "vmware", "hyperv"]:
2023-08-22 00:18:02 -05:00
vagrant up --provider @(p.parent.name)
2023-08-12 13:54:23 -05:00
else:
print(f"Now whatcha wanna go and do that for? {box}")
continue
2023-08-10 14:10:58 -05:00
vagrant destroy -f
2023-12-07 12:15:48 -06:00
vag_folder = pathlib.Path(".vagrant")
if vag_folder.exists():
rmtree(vag_folder)
2023-08-03 14:44:02 -05:00
if __name__ == '__main__':
main()