def take_action(self, parsed_args): cloud_regions = openstack.config.loader.OpenStackConfig().\ get_all_clouds() if parsed_args.clouds: cloud_regions = filter(lambda c: c.name in parsed_args.clouds, cloud_regions) node_count = int(parsed_args.node_count) filters = { 'status': 'available', 'available_start_time': str(parsed_args.start_time) if parsed_args.start_time else None, 'available_end_time': str(parsed_args.end_time) if parsed_args.end_time else None, 'resource_type': parsed_args.resource_type, } available_offers = [] for c in cloud_regions: client = esileapclient.Client(session=c.get_session()) offers = client.offer.list(filters) for offer in offers: offer.cloud_region = c offer.cloud = c.name offer.region = c.config['region_name'] available_offers += [offer] if node_count > len(available_offers): raise exceptions.CommandError( "ERROR: Not enough offers found") offers_to_claim = random.sample(available_offers, node_count) leases = [] for offer in offers_to_claim: client = esileapclient.Client( session=offer.cloud_region.get_session()) try: lease = client.offer.claim( offer.uuid, **{'start_time': parsed_args.start_time, 'end_time': parsed_args.end_time}) lease.cloud = offer.cloud lease.region = offer.region leases += [lease] except exceptions.CommandError: # offer is no longer available during this time range; continue # but let user know print("Offer %s is no longer available; continuing" % offer.uuid) columns = ['cloud', 'region'] + list(LEASE_RESOURCE.fields.keys()) labels = ['Cloud', 'Region'] + list(LEASE_RESOURCE.fields.values()) return (labels, (oscutils.get_item_properties(s, columns) for s in leases))
def take_action(self, parsed_args): data = [] cloud_regions = openstack.config.loader.OpenStackConfig().\ get_all_clouds() if parsed_args.clouds: cloud_regions = filter(lambda c: c.name in parsed_args.clouds, cloud_regions) filters = { 'status': parsed_args.status, 'start_time': str(parsed_args.time_range[0]) if parsed_args.time_range else None, 'end_time': str(parsed_args.time_range[1]) if parsed_args.time_range else None, 'resource_type': parsed_args.resource_type, } for c in cloud_regions: client = esileapclient.Client(session=c.get_session()) leases = client.lease.list(filters) for lease in leases: lease.cloud = c.name lease.region = c.config['region_name'] data += [lease] columns = ['cloud', 'region'] + list(LEASE_RESOURCE.fields.keys()) labels = ['Cloud', 'Region'] + list(LEASE_RESOURCE.fields.values()) return (labels, (oscutils.get_item_properties(s, columns) for s in data))
def test_client_user_api_version(self, http_client_mock): os_esileap_api_version = '1.15' session = mock.Mock() client.Client(session=session, os_esileap_api_version=os_esileap_api_version) http_client_mock.assert_called_once_with( session=session, os_esileap_api_version=os_esileap_api_version)
def test_client_session_via_kwargs(self, http_client_mock): session = mock.Mock() client.Client(session=session) http_client_mock.assert_called_once_with( session, os_esileap_api_version=client.DEFAULT_VER)
def test_client_initialized_managers(self, http_client_mock): session = mock.Mock() cl = client.Client(session=session, os_esileap_api_version='1') self.assertIsInstance(cl.offer, client.offer.OfferManager)