|
727 | 727 | "virtualization.clustergroup": "cluster_groups", |
728 | 728 | } |
729 | 729 |
|
| 730 | +# keys (for all endpoints) that should be converted from list to set |
| 731 | +LIST_AS_SET_KEYS = set(["tags"]) |
| 732 | + |
| 733 | +# keys (for given endpoints) that should be converted from list to set |
| 734 | +LIST_AS_SET_ENDPOINT_KEYS = { |
| 735 | + # tenancy |
| 736 | + "contacts": set(["contact_groups"]), |
| 737 | + # extra |
| 738 | + "custom_fields": set(["object_types"]), |
| 739 | + "custom_links": set(["object_types"]), |
| 740 | + "export_templates": set(["object_types"]), |
| 741 | + # users |
| 742 | + "permissions": set(["actions", "object_types"]), |
| 743 | + "groups": set(["permissions"]), |
| 744 | + "users": set(["groups", "permissions"]), |
| 745 | + # ipam |
| 746 | + "vlan_groups": set(["vid_ranges"]), |
| 747 | + # dcim, virtualization |
| 748 | + "interfaces": set(["tagged_vlans"]), |
| 749 | +} |
| 750 | + |
730 | 751 | NETBOX_ARG_SPEC = dict( |
731 | 752 | netbox_url=dict(type="str", required=True), |
732 | 753 | netbox_token=dict(type="str", required=True, no_log=True), |
@@ -1491,9 +1512,15 @@ def _update_netbox_object(self, data): |
1491 | 1512 | updated_obj = serialized_nb_obj.copy() |
1492 | 1513 | updated_obj.update(data) |
1493 | 1514 |
|
1494 | | - if serialized_nb_obj.get("tags") and data.get("tags"): |
1495 | | - serialized_nb_obj["tags"] = set(serialized_nb_obj["tags"]) |
1496 | | - updated_obj["tags"] = set(data["tags"]) |
| 1515 | + # these fields are considerd a set and should be converted |
| 1516 | + for k in LIST_AS_SET_KEYS: |
| 1517 | + if serialized_nb_obj.get(k) and data.get(k): |
| 1518 | + serialized_nb_obj[k] = set(serialized_nb_obj[k]) |
| 1519 | + updated_obj[k] = set(data[k]) |
| 1520 | + for k in LIST_AS_SET_ENDPOINT_KEYS.get(self.endpoint, []): |
| 1521 | + if serialized_nb_obj.get(k) and data.get(k): |
| 1522 | + serialized_nb_obj[k] = set(serialized_nb_obj[k]) |
| 1523 | + updated_obj[k] = set(data[k]) |
1497 | 1524 |
|
1498 | 1525 | # Ensure idempotency for site on older netbox versions |
1499 | 1526 | version_pre_30 = self._version_check_greater("3.0", self.version) |
|
0 commit comments