From 41b137fb5198aa7bf0a13d135c94c00898eb624b Mon Sep 17 00:00:00 2001 From: stealthycoin Date: Tue, 20 Nov 2018 14:30:09 -0800 Subject: [PATCH 1/5] Add --zip-file argument for lambda publish-layer-version Added a new case to have a top level argument injected for zipfiles. Generalized the logic a little bit so as long as the shapes are re-used we can add these cases trivially in the future if needed. --- awscli/customizations/awslambda.py | 104 ++++++++++++++------ tests/functional/awslambda/test_function.py | 74 +++++++++++++- 2 files changed, 147 insertions(+), 31 deletions(-) diff --git a/awscli/customizations/awslambda.py b/awscli/customizations/awslambda.py index 03fff2b1f28f..87413dafcc5a 100644 --- a/awscli/customizations/awslambda.py +++ b/awscli/customizations/awslambda.py @@ -17,19 +17,23 @@ from botocore.vendored import six from awscli.arguments import CustomArgument, CLIArgument -from awscli.customizations import utils + ERROR_MSG = ( "--zip-file must be a zip file with the fileb:// prefix.\n" "Example usage: --zip-file fileb://path/to/file.zip") -ZIP_DOCSTRING = ('

The path to the zip file of the code you are uploading. ' - 'Example: fileb://code.zip

') +ZIP_DOCSTRING = ( + '

The path to the zip file of the {param_type} you are uploading. ' + 'Example: fileb://{param_type}.zip

' +) def register_lambda_create_function(cli): cli.register('building-argument-table.lambda.create-function', - _extract_code_and_zip_file_arguments) + ZipFileArgumentHoister('Code').hoist) + cli.register('building-argument-table.lambda.publish-layer-version', + ZipFileArgumentHoister('Content').hoist) cli.register('building-argument-table.lambda.update-function-code', _modify_zipfile_docstring) cli.register('process-cli-arg.lambda.update-function-code', @@ -41,20 +45,36 @@ def validate_is_zip_file(cli_argument, value, **kwargs): _should_contain_zip_content(value) -def _extract_code_and_zip_file_arguments(session, argument_table, **kwargs): - argument_table['zip-file'] = ZipFileArgument( - 'zip-file', help_text=ZIP_DOCSTRING, cli_type_name='blob') - code_argument = argument_table['code'] - code_model = copy.deepcopy(code_argument.argument_model) - del code_model.members['ZipFile'] - argument_table['code'] = CodeArgument( - name='code', - argument_model=code_model, - operation_model=code_argument._operation_model, - is_required=False, - event_emitter=session.get_component('event_emitter'), - serialized_name='Code' - ) +class ZipFileArgumentHoister(object): + """Hoists a ZipFile argument up to the top level. + + Injects a top-level ZipFileArgument into the argument table which maps + a --zip-file parameter to the underlying ``serialized_name`` ZipFile + shape. Repalces the old ZipFile argument with an instance of + ReplacedZipFileArgument to prevent its usage and recommend the new + top-level injected parameter. + """ + def __init__(self, serialized_name): + self._serialized_name = serialized_name + self._name = serialized_name.lower() + + def hoist(self, session, argument_table, **kwargs): + help_text = ZIP_DOCSTRING.format(param_type=self._name) + argument_table['zip-file'] = ZipFileArgument( + 'zip-file', help_text=help_text, cli_type_name='blob', + serialized_name=self._serialized_name + ) + argument = argument_table[self._name] + model = copy.deepcopy(argument.argument_model) + del model.members['ZipFile'] + argument_table[self._name] = ReplacedZipFileArgument( + name=self._name, + argument_model=model, + operation_model=argument._operation_model, + is_required=False, + event_emitter=session.get_component('event_emitter'), + serialized_name=self._serialized_name, + ) def _modify_zipfile_docstring(session, argument_table, **kwargs): @@ -78,28 +98,54 @@ def _should_contain_zip_content(value): class ZipFileArgument(CustomArgument): + """A new ZipFile argument to be injected at the top level. + + This class injects a ZipFile argument under the specified serialized_name + parameter. This can be used to take a top level parameter like --zip-file + and inject it into a nested different parameter like Code so + --zip-file foo.zip winds up being serilized as + { 'Code': { 'ZipFile': } }. + """ + def __init__(self, *args, **kwargs): + self._param_to_replace = kwargs.pop('serialized_name') + super(ZipFileArgument, self).__init__(*args, **kwargs) + def add_to_params(self, parameters, value): if value is None: return _should_contain_zip_content(value) zip_file_param = {'ZipFile': value} - if parameters.get('Code'): - parameters['Code'].update(zip_file_param) + if parameters.get(self._param_to_replace): + parameters[self._param_to_replace].update(zip_file_param) else: - parameters['Code'] = zip_file_param + parameters[self._param_to_replace] = zip_file_param + + +class ReplacedZipFileArgument(CLIArgument): + """A replacement arugment for nested ZipFile argument. + This prevents the use of a non-working nested argument that expects binary. + Instead an instance of ZipFileArgument should be injected at the top level + and used instead. That way fileb:// can be used to load the binary + contents. And the argument class can inject those bytes into the correct + serialization name. + """ + def __init__(self, *args, **kwargs): + super(ReplacedZipFileArgument, self).__init__(*args, **kwargs) + self._cli_name = '--%s' % kwargs['name'] + self._param_to_replace = kwargs['serialized_name'] -class CodeArgument(CLIArgument): def add_to_params(self, parameters, value): if value is None: return unpacked = self._unpack_argument(value) if 'ZipFile' in unpacked: - raise ValueError("ZipFile cannot be provided " - "as part of the --code argument. " - "Please use the '--zip-file' " - "option instead to specify a zip file.") - if parameters.get('Code'): - parameters['Code'].update(unpacked) + raise ValueError( + "ZipFile cannot be provided " + "as part of the %s argument. " + "Please use the '--zip-file' " + "option instead to specify a zip file." % self._cli_name) + if parameters.get(self._param_to_replace): + parameters[self._param_to_replace].update(unpacked) else: - parameters['Code'] = unpacked + parameters[self._param_to_replace] = unpacked diff --git a/tests/functional/awslambda/test_function.py b/tests/functional/awslambda/test_function.py index 66dd60c3bc1f..aa9820d95972 100644 --- a/tests/functional/awslambda/test_function.py +++ b/tests/functional/awslambda/test_function.py @@ -14,7 +14,6 @@ import zipfile from contextlib import closing -from awscli.testutils import unittest from awscli.testutils import BaseAWSCommandParamsTest from awscli.testutils import FileCreator @@ -121,6 +120,78 @@ def test_not_using_fileb_prefix(self): self.assertIn('fileb://', stderr) +class TestPublishLayerVersion(BaseLambdaTests): + + prefix = 'lambda publish-layer-version' + + def test_publish_layer_version_with_file(self): + cmdline = self.prefix + cmdline += ' --layer-name mylayer' + cmdline += ' --zip-file fileb://%s' % self.zip_file + result = { + 'LayerName': 'mylayer', + 'Content': {'ZipFile': self.zip_file_contents} + } + self.assert_params_for_cmd(cmdline, result) + + def test_publish_layer_version_with_content_argument(self): + cmdline = self.prefix + cmdline += ' --layer-name mylayer' + cmdline += ' --content' + cmdline += ' S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs' + result = { + 'LayerName': 'mylayer', + 'Content': {'S3Bucket': 'mybucket', + 'S3Key': 'mykey', + 'S3ObjectVersion': 'vs'} + } + self.assert_params_for_cmd(cmdline, result) + + def test_publish_layer_version_with_content_and_zipfile_argument(self): + cmdline = self.prefix + cmdline += ' --layer-name mylayer' + cmdline += ' --content' + cmdline += ' S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs' + cmdline += ' --zip-file fileb://%s' % self.zip_file + result = { + 'LayerName': 'mylayer', + 'Content': {'S3Bucket': 'mybucket', + 'S3Key': 'mykey', + 'S3ObjectVersion': 'vs', + 'ZipFile': self.zip_file_contents} + } + self.assert_params_for_cmd(cmdline, result) + + def test_publish_layer_version_with_zip_file_in_content_argument(self): + cmdline = self.prefix + cmdline += ' --layer-name mylayer' + cmdline += ' --content' + cmdline += ' S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs,' + cmdline += 'ZipFile=foo' + stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255) + self.assertIn('ZipFile cannot be provided as part of the --content', + stderr) + + def test_publish_layer_version_with_invalid_file_contents(self): + cmdline = self.prefix + cmdline += ' --layer-name mylayer' + cmdline += ' --zip-file filename_instead_of_contents.zip' + stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255) + self.assertIn('must be a zip file with the fileb:// prefix', stderr) + # Should also give a pointer to fileb:// for them. + self.assertIn('fileb://', stderr) + + def test_not_using_fileb_prefix(self): + cmdline = self.prefix + cmdline += ' --layer-name mylayer' + # Note file:// instead of fileb:// + cmdline += ' --zip-file file://%s' % self.zip_file + stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255) + # Ensure we mention fileb:// to give the user an idea of + # where to go next. + self.assertIn('fileb://', stderr) + + class TestUpdateFunctionCode(BaseLambdaTests): prefix = 'lambda update-function-code' @@ -142,4 +213,3 @@ def test_using_fileb_prefix_succeeds(self): 'ZipFile': self.zip_file_contents, } self.assert_params_for_cmd(cmdline, result) - From da5668fe13db1159bbb77ddaa0c7633df90fd2be Mon Sep 17 00:00:00 2001 From: Wujing Yao Date: Thu, 1 Nov 2018 15:10:38 -0700 Subject: [PATCH 2/5] Serverless Apps Repo introduced a Resource called ServerlessApplication. Locally, this resource can point to a local template file to enable local development. The aws cloudformation package command will now support packaging of this resource's local template file and upload it to s3. --- .../cloudformation/artifact_exporter.py | 16 +++- .../cloudformation/test_artifact_exporter.py | 93 ++++++++++++++++++- 2 files changed, 105 insertions(+), 4 deletions(-) diff --git a/awscli/customizations/cloudformation/artifact_exporter.py b/awscli/customizations/cloudformation/artifact_exporter.py index 4ecdf1b72628..9fd1a20efa73 100644 --- a/awscli/customizations/cloudformation/artifact_exporter.py +++ b/awscli/customizations/cloudformation/artifact_exporter.py @@ -420,6 +420,15 @@ def do_export(self, resource_id, resource_dict, parent_dir): parts["Key"], parts.get("Version", None)) +class ServerlessApplicationResource(CloudFormationStackResource): + """ + Represents Serverless::Application resource that can refer to a nested + app template via Location property. + """ + RESOURCE_TYPE = "AWS::Serverless::Application" + PROPERTY_NAME = "Location" + + EXPORT_LIST = [ ServerlessFunctionResource, ServerlessApiResource, @@ -429,7 +438,8 @@ def do_export(self, resource_id, resource_dict, parent_dir): ApiGatewayRestApiResource, LambdaFunctionResource, ElasticBeanstalkApplicationVersion, - CloudFormationStackResource + CloudFormationStackResource, + ServerlessApplicationResource ] def include_transform_export_handler(template_dict, uploader): @@ -474,9 +484,9 @@ def __init__(self, template_path, parent_dir, uploader, def export_global_artifacts(self, template_dict): """ - Template params such as AWS::Include transforms are not specific to + Template params such as AWS::Include transforms are not specific to any resource type but contain artifacts that should be exported, - here we iterate through the template dict and export params with a + here we iterate through the template dict and export params with a handler defined in GLOBAL_EXPORT_DICT """ for key, val in template_dict.items(): diff --git a/tests/unit/customizations/cloudformation/test_artifact_exporter.py b/tests/unit/customizations/cloudformation/test_artifact_exporter.py index a5675dea0f3d..7111cfa33153 100644 --- a/tests/unit/customizations/cloudformation/test_artifact_exporter.py +++ b/tests/unit/customizations/cloudformation/test_artifact_exporter.py @@ -19,6 +19,7 @@ ServerlessFunctionResource, GraphQLSchemaResource, \ LambdaFunctionResource, ApiGatewayRestApiResource, \ ElasticBeanstalkApplicationVersion, CloudFormationStackResource, \ + ServerlessApplicationResource, \ copy_to_temp_dir, include_transform_export_handler, GLOBAL_EXPORT_DICT @@ -707,6 +708,96 @@ def test_export_cloudformation_stack_no_upload_path_not_file(self): stack_resource.export(resource_id, resource_dict, "dir") self.s3_uploader_mock.upload_with_dedup.assert_not_called() + @patch("awscli.customizations.cloudformation.artifact_exporter.Template") + def test_export_serverless_application(self, TemplateMock): + stack_resource = ServerlessApplicationResource(self.s3_uploader_mock) + + resource_id = "id" + property_name = stack_resource.PROPERTY_NAME + exported_template_dict = {"foo": "bar"} + result_s3_url = "s3://hello/world" + result_path_style_s3_url = "http://s3.amazonws.com/hello/world" + + template_instance_mock = Mock() + TemplateMock.return_value = template_instance_mock + template_instance_mock.export.return_value = exported_template_dict + + self.s3_uploader_mock.upload_with_dedup.return_value = result_s3_url + self.s3_uploader_mock.to_path_style_s3_url.return_value = result_path_style_s3_url + + with tempfile.NamedTemporaryFile() as handle: + template_path = handle.name + resource_dict = {property_name: template_path} + parent_dir = tempfile.gettempdir() + + stack_resource.export(resource_id, resource_dict, parent_dir) + + self.assertEquals(resource_dict[property_name], result_path_style_s3_url) + + TemplateMock.assert_called_once_with(template_path, parent_dir, self.s3_uploader_mock) + template_instance_mock.export.assert_called_once_with() + self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(mock.ANY, "template") + self.s3_uploader_mock.to_path_style_s3_url.assert_called_once_with("world", None) + + def test_export_serverless_application_no_upload_path_is_s3url(self): + stack_resource = ServerlessApplicationResource(self.s3_uploader_mock) + resource_id = "id" + property_name = stack_resource.PROPERTY_NAME + s3_url = "s3://hello/world" + resource_dict = {property_name: s3_url} + + # Case 1: Path is already S3 url + stack_resource.export(resource_id, resource_dict, "dir") + self.assertEquals(resource_dict[property_name], s3_url) + self.s3_uploader_mock.upload_with_dedup.assert_not_called() + + def test_export_serverless_application_no_upload_path_is_httpsurl(self): + stack_resource = ServerlessApplicationResource(self.s3_uploader_mock) + resource_id = "id" + property_name = stack_resource.PROPERTY_NAME + s3_url = "https://s3.amazonaws.com/hello/world" + resource_dict = {property_name: s3_url} + + # Case 1: Path is already S3 url + stack_resource.export(resource_id, resource_dict, "dir") + self.assertEquals(resource_dict[property_name], s3_url) + self.s3_uploader_mock.upload_with_dedup.assert_not_called() + + def test_export_serverless_application_no_upload_path_is_empty(self): + stack_resource = ServerlessApplicationResource(self.s3_uploader_mock) + resource_id = "id" + property_name = stack_resource.PROPERTY_NAME + + # Case 2: Path is empty + resource_dict = {} + stack_resource.export(resource_id, resource_dict, "dir") + self.assertEquals(resource_dict, {}) + self.s3_uploader_mock.upload_with_dedup.assert_not_called() + + def test_export_serverless_application_no_upload_path_not_file(self): + stack_resource = ServerlessApplicationResource(self.s3_uploader_mock) + resource_id = "id" + property_name = stack_resource.PROPERTY_NAME + + # Case 3: Path is not a file + with self.make_temp_dir() as dirname: + resource_dict = {property_name: dirname} + with self.assertRaises(exceptions.ExportFailedError): + stack_resource.export(resource_id, resource_dict, "dir") + self.s3_uploader_mock.upload_with_dedup.assert_not_called() + + def test_export_serverless_application_no_upload_path_is_dictionary(self): + stack_resource = ServerlessApplicationResource(self.s3_uploader_mock) + resource_id = "id" + property_name = stack_resource.PROPERTY_NAME + + # Case 4: Path is dictionary + location = {"ApplicationId": "id", "SemanticVersion": "1.0.1"} + resource_dict = {property_name: location} + stack_resource.export(resource_id, resource_dict, "dir") + self.assertEquals(resource_dict[property_name], location) + self.s3_uploader_mock.upload_with_dedup.assert_not_called() + @patch("awscli.customizations.cloudformation.artifact_exporter.yaml_parse") def test_template_export(self, yaml_parse_mock): parent_dir = os.path.sep @@ -849,7 +940,7 @@ def test_include_transform_export_handler_non_local_file(self, is_local_file_moc handler_output = include_transform_export_handler({"Name": "AWS::Include", "Parameters": {"Location": "http://foo.yaml"}}, self.s3_uploader_mock) self.s3_uploader_mock.upload_with_dedup.assert_not_called() self.assertEquals(handler_output, {"Name": "AWS::Include", "Parameters": {"Location": "http://foo.yaml"}}) - + @patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file") def test_include_transform_export_handler_non_include_transform(self, is_local_file_mock): #ignores transform that is not aws::include From 80c472e2fc90e5f9ec0ab52f945baeb00fc87be3 Mon Sep 17 00:00:00 2001 From: Jacob Fuss Date: Wed, 3 Oct 2018 12:51:48 -0700 Subject: [PATCH 3/5] Support for packaging LayerVersion Artifacts Lambda introduced a Resource called LayerVersion. Locally, this Resource can point to a local path/artifact to enable local development. The aws cloudformation package command will now support packaging of this resources local artifacts and publish them to S3. --- .../cloudformation/artifact_exporter.py | 18 +++++++++++++++++- .../cloudformation/test_artifact_exporter.py | 15 +++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/awscli/customizations/cloudformation/artifact_exporter.py b/awscli/customizations/cloudformation/artifact_exporter.py index 9fd1a20efa73..9f4c0a286335 100644 --- a/awscli/customizations/cloudformation/artifact_exporter.py +++ b/awscli/customizations/cloudformation/artifact_exporter.py @@ -370,6 +370,21 @@ class ElasticBeanstalkApplicationVersion(ResourceWithS3UrlDict): VERSION_PROPERTY = None +class LambdaLayerVersionResource(ResourceWithS3UrlDict): + RESOURCE_TYPE = "AWS::Lambda::LayerVersion" + PROPERTY_NAME = "Content" + BUCKET_NAME_PROPERTY = "S3Bucket" + OBJECT_KEY_PROPERTY = "S3Key" + VERSION_PROPERTY = "S3ObjectVersion" + FORCE_ZIP = True + + +class ServerlessLayerVersionResource(Resource): + RESOURCE_TYPE = "AWS::Serverless::LayerVersion" + PROPERTY_NAME = "ContentUri" + FORCE_ZIP = True + + class CloudFormationStackResource(Resource): """ Represents CloudFormation::Stack resource that can refer to a nested @@ -439,7 +454,8 @@ class ServerlessApplicationResource(CloudFormationStackResource): LambdaFunctionResource, ElasticBeanstalkApplicationVersion, CloudFormationStackResource, - ServerlessApplicationResource + ServerlessApplicationResource, + LambdaLayerVersionResource, ] def include_transform_export_handler(template_dict, uploader): diff --git a/tests/unit/customizations/cloudformation/test_artifact_exporter.py b/tests/unit/customizations/cloudformation/test_artifact_exporter.py index 7111cfa33153..d6c823df8932 100644 --- a/tests/unit/customizations/cloudformation/test_artifact_exporter.py +++ b/tests/unit/customizations/cloudformation/test_artifact_exporter.py @@ -19,8 +19,9 @@ ServerlessFunctionResource, GraphQLSchemaResource, \ LambdaFunctionResource, ApiGatewayRestApiResource, \ ElasticBeanstalkApplicationVersion, CloudFormationStackResource, \ - ServerlessApplicationResource, \ - copy_to_temp_dir, include_transform_export_handler, GLOBAL_EXPORT_DICT + ServerlessApplicationResource, LambdaLayerVersionResource, \ + copy_to_temp_dir, include_transform_export_handler, GLOBAL_EXPORT_DICT, \ + ServerlessLayerVersionResource def test_is_s3_url(): @@ -96,6 +97,16 @@ def test_all_resources_export(): "S3Bucket": "foo", "S3Key": "bar" } }, + { + "class": LambdaLayerVersionResource, + "expected_result": { + "S3Bucket": "foo", "S3Key": "bar", "S3ObjectVersion": "baz" + } + }, + { + "class": ServerlessLayerVersionResource, + "expected_result": uploaded_s3_url + }, ] with patch("awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts") as upload_local_artifacts_mock: From db7e40e8dd0b13dcbc64f952f2ce751701d334d4 Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Thu, 29 Nov 2018 10:31:10 -0800 Subject: [PATCH 4/5] Update changelog based on model updates --- .changes/next-release/api-change-elbv2-6884.json | 5 +++++ .changes/next-release/api-change-events-13082.json | 5 +++++ .changes/next-release/api-change-kafka-45625.json | 5 +++++ .changes/next-release/api-change-lambda-47811.json | 5 +++++ .changes/next-release/api-change-s3-76352.json | 5 +++++ .changes/next-release/api-change-serverlessrepo-56229.json | 5 +++++ .changes/next-release/api-change-stepfunctions-37261.json | 5 +++++ .changes/next-release/api-change-xray-65364.json | 5 +++++ 8 files changed, 40 insertions(+) create mode 100644 .changes/next-release/api-change-elbv2-6884.json create mode 100644 .changes/next-release/api-change-events-13082.json create mode 100644 .changes/next-release/api-change-kafka-45625.json create mode 100644 .changes/next-release/api-change-lambda-47811.json create mode 100644 .changes/next-release/api-change-s3-76352.json create mode 100644 .changes/next-release/api-change-serverlessrepo-56229.json create mode 100644 .changes/next-release/api-change-stepfunctions-37261.json create mode 100644 .changes/next-release/api-change-xray-65364.json diff --git a/.changes/next-release/api-change-elbv2-6884.json b/.changes/next-release/api-change-elbv2-6884.json new file mode 100644 index 000000000000..31c896a91796 --- /dev/null +++ b/.changes/next-release/api-change-elbv2-6884.json @@ -0,0 +1,5 @@ +{ + "category": "``elbv2``", + "type": "api-change", + "description": "Update elbv2 command to latest version" +} diff --git a/.changes/next-release/api-change-events-13082.json b/.changes/next-release/api-change-events-13082.json new file mode 100644 index 000000000000..cf99ddafd278 --- /dev/null +++ b/.changes/next-release/api-change-events-13082.json @@ -0,0 +1,5 @@ +{ + "category": "``events``", + "type": "api-change", + "description": "Update events command to latest version" +} diff --git a/.changes/next-release/api-change-kafka-45625.json b/.changes/next-release/api-change-kafka-45625.json new file mode 100644 index 000000000000..8d0d7a5c66ea --- /dev/null +++ b/.changes/next-release/api-change-kafka-45625.json @@ -0,0 +1,5 @@ +{ + "category": "``kafka``", + "type": "api-change", + "description": "Update kafka command to latest version" +} diff --git a/.changes/next-release/api-change-lambda-47811.json b/.changes/next-release/api-change-lambda-47811.json new file mode 100644 index 000000000000..cbe702338e38 --- /dev/null +++ b/.changes/next-release/api-change-lambda-47811.json @@ -0,0 +1,5 @@ +{ + "category": "``lambda``", + "type": "api-change", + "description": "Update lambda command to latest version" +} diff --git a/.changes/next-release/api-change-s3-76352.json b/.changes/next-release/api-change-s3-76352.json new file mode 100644 index 000000000000..60945f9c86ca --- /dev/null +++ b/.changes/next-release/api-change-s3-76352.json @@ -0,0 +1,5 @@ +{ + "category": "``s3``", + "type": "api-change", + "description": "Update s3 command to latest version" +} diff --git a/.changes/next-release/api-change-serverlessrepo-56229.json b/.changes/next-release/api-change-serverlessrepo-56229.json new file mode 100644 index 000000000000..2ba275c4129b --- /dev/null +++ b/.changes/next-release/api-change-serverlessrepo-56229.json @@ -0,0 +1,5 @@ +{ + "category": "``serverlessrepo``", + "type": "api-change", + "description": "Update serverlessrepo command to latest version" +} diff --git a/.changes/next-release/api-change-stepfunctions-37261.json b/.changes/next-release/api-change-stepfunctions-37261.json new file mode 100644 index 000000000000..15b47bf8253e --- /dev/null +++ b/.changes/next-release/api-change-stepfunctions-37261.json @@ -0,0 +1,5 @@ +{ + "category": "``stepfunctions``", + "type": "api-change", + "description": "Update stepfunctions command to latest version" +} diff --git a/.changes/next-release/api-change-xray-65364.json b/.changes/next-release/api-change-xray-65364.json new file mode 100644 index 000000000000..03897af01c89 --- /dev/null +++ b/.changes/next-release/api-change-xray-65364.json @@ -0,0 +1,5 @@ +{ + "category": "``xray``", + "type": "api-change", + "description": "Update xray command to latest version" +} From 175935658150dff036ff5c6ec0f37d5551b47a4b Mon Sep 17 00:00:00 2001 From: aws-sdk-python-automation Date: Thu, 29 Nov 2018 10:57:00 -0800 Subject: [PATCH 5/5] Bumping version to 1.16.66 --- .changes/1.16.66.json | 42 +++++++++++++++++++ .../next-release/api-change-elbv2-6884.json | 5 --- .../next-release/api-change-events-13082.json | 5 --- .../next-release/api-change-kafka-45625.json | 5 --- .../next-release/api-change-lambda-47811.json | 5 --- .../next-release/api-change-s3-76352.json | 5 --- .../api-change-serverlessrepo-56229.json | 5 --- .../api-change-stepfunctions-37261.json | 5 --- .../next-release/api-change-xray-65364.json | 5 --- CHANGELOG.rst | 13 ++++++ awscli/__init__.py | 2 +- doc/source/conf.py | 2 +- setup.cfg | 2 +- setup.py | 2 +- 14 files changed, 59 insertions(+), 44 deletions(-) create mode 100644 .changes/1.16.66.json delete mode 100644 .changes/next-release/api-change-elbv2-6884.json delete mode 100644 .changes/next-release/api-change-events-13082.json delete mode 100644 .changes/next-release/api-change-kafka-45625.json delete mode 100644 .changes/next-release/api-change-lambda-47811.json delete mode 100644 .changes/next-release/api-change-s3-76352.json delete mode 100644 .changes/next-release/api-change-serverlessrepo-56229.json delete mode 100644 .changes/next-release/api-change-stepfunctions-37261.json delete mode 100644 .changes/next-release/api-change-xray-65364.json diff --git a/.changes/1.16.66.json b/.changes/1.16.66.json new file mode 100644 index 000000000000..508d169b6cad --- /dev/null +++ b/.changes/1.16.66.json @@ -0,0 +1,42 @@ +[ + { + "category": "``lambda``", + "description": "Update lambda command to latest version", + "type": "api-change" + }, + { + "category": "``stepfunctions``", + "description": "Update stepfunctions command to latest version", + "type": "api-change" + }, + { + "category": "``kafka``", + "description": "Update kafka command to latest version", + "type": "api-change" + }, + { + "category": "``xray``", + "description": "Update xray command to latest version", + "type": "api-change" + }, + { + "category": "``serverlessrepo``", + "description": "Update serverlessrepo command to latest version", + "type": "api-change" + }, + { + "category": "``elbv2``", + "description": "Update elbv2 command to latest version", + "type": "api-change" + }, + { + "category": "``events``", + "description": "Update events command to latest version", + "type": "api-change" + }, + { + "category": "``s3``", + "description": "Update s3 command to latest version", + "type": "api-change" + } +] \ No newline at end of file diff --git a/.changes/next-release/api-change-elbv2-6884.json b/.changes/next-release/api-change-elbv2-6884.json deleted file mode 100644 index 31c896a91796..000000000000 --- a/.changes/next-release/api-change-elbv2-6884.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "category": "``elbv2``", - "type": "api-change", - "description": "Update elbv2 command to latest version" -} diff --git a/.changes/next-release/api-change-events-13082.json b/.changes/next-release/api-change-events-13082.json deleted file mode 100644 index cf99ddafd278..000000000000 --- a/.changes/next-release/api-change-events-13082.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "category": "``events``", - "type": "api-change", - "description": "Update events command to latest version" -} diff --git a/.changes/next-release/api-change-kafka-45625.json b/.changes/next-release/api-change-kafka-45625.json deleted file mode 100644 index 8d0d7a5c66ea..000000000000 --- a/.changes/next-release/api-change-kafka-45625.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "category": "``kafka``", - "type": "api-change", - "description": "Update kafka command to latest version" -} diff --git a/.changes/next-release/api-change-lambda-47811.json b/.changes/next-release/api-change-lambda-47811.json deleted file mode 100644 index cbe702338e38..000000000000 --- a/.changes/next-release/api-change-lambda-47811.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "category": "``lambda``", - "type": "api-change", - "description": "Update lambda command to latest version" -} diff --git a/.changes/next-release/api-change-s3-76352.json b/.changes/next-release/api-change-s3-76352.json deleted file mode 100644 index 60945f9c86ca..000000000000 --- a/.changes/next-release/api-change-s3-76352.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "category": "``s3``", - "type": "api-change", - "description": "Update s3 command to latest version" -} diff --git a/.changes/next-release/api-change-serverlessrepo-56229.json b/.changes/next-release/api-change-serverlessrepo-56229.json deleted file mode 100644 index 2ba275c4129b..000000000000 --- a/.changes/next-release/api-change-serverlessrepo-56229.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "category": "``serverlessrepo``", - "type": "api-change", - "description": "Update serverlessrepo command to latest version" -} diff --git a/.changes/next-release/api-change-stepfunctions-37261.json b/.changes/next-release/api-change-stepfunctions-37261.json deleted file mode 100644 index 15b47bf8253e..000000000000 --- a/.changes/next-release/api-change-stepfunctions-37261.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "category": "``stepfunctions``", - "type": "api-change", - "description": "Update stepfunctions command to latest version" -} diff --git a/.changes/next-release/api-change-xray-65364.json b/.changes/next-release/api-change-xray-65364.json deleted file mode 100644 index 03897af01c89..000000000000 --- a/.changes/next-release/api-change-xray-65364.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "category": "``xray``", - "type": "api-change", - "description": "Update xray command to latest version" -} diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 231064344a9a..fed7a3e67821 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,19 @@ CHANGELOG ========= +1.16.66 +======= + +* api-change:``lambda``: Update lambda command to latest version +* api-change:``stepfunctions``: Update stepfunctions command to latest version +* api-change:``kafka``: Update kafka command to latest version +* api-change:``xray``: Update xray command to latest version +* api-change:``serverlessrepo``: Update serverlessrepo command to latest version +* api-change:``elbv2``: Update elbv2 command to latest version +* api-change:``events``: Update events command to latest version +* api-change:``s3``: Update s3 command to latest version + + 1.16.65 ======= diff --git a/awscli/__init__.py b/awscli/__init__.py index f6650b17b6bf..12931d8eeb6f 100644 --- a/awscli/__init__.py +++ b/awscli/__init__.py @@ -17,7 +17,7 @@ """ import os -__version__ = '1.16.65' +__version__ = '1.16.66' # # Get our data path to be added to botocore's search path diff --git a/doc/source/conf.py b/doc/source/conf.py index eaaa4a7f8e14..3afbeea5ff56 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -52,7 +52,7 @@ # The short X.Y version. version = '1.16.' # The full version, including alpha/beta/rc tags. -release = '1.16.65' +release = '1.16.66' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/setup.cfg b/setup.cfg index 4a8d66417cba..46baa61171a0 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,7 +4,7 @@ universal = 1 [metadata] requires-dist = - botocore==1.12.55 + botocore==1.12.56 colorama>=0.2.5,<=0.3.9 docutils>=0.10 rsa>=3.1.2,<=3.5.0 diff --git a/setup.py b/setup.py index b37f0bc66ac0..e54845698057 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ def find_version(*file_paths): raise RuntimeError("Unable to find version string.") -requires = ['botocore==1.12.55', +requires = ['botocore==1.12.56', 'colorama>=0.2.5,<=0.3.9', 'docutils>=0.10', 'rsa>=3.1.2,<=3.5.0',