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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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-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-08-03 14:44:02 -05:00
|
|
|
"qemu.x86_64"
|
2023-08-15 11:23:29 -05:00
|
|
|
"virtualbox-iso.x86_64",
|
|
|
|
|
"vmware-iso.x86_64"
|
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)
|
|
|
|
|
sed -e f's#@@BOX@@#file:///home/greg/src/vms/vms/{box}#' -e f's/@@BOX_NAME@@/{p.name}/' Vagrantfile.in > Vagrantfile
|
2023-08-15 11:23:29 -05:00
|
|
|
vagrant box add @(box) --name @(p.name)
|
|
|
|
|
if str(p.parent.name) in ["virtualbox", "libvirt", "vmware"]:
|
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
|
|
|
|
|
rm -rf .vagrant
|
2023-08-03 14:44:02 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
main()
|