diff --git a/f5_cccl/bigip.py b/f5_cccl/bigip.py index 3c85418a..d3494fe5 100644 --- a/f5_cccl/bigip.py +++ b/f5_cccl/bigip.py @@ -403,7 +403,12 @@ def _refresh_net(self): # our local list. LOGGER.debug( "Retrieving fdb tunnels from BIG-IP /%s...", self._partition) + # Adding support for latest bigips + self._bigip.tm.net.fdb.tunnels.raw['_meta_data']['icontrol_version'] = self._bigip.tmos_version tunnels = self._bigip.tm.net.fdb.tunnels.get_collection() + for t in tunnels: + t.raw["_meta_data"]["icontrol_version"] = self._bigip.tmos_version + # Refresh the arp cache self._arps = { @@ -418,6 +423,7 @@ def _refresh_net(self): for t in tunnels if (self._manageable_resource(t) and t.partition == self._partition) } + self._all_fdb_tunnels = { t.name: self._create_resource(IcrFDBTunnel, t, default_route_domain) diff --git a/f5_cccl/resource/net/fdb/tunnel.py b/f5_cccl/resource/net/fdb/tunnel.py index dd383605..1b332206 100644 --- a/f5_cccl/resource/net/fdb/tunnel.py +++ b/f5_cccl/resource/net/fdb/tunnel.py @@ -74,7 +74,9 @@ def __hash__(self): # pylint: disable=useless-super-delegation return super(FDBTunnel, self).__hash__() def _uri_path(self, bigip): - return bigip.tm.net.fdb.tunnels.tunnel + t = bigip.tm.net.fdb.tunnels.tunnel + t.raw["_meta_data"]["icontrol_version"] = bigip.tmos_version + return t class IcrFDBTunnel(FDBTunnel): diff --git a/f5_cccl/resource/resource.py b/f5_cccl/resource/resource.py index 56b8c84d..d565a68e 100644 --- a/f5_cccl/resource/resource.py +++ b/f5_cccl/resource/resource.py @@ -257,6 +257,7 @@ def update(self, bigip, data=None, modify=False): name=urlquote(self.name), partition=self.partition) payload = copy.copy(data) + obj.raw['_meta_data']['icontrol_version'] = obj.raw['_meta_data']['creation_uri_qargs']['ver'][0] if modify: obj.modify(**payload) else: diff --git a/f5_cccl/service/manager.py b/f5_cccl/service/manager.py index 1af63120..b7e4c0af 100644 --- a/f5_cccl/service/manager.py +++ b/f5_cccl/service/manager.py @@ -219,12 +219,13 @@ def _get_user_tunnel_tasks(self, desired): all_tunnels = self._bigip.get_fdb_tunnels(all_tunnels=True) # Get only the tunnels we desire update_list = set(desired) & set(all_tunnels) - update_list = [ - desired[resource] for resource in update_list - if desired[resource] != all_tunnels[resource] - ] - - return update_list + new_list = [] + for resource in update_list: + if desired[resource] != all_tunnels[resource]: + new_list.append(desired[resource]) + LOGGER.info(desired[resource]) + LOGGER.info(all_tunnels[resource]) + return new_list # pylint: disable=too-many-locals def _desired_nodes(self, default_route_domain):