Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_aws_lambda_apply_under_bundle_size_limit_success():
yatai_service_mock = create_yatai_service_mock()
test_deployment_pb = generate_lambda_deployment_pb()
deployment_operator = AwsLambdaDeploymentOperator(yatai_service_mock)
result_pb = deployment_operator.add(test_deployment_pb)
assert result_pb.status.status_code == status_pb2.Status.OK
assert result_pb.deployment.state.state == DeploymentState.PENDING
status=Status.ABORTED('"Outputs" field is not present'),
state=DeploymentState(
state=DeploymentState.ERROR,
error_message='"Outputs" field is not present',
),
)
elif stack_result['StackStatus'] in FAILED_CLOUDFORMATION_STACK_STATUS:
state = DeploymentState(state=DeploymentState.FAILED)
state.timestamp.GetCurrentTime()
return DescribeDeploymentResponse(status=Status.OK(), state=state)
else:
state = DeploymentState(state=DeploymentState.PENDING)
state.timestamp.GetCurrentTime()
return DescribeDeploymentResponse(status=Status.OK(), state=state)
except Exception as error: # pylint: disable=broad-except
state = DeploymentState(
state=DeploymentState.ERROR, error_message=str(error)
)
state.timestamp.GetCurrentTime()
return DescribeDeploymentResponse(
status=Status.INTERNAL(str(error)), state=state
)
outputs = {o['OutputKey']: o['OutputValue'] for o in outputs}
info_json = {}
if 'EndpointUrl' in outputs:
info_json['endpoints'] = [
outputs['EndpointUrl'] + '/' + api_name for api_name in api_names
]
if 'S3Bucket' in outputs:
info_json['s3_bucket'] = outputs['S3Bucket']
)
state.timestamp.GetCurrentTime()
return DescribeDeploymentResponse(
status=Status.INTERNAL(str(error)), state=state
)
base_url = ''
for output in outputs:
if output['OutputKey'] == 'ServiceEndpoint':
base_url = output['OutputValue']
break
if base_url:
info_json['endpoints'] = [
base_url + '/' + api_name for api_name in api_names
]
state = DeploymentState(
state=DeploymentState.RUNNING, info_json=json.dumps(info_json)
)
state.timestamp.GetCurrentTime()
return DescribeDeploymentResponse(status=Status.OK(), state=state)
except BentoMLException as error:
return DescribeDeploymentResponse(status=error.status_proto)
api_names = (
[aws_config.api_name]
if aws_config.api_name
else [api.name for api in bento_service_metadata.apis]
)
try:
cf_client = boto3.client('cloudformation', aws_config.region)
cloud_formation_stack_result = cf_client.describe_stacks(
StackName='{name}-{ns}'.format(
ns=deployment_pb.namespace, name=deployment_pb.name
)
)
outputs = cloud_formation_stack_result.get('Stacks')[0]['Outputs']
except Exception as error:
state = DeploymentState(
state=DeploymentState.ERROR, error_message=str(error)
)
state.timestamp.GetCurrentTime()
return DescribeDeploymentResponse(
status=Status.INTERNAL(str(error)), state=state
)
base_url = ''
for output in outputs:
if output['OutputKey'] == 'ServiceEndpoint':
base_url = output['OutputValue']
break
if base_url:
info_json['endpoints'] = [
base_url + '/' + api_name for api_name in api_names
]
cloud_formation_stack_result = cf_client.describe_stacks(
StackName='{ns}-{name}'.format(
ns=deployment_pb.namespace, name=deployment_pb.name
)
)
stack_result = cloud_formation_stack_result.get('Stacks')[0]
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/\
# using-cfn-describing-stacks.html
success_status = ['CREATE_COMPLETE', 'UPDATE_COMPLETE']
if stack_result['StackStatus'] in success_status:
if stack_result.get('Outputs'):
outputs = stack_result['Outputs']
else:
return DescribeDeploymentResponse(
status=Status.ABORTED('"Outputs" field is not present'),
state=DeploymentState(
state=DeploymentState.ERROR,
error_message='"Outputs" field is not present',
),
)
elif stack_result['StackStatus'] in FAILED_CLOUDFORMATION_STACK_STATUS:
state = DeploymentState(state=DeploymentState.FAILED)
state.timestamp.GetCurrentTime()
return DescribeDeploymentResponse(status=Status.OK(), state=state)
else:
state = DeploymentState(state=DeploymentState.PENDING)
state.timestamp.GetCurrentTime()
return DescribeDeploymentResponse(status=Status.OK(), state=state)
except Exception as error: # pylint: disable=broad-except
state = DeploymentState(
state=DeploymentState.ERROR, error_message=str(error)
)
def _deployment_orm_obj_to_pb(deployment_obj):
deployment_pb = deployment_pb2.Deployment(
name=deployment_obj.name,
namespace=deployment_obj.namespace,
spec=ParseDict(deployment_obj.spec, deployment_pb2.DeploymentSpec()),
state=ParseDict(deployment_obj.state, deployment_pb2.DeploymentState()),
labels=deployment_obj.labels,
annotations=deployment_obj.annotations,
)
deployment_pb.created_at.FromDatetime(deployment_obj.created_at)
if deployment_obj.last_updated_at:
deployment_pb.last_updated_at.FromDatetime(deployment_obj.last_updated_at)
return deployment_pb
'google-python',
)
generate_gcp_function_main_py(
deployment_spec.bento_name, api_names, serverless_project_dir
)
generate_gcp_function_serverless_config(
deployment_pb.name,
api_names,
serverless_project_dir,
gcp_config.region,
# BentoML namespace is mapping to serverless stage.
stage=deployment_pb.namespace,
)
call_serverless_command(["deploy"], serverless_project_dir)
res_deployment_pb = Deployment(state=DeploymentState())
res_deployment_pb.CopyFrom(deployment_pb)
state = self.describe(res_deployment_pb, yatai_service).state
res_deployment_pb.state.CopyFrom(state)
return ApplyDeploymentResponse(
status=Status.OK(), deployment=res_deployment_pb
)
except BentoMLException as error:
return ApplyDeploymentResponse(status=error.status_proto)
def _print_deployments_table(deployments):
table = []
headers = ['NAME', 'NAMESPACE', 'LABELS', 'PLATFORM', 'STATUS', 'AGE']
for deployment in deployments:
row = [
deployment.name,
deployment.namespace,
_format_labels_for_print(deployment.labels),
DeploymentSpec.DeploymentOperator.Name(deployment.spec.operator)
.lower()
.replace('_', '-'),
DeploymentState.State.Name(deployment.state.state)
.lower()
.replace('_', ' '),
_format_deployment_age_for_print(deployment),
]
table.append(row)
table_display = tabulate(table, headers, tablefmt='plain')
_echo(table_display)