mirror of
https://github.com/Rudd-O/ansible-qubes.git
synced 2025-03-01 14:22:33 +01:00
116 lines
4.4 KiB
Python
116 lines
4.4 KiB
Python
import collections
|
|
import copy
|
|
|
|
|
|
def inject_qubes(inject):
|
|
myname = inject["inventory_hostname"]
|
|
akk = collections.OrderedDict()
|
|
all_pcidevs = dict()
|
|
for invhostname in inject["groups"]["all"]:
|
|
if invhostname == myname:
|
|
continue
|
|
hostvars = inject["hostvars"][invhostname]
|
|
if hostvars.get("qubes", {}).get("dom0_vm") == myname:
|
|
akk[invhostname] = copy.deepcopy(hostvars)
|
|
for invhostname, hostvars in akk.items():
|
|
qubes = hostvars["qubes"]
|
|
dominv = qubes["dom0_vm"]
|
|
for dev in qubes.get("pcidevs", []):
|
|
if all_pcidevs.get(dev):
|
|
assert t in akk, (
|
|
"while processing attribute pcidevs of VM %s: "
|
|
"device %s already in use by VM %s"
|
|
) % (
|
|
invhostname,
|
|
dev,
|
|
all_pcidevs[dev],
|
|
)
|
|
all_pcidevs[dev] = invhostname
|
|
for vmitem in ["template_vm", "netvm_vm"]:
|
|
if vmitem == "template_vm":
|
|
if "_template" in hostvars and not "template_vm" in qubes:
|
|
qubes["template_vm"] = hostvars["_template"]
|
|
elif invhostname + "-template" in inject["groups"]:
|
|
qubes["template_vm"] = inject["groups"][invhostname + "-template"][0]
|
|
if vmitem in qubes:
|
|
t = qubes[vmitem]
|
|
if t is None or t.lower() == "none":
|
|
qubes[vmitem[:-3]] = None
|
|
else:
|
|
if t.startswith("sibling(") and t.endswith(")"):
|
|
t = t[len("sibling("):-1]
|
|
dompostfix = dominv.split(".")[1:]
|
|
dompostfix = "." + ".".join(dompostfix) if dompostfix else ""
|
|
t = t + dompostfix
|
|
assert t in akk, (
|
|
"while processing attribute %s of VM %s: "
|
|
"%s not found in VMs of %s: %s"
|
|
) % (
|
|
vmitem,
|
|
invhostname,
|
|
t,
|
|
dominv,
|
|
", ".join(akk)
|
|
)
|
|
qubes[vmitem[:-3]] = t
|
|
del qubes[vmitem]
|
|
enabledservices = []
|
|
disabledservices = []
|
|
defaultservices = []
|
|
for service, status in qubes.get("services", {}).items():
|
|
if status == "default" or status == None:
|
|
defaultservices.append(service)
|
|
elif status == True:
|
|
enabledservices.append(service)
|
|
elif status == False:
|
|
disabledservices.append(service)
|
|
else:
|
|
assert 0, "while processing service %s of VM %s: invalid value %r" % (
|
|
service, invhostname, status
|
|
)
|
|
if enabledservices or disabledservices or defaultservices:
|
|
qubes["services"] = collections.OrderedDict()
|
|
if enabledservices:
|
|
qubes["services"]["enable"] = enabledservices
|
|
if disabledservices:
|
|
qubes["services"]["disable"] = disabledservices
|
|
if defaultservices:
|
|
qubes["services"]["disable"] = defaultservices
|
|
elif "services" in qubes:
|
|
del qubes["services"]
|
|
try:
|
|
vmtype = qubes["vm_type"]
|
|
except KeyError:
|
|
assert 0, "while processing attribute %s of VM %s: attribute not set" % (
|
|
"vm_type", invhostname
|
|
)
|
|
flags = qubes.get("flags", [])
|
|
def add(l, v):
|
|
if v not in l:
|
|
l.append(v)
|
|
if vmtype == "NetVM":
|
|
add(flags, "net")
|
|
elif vmtype == "StandaloneVM":
|
|
add(flags, "standalone")
|
|
elif vmtype == "AppVM":
|
|
pass
|
|
elif vmtype == "ProxyVM":
|
|
add(flags, "proxy")
|
|
elif vmtype == "TemplateVM":
|
|
try:
|
|
qubes["source"] = qubes["template"]
|
|
del qubes["template"]
|
|
except KeyError:
|
|
if "source" in qubes:
|
|
del qubes["source"]
|
|
else:
|
|
assert 0, "while processing attribute %s of VM %s: VM type %s unsupported" % (
|
|
"vm_type", invhostname, vmtype
|
|
)
|
|
if flags:
|
|
qubes["flags"] = flags
|
|
else:
|
|
if "flags" in qubes:
|
|
del qubes["flags"]
|
|
return akk
|