To clarify, there are two hidden behaviors here contributing to the spookiness.
- `template` implicitly gets rebound from `None` to `True` or `False` during the `elem in prop.PropSet` loop
- `get_template` must be one of the boolean constants for this to work, but it's reasonable to allow for truthy or falsy values to be evaluated in a boolean context, so `get_template` should probably be cast to boolean to sanitize (in the sense of cleaning up, as well as in the sense of adding sanity to) user input and ensure that this function works as intended

Additionally, the conditional break will break the inner loop, but further processing after the inner loop will happen with or without the break. Assuming that the PropSet being inspected only has the two requested properties in the returned iterable, the loop will always cycle two times, and sometimes it might break when it's done. I think what's important is checking to see if there is useful information after the `elem in prop.PropSet` loop, and bailing if not, so loop management should probably take place in the outer loop.

Unlike my previous comment, I actually tested this out to get a better idea of what was going on, which means I have a diff representing my thoughts:
```diff
diff --git a/utils/mgmt_system.py b/utils/mgmt_system.py
index 00c1f7f..57c0063 100644
--- a/utils/mgmt_system.py
+++ b/utils/mgmt_system.py
@@ -256,9 +256,12 @@ class VMWareSystem(MgmtSystemAPIBase):
                     vm = elem.Val
                 elif elem.Name == "config.template":
                     template = elem.Val
-                if vm is not None and template is not None:
-                    break
-            if template == get_template:
+            # vm should be a string, and template should come back as either True or False
+            # skip over this PropSet if either one is still the sentinel None
+            if vm is None or template is None:
+                continue
+
+            if template == bool(get_template):
                 template_or_vm_list.append(vm)
         return template_or_vm_list
```

The question of "Why isn't template None now?" is answered, and user input is sanitized to ensure proper function. It also stops further processing for a given propset if the answers we got back weren't useful.