コード例 #1
0
ファイル: JoyentDriver.py プロジェクト: bocabaton/orchestra
    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)