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()
|