in src/lambdas/r8s_api_handler/processors/shape_rule_dry_run_processor.py [0:0]
def get(self, event):
_LOG.debug(f'Dry run shape rule event: {event}')
validate_params(event, (PARENT_ID_ATTR,))
parent, application = self.resolve_parent_application(
event=event
)
_LOG.debug(f'Resolving rules for parent '
f'\'{parent.parent_id}\'')
parent_meta = self.parent_service.get_parent_meta(
parent=parent)
shape_rules = self.parent_service.list_shape_rules(
parent_meta=parent_meta)
if not shape_rules:
_LOG.warning(f'Parent \'{parent.parent_id}\' does not '
f'have shape rules.')
return build_response(
code=RESPONSE_RESOURCE_NOT_FOUND_CODE,
content=f'Parent \'{parent.parent_id}\' does not '
f'have shape rules.'
)
cloud = None
if parent.tenant_name:
_LOG.debug(f'Describing tenant {parent.tenant_name}')
tenant = self.tenant_service.get(tenant_name=parent.tenant_name)
if not tenant:
_LOG.debug(f'Tenant {parent.tenant_name} linked to parent '
f'{parent.parent_id} does not exist.')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'Tenant {parent.tenant_name} linked to parent '
f'{parent.parent_id} does not exist.'
)
cloud = tenant.cloud
elif parent.cloud:
cloud = parent.cloud
if not cloud:
_LOG.error(f'Parent {parent.parent_id} must have either ALL#CLOUD '
f'or SPECIFIC scope.')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'Parent {parent.parent_id} must have either ALL#CLOUD '
f'or SPECIFIC scope.'
)
shapes = self.shape_service.list(cloud=cloud)
if not shapes:
_LOG.error(f'No shapes found for cloud \'{cloud}\'')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'No shapes found for cloud \'{cloud}\''
)
_LOG.debug(f'Applying shape rules to {len(shapes)} shapes')
filtered_shapes = self.shape_rules_filter_service. \
get_allowed_instance_types(
cloud=cloud,
parent_meta=parent_meta,
instances_data=shapes
)
_LOG.debug(f'Got {len(filtered_shapes)} filtered shapes')
_LOG.debug(f'Describing shapes dto')
shape_names = [shape.name for shape in filtered_shapes]
shape_names.sort()
response = {
"cloud": cloud,
"total_shapes": len(shapes),
"allowed_for_parent": len(filtered_shapes),
"shape_names": shape_names
}
_LOG.debug(f'Response: \'{response}\'')
return build_response(
code=RESPONSE_OK_CODE,
content=response
)