| 1622 | self.rendered_map = self.read() |
| 1623 | |
| 1624 | def interpolated_map(self, query="list_nodes", cached=False): |
| 1625 | rendered_map = self.read().copy() |
| 1626 | interpolated_map = {} |
| 1627 | |
| 1628 | for profile, mapped_vms in rendered_map.items(): |
| 1629 | names = set(mapped_vms) |
| 1630 | if profile not in self.opts["profiles"]: |
| 1631 | if "Errors" not in interpolated_map: |
| 1632 | interpolated_map["Errors"] = {} |
| 1633 | msg = ( |
| 1634 | "No provider for the mapped '{}' profile was found. " |
| 1635 | "Skipped VMS: {}".format(profile, ", ".join(names)) |
| 1636 | ) |
| 1637 | log.info(msg) |
| 1638 | interpolated_map["Errors"][profile] = msg |
| 1639 | continue |
| 1640 | |
| 1641 | matching = self.get_running_by_names(names, query, cached) |
| 1642 | for alias, drivers in matching.items(): |
| 1643 | for driver, vms in drivers.items(): |
| 1644 | for vm_name, vm_details in vms.items(): |
| 1645 | if alias not in interpolated_map: |
| 1646 | interpolated_map[alias] = {} |
| 1647 | if driver not in interpolated_map[alias]: |
| 1648 | interpolated_map[alias][driver] = {} |
| 1649 | interpolated_map[alias][driver][vm_name] = vm_details |
| 1650 | try: |
| 1651 | names.remove(vm_name) |
| 1652 | except KeyError: |
| 1653 | # If it's not there, then our job is already done |
| 1654 | pass |
| 1655 | |
| 1656 | if not names: |
| 1657 | continue |
| 1658 | |
| 1659 | profile_details = self.opts["profiles"][profile] |
| 1660 | alias, driver = profile_details["provider"].split(":") |
| 1661 | for vm_name in names: |
| 1662 | if alias not in interpolated_map: |
| 1663 | interpolated_map[alias] = {} |
| 1664 | if driver not in interpolated_map[alias]: |
| 1665 | interpolated_map[alias][driver] = {} |
| 1666 | interpolated_map[alias][driver][vm_name] = "Absent" |
| 1667 | |
| 1668 | return interpolated_map |
| 1669 | |
| 1670 | def delete_map(self, query=None): |
| 1671 | query_map = self.interpolated_map(query=query) |