|
737 | 737 | "virtualization.clustergroup": "cluster_groups", |
738 | 738 | } |
739 | 739 |
|
| 740 | +# keys (for all endpoints) that should be converted from list to set |
| 741 | +LIST_AS_SET_KEYS = set(["tags"]) |
| 742 | + |
| 743 | +# keys (for given endpoints) that should be converted from list to set |
| 744 | +LIST_AS_SET_ENDPOINT_KEYS = { |
| 745 | + # tenancy |
| 746 | + "contacts": set(["contact_groups"]), |
| 747 | + # extra |
| 748 | + "config_contexts": set( |
| 749 | + [ |
| 750 | + "regions", |
| 751 | + "site_groups", |
| 752 | + "sites", |
| 753 | + "roles", |
| 754 | + "device_types", |
| 755 | + "platforms", |
| 756 | + "cluster_types", |
| 757 | + "cluster_groups", |
| 758 | + "clusters", |
| 759 | + "tenant_groups", |
| 760 | + "tenants", |
| 761 | + ] |
| 762 | + ), |
| 763 | + "custom_fields": set(["object_types"]), |
| 764 | + "custom_links": set(["object_types"]), |
| 765 | + "export_templates": set(["object_types"]), |
| 766 | + # users |
| 767 | + "groups": set(["permissions"]), |
| 768 | + "permissions": set( |
| 769 | + [ |
| 770 | + "actions", |
| 771 | + "object_types", |
| 772 | + ] |
| 773 | + ), |
| 774 | + "users": set( |
| 775 | + [ |
| 776 | + "groups", |
| 777 | + "permissions", |
| 778 | + ] |
| 779 | + ), |
| 780 | + # ipam |
| 781 | + "l2vpns": set( |
| 782 | + [ |
| 783 | + "import_targets", |
| 784 | + "export_targets", |
| 785 | + ] |
| 786 | + ), |
| 787 | + "services": set(["ports"]), |
| 788 | + "service_templates": set(["ports"]), |
| 789 | + "vlan_groups": set(["vid_ranges"]), |
| 790 | + "vrfs": set( |
| 791 | + [ |
| 792 | + "import_targets", |
| 793 | + "export_targets", |
| 794 | + ] |
| 795 | + ), |
| 796 | + # dcim, virtualization |
| 797 | + "interfaces": set(["tagged_vlans"]), |
| 798 | +} |
| 799 | + |
| 800 | +config_context |
| 801 | + |
740 | 802 | NETBOX_ARG_SPEC = dict( |
741 | 803 | netbox_url=dict(type="str", required=True), |
742 | 804 | netbox_token=dict(type="str", required=True, no_log=True), |
@@ -1524,9 +1586,15 @@ def _update_netbox_object(self, data): |
1524 | 1586 | updated_obj = serialized_nb_obj.copy() |
1525 | 1587 | updated_obj.update(data) |
1526 | 1588 |
|
1527 | | - if serialized_nb_obj.get("tags") and data.get("tags"): |
1528 | | - serialized_nb_obj["tags"] = set(serialized_nb_obj["tags"]) |
1529 | | - updated_obj["tags"] = set(data["tags"]) |
| 1589 | + # these fields are considerd a set and should be converted |
| 1590 | + for k in LIST_AS_SET_KEYS: |
| 1591 | + if serialized_nb_obj.get(k) and data.get(k): |
| 1592 | + serialized_nb_obj[k] = set(serialized_nb_obj[k]) |
| 1593 | + updated_obj[k] = set(data[k]) |
| 1594 | + for k in LIST_AS_SET_ENDPOINT_KEYS.get(self.endpoint, []): |
| 1595 | + if serialized_nb_obj.get(k) and data.get(k): |
| 1596 | + serialized_nb_obj[k] = set(serialized_nb_obj[k]) |
| 1597 | + updated_obj[k] = set(data[k]) |
1530 | 1598 |
|
1531 | 1599 | # Ensure idempotency for site on older netbox versions |
1532 | 1600 | version_pre_30 = self._version_check_greater("3.0", self.api_version) |
|
0 commit comments