+ def getSubcloudList(self):
+ subs = self.dcclient.subcloud_manager.list_subclouds()
+ known_subs = [sub for sub in subs if sub.sync_status != 'unknown']
+ return known_subs
+
+ def getSubcloudFaultClient(self, subcloud_id):
+ subcloud = self.dcclient.subcloud_manager.\
+ subcloud_additional_details(subcloud_id)
+ logger.debug('subcloud name: %s, oam_floating_ip: %s' %
+ (subcloud[0].name, subcloud[0].oam_floating_ip))
+ try:
+ sub_is_https = False
+ os_client_args = config.get_stx_access_info(
+ region_name=subcloud[0].name,
+ subcloud_hostname=subcloud[0].oam_floating_ip)
+ stx_client = get_stx_client(**os_client_args)
+ except EndpointException as e:
+ msg = e.format_message()
+ if CGTSCLIENT_ENDPOINT_ERROR_MSG in msg:
+ sub_is_https = True
+ os_client_args = config.get_stx_access_info(
+ region_name=subcloud[0].name, sub_is_https=sub_is_https,
+ subcloud_hostname=subcloud[0].oam_floating_ip)
+ stx_client = get_stx_client(**os_client_args)
+ else:
+ raise ValueError('Stx endpoint exception: %s' % msg)
+ except Exception:
+ raise ValueError('cgtsclient get subcloud client failed')
+
+ os_client_args = config.get_fm_access_info(
+ sub_is_https=sub_is_https,
+ subcloud_hostname=subcloud[0].oam_floating_ip)
+ fm_client = get_fm_client(1, **os_client_args)
+
+ return stx_client, fm_client
+
+ def setFaultClient(self, resource_pool_id):
+ systems = self.stxclient.isystem.list()
+ if resource_pool_id == systems[0].uuid:
+ logger.debug('Fault Client not change: %s' % resource_pool_id)
+ self.fmclient = self.getFmClient()
+ return
+
+ subclouds = self.getSubcloudList()
+ for subcloud in subclouds:
+ substxclient, subfaultclient = self.getSubcloudFaultClient(
+ subcloud.subcloud_id)
+ systems = substxclient.isystem.list()
+ if resource_pool_id == systems[0].uuid:
+ self.fmclient = subfaultclient
+