def discover(self, param, ctx): """ @param: "auth":{ "key_id":"ACCESS Key ID", "secret":"/root/.ssh/joyent_id_rsa" } } """ auth = param['auth'] if auth.has_key('key_id') == False: raise ERROR_AUTH_FAILED(reason="Key ID is needed") else: a_key = auth['key_id'] if auth.has_key('secret') == False: raise ERROR_AUTH_FAILED(reason="Secret(registered id_rsa private key) is needed") else: s_key = auth['secret'] sdc = DataCenter(key_id=a_key, secret=s_key) # base on endpoint, Create Region cloudMgr = self.locator.getManager('CloudManager') # 1. Create Region regions = self._getRegions(sdc.datacenters()) output = [] total_count = 0 for region in regions: param = {'name':region} region_info = cloudMgr.createRegion(param) total_count = total_count + 1 output.append(region_info) # 2. Detect Availability Zones # Joyent has no AZ concept, use az = region az_list = [region] for az in az_list: param = {'name': az, 'region_id': region_info.output['region_id'], 'zone_type': 'joyent'} zone_info = cloudMgr.createZone(param) # Update Zone Detail for DOCKER_HOST zone_id = zone_info.output['zone_id'] self.logger.debug("Add Zone Detail at %s" % zone_id) # NOTICE: docker_url = 'tcp://%s.docker.joyent.com:2376' % region p2 = {'zone_id': zone_id, 'create':[{'key':'DOCKER_HOST','value':docker_url}, {'key':'DOCKER_TLS_VERIFY','value':'1'}]} cloudMgr.createZoneDetail(p2) # Discover ALL servers and register them servers = self.discoverServers({'auth':auth}, zone_id) for server in servers: cloudMgr.registerServerByServerInfo(zone_id, server, ctx) # return Zones return (output, total_count)