From b357a24f86faa75072919b593f870277a4c58093 Mon Sep 17 00:00:00 2001 From: Rob Russo Date: Tue, 29 Jun 2021 09:57:41 -0400 Subject: [PATCH 1/7] update how regions are determined (cherry picked from commit 663567de83e57905e5990d6b0527b96b344121bf) --- plugins/connection/aws_ssm.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/connection/aws_ssm.py b/plugins/connection/aws_ssm.py index 40724cfbbdb..0b5ddd63ed3 100644 --- a/plugins/connection/aws_ssm.py +++ b/plugins/connection/aws_ssm.py @@ -48,6 +48,10 @@ description: The name of the S3 bucket used for file transfers. vars: - name: ansible_aws_ssm_bucket_name + bucket_region: + description: The region of the S3 bucket used for file transfers. + vars: + - name: ansible_aws_ssm_bucket_region plugin: description: This defines the location of the session-manager-plugin binary. vars: @@ -534,7 +538,11 @@ def _flush_stderr(self, subprocess): def _get_url(self, client_method, bucket_name, out_path, http_method, profile_name, extra_args=None): ''' Generate URL for get_object / put_object ''' - region_name = self.get_option('region') or 'us-east-1' + region_name = self.get_option('bucket_region') + if region_name is None: + region_name = self.get_option('region') + if region_name is None: + region_name = 'us-east-1' client = self._get_boto_client('s3', region_name=region_name, profile_name=profile_name) params = {'Bucket': bucket_name, 'Key': out_path} if extra_args is not None: From 834c8f828cdd8d32ed366b706b9d4658014b1742 Mon Sep 17 00:00:00 2001 From: Guillaume GILL Date: Sat, 8 Jan 2022 22:01:33 +0100 Subject: [PATCH 2/7] Add some integration tests --- .../defaults/main.yml | 3 ++- .../tasks/main.yml | 19 ++++++++++--------- .../templates/inventory-combined.aws_ssm.j2 | 1 + .../templates/s3_vars_to_delete.yml.j2 | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/defaults/main.yml b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/defaults/main.yml index 513c35dae33..bc5239dcc34 100644 --- a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/defaults/main.yml +++ b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/defaults/main.yml @@ -7,4 +7,5 @@ windows_ami_name: Windows_Server-2019-English-Full-Base-* # see: # - https://github.com/mattclay/aws-terminator/pull/181 # - https://github.com/ansible-collections/community.aws/pull/763 -s3_bucket_name: ssm-encrypted-test-bucket +s3_bucket_name: "{{ resource_prefix }}-ssm-encrypted-test-bucket" +s3_bucket_region: us-west-2 diff --git a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/tasks/main.yml b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/tasks/main.yml index d81d756c34e..b32fa80fd01 100644 --- a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/tasks/main.yml +++ b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/tasks/main.yml @@ -109,10 +109,11 @@ tags: ansible-test: '{{ resource_prefix }}' - # - name: Create S3 bucket - # s3_bucket: - # name: "{{resource_prefix}}-aws-ssm-s3" - # register: s3_output + - name: Create S3 bucket + s3_bucket: + name: "{{ s3_bucket_name }}" + region: "{{ s3_bucket_region }}" + register: s3_output - name: Create Inventory file template: @@ -138,11 +139,11 @@ src: ec2_windows_vars_to_delete.yml.j2 ignore_errors: yes - # - name: Create S3 vars_to_delete.yml - # template: - # dest: "{{playbook_dir}}/s3_vars_to_delete.yml" - # src: s3_vars_to_delete.yml.j2 - # ignore_errors: yes + - name: Create S3 vars_to_delete.yml + template: + dest: "{{playbook_dir}}/s3_vars_to_delete.yml" + src: s3_vars_to_delete.yml.j2 + ignore_errors: yes - name: Create IAM Role vars_to_delete.yml template: diff --git a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/templates/inventory-combined.aws_ssm.j2 b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/templates/inventory-combined.aws_ssm.j2 index f8296e23044..adc4b79eb87 100644 --- a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/templates/inventory-combined.aws_ssm.j2 +++ b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/templates/inventory-combined.aws_ssm.j2 @@ -21,6 +21,7 @@ aws_ssm_linux [aws_ssm:vars] ansible_connection=community.aws.aws_ssm ansible_aws_ssm_bucket_name={{s3_bucket_name}} +ansible_aws_ssm_bucket_region={{s3_bucket_region}} ansible_aws_ssm_plugin=/usr/local/sessionmanagerplugin/bin/session-manager-plugin ansible_python_interpreter=/usr/bin/env python local_tmp=/tmp/ansible-local- diff --git a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/templates/s3_vars_to_delete.yml.j2 b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/templates/s3_vars_to_delete.yml.j2 index d29071a9f98..3839fb3c6ea 100644 --- a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/templates/s3_vars_to_delete.yml.j2 +++ b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/templates/s3_vars_to_delete.yml.j2 @@ -1,2 +1,2 @@ --- -#bucket_name: {{s3_output.name}} +bucket_name: {{s3_output.name}} From aa47fb868d611e83546bc48c52dc356e11f728f5 Mon Sep 17 00:00:00 2001 From: Guillaume GILL Date: Sat, 8 Jan 2022 22:10:37 +0100 Subject: [PATCH 3/7] Add changelog --- changelogs/fragments/ssm-bucket.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelogs/fragments/ssm-bucket.yml diff --git a/changelogs/fragments/ssm-bucket.yml b/changelogs/fragments/ssm-bucket.yml new file mode 100644 index 00000000000..2c46ced8734 --- /dev/null +++ b/changelogs/fragments/ssm-bucket.yml @@ -0,0 +1,2 @@ +minor_changes: + - aws_ssm connection plugin - added support for an independent bucket region (https://github.com/ansible-collections/community.aws/pull/854). \ No newline at end of file From 5d4f1c51cbf89661f29ab8fa570f5e861a95a18c Mon Sep 17 00:00:00 2001 From: Guillaume GILL Date: Sat, 8 Jan 2022 22:47:26 +0100 Subject: [PATCH 4/7] Fix versioning --- plugins/connection/aws_ssm.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/connection/aws_ssm.py b/plugins/connection/aws_ssm.py index 0b5ddd63ed3..8de5be0f5ae 100644 --- a/plugins/connection/aws_ssm.py +++ b/plugins/connection/aws_ssm.py @@ -52,6 +52,7 @@ description: The region of the S3 bucket used for file transfers. vars: - name: ansible_aws_ssm_bucket_region + version_added: 3.0.0 plugin: description: This defines the location of the session-manager-plugin binary. vars: From 6c7c9b08f09aa53e7ec128499bd17c10d2efd8a9 Mon Sep 17 00:00:00 2001 From: Guillaume GILL Date: Sat, 8 Jan 2022 22:48:55 +0100 Subject: [PATCH 5/7] Shorten test bucket name --- .../aws_ssm_integration_test_setup/defaults/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/defaults/main.yml b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/defaults/main.yml index bc5239dcc34..7640f8c14f1 100644 --- a/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/defaults/main.yml +++ b/tests/integration/targets/connection_aws_ssm/aws_ssm_integration_test_setup/defaults/main.yml @@ -7,5 +7,5 @@ windows_ami_name: Windows_Server-2019-English-Full-Base-* # see: # - https://github.com/mattclay/aws-terminator/pull/181 # - https://github.com/ansible-collections/community.aws/pull/763 -s3_bucket_name: "{{ resource_prefix }}-ssm-encrypted-test-bucket" +s3_bucket_name: "{{ tiny_prefix }}-ssm-encrypted-test-bucket" s3_bucket_region: us-west-2 From 3f29fd37a6b7bef0135af32680dfdeb250f765cc Mon Sep 17 00:00:00 2001 From: Guillaume GILL Date: Sun, 9 Jan 2022 08:52:49 +0100 Subject: [PATCH 6/7] Improve logic test --- .../fragments/{ssm-bucket.yml => 854-ssm-bucket-region.yml} | 0 plugins/connection/aws_ssm.py | 6 +----- 2 files changed, 1 insertion(+), 5 deletions(-) rename changelogs/fragments/{ssm-bucket.yml => 854-ssm-bucket-region.yml} (100%) diff --git a/changelogs/fragments/ssm-bucket.yml b/changelogs/fragments/854-ssm-bucket-region.yml similarity index 100% rename from changelogs/fragments/ssm-bucket.yml rename to changelogs/fragments/854-ssm-bucket-region.yml diff --git a/plugins/connection/aws_ssm.py b/plugins/connection/aws_ssm.py index 8de5be0f5ae..ea5e6509fbf 100644 --- a/plugins/connection/aws_ssm.py +++ b/plugins/connection/aws_ssm.py @@ -539,11 +539,7 @@ def _flush_stderr(self, subprocess): def _get_url(self, client_method, bucket_name, out_path, http_method, profile_name, extra_args=None): ''' Generate URL for get_object / put_object ''' - region_name = self.get_option('bucket_region') - if region_name is None: - region_name = self.get_option('region') - if region_name is None: - region_name = 'us-east-1' + region_name = self.get_option('bucket_region') or self.get_option('region') or 'us-east-1' client = self._get_boto_client('s3', region_name=region_name, profile_name=profile_name) params = {'Bucket': bucket_name, 'Key': out_path} if extra_args is not None: From 4780af1b55ee78ecd66e50c1b7672a2c2e877833 Mon Sep 17 00:00:00 2001 From: Guillaume GILL Date: Sun, 9 Jan 2022 14:39:26 +0100 Subject: [PATCH 7/7] Improve documentation --- plugins/connection/aws_ssm.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/plugins/connection/aws_ssm.py b/plugins/connection/aws_ssm.py index ea5e6509fbf..8b14b850fc4 100644 --- a/plugins/connection/aws_ssm.py +++ b/plugins/connection/aws_ssm.py @@ -49,7 +49,7 @@ vars: - name: ansible_aws_ssm_bucket_name bucket_region: - description: The region of the S3 bucket used for file transfers. + description: The region of the S3 bucket used for file transfers. By default inherit "region" or "us-east-1" if undefined. vars: - name: ansible_aws_ssm_bucket_region version_added: 3.0.0 @@ -136,10 +136,14 @@ #plugin: aws_ec2 #regions: # - us-east-1 +# - eu-west-1 #hostnames: # - instance-id #filters: # tag:SSMTag: ssmlinux +#compose: +# ansible_aws_ssm_instance_id: instance_id +# ansible_aws_ssm_region: location.region # ----------------------- - name: install aws-cli hosts: all @@ -147,7 +151,7 @@ vars: ansible_connection: aws_ssm ansible_aws_ssm_bucket_name: nameofthebucket - ansible_aws_ssm_region: us-east-1 + ansible_aws_ssm_bucket_region: eu-west-1 tasks: - name: aws-cli raw: yum install -y awscli @@ -159,10 +163,14 @@ #plugin: aws_ec2 #regions: # - us-east-1 +# - eu-west-1 #hostnames: # - instance-id #filters: # tag:SSMTag: ssmwindows +#compose: +# ansible_aws_ssm_instance_id: instance_id +# ansible_aws_ssm_region: location.region # ----------------------- - name: Create a dir. hosts: all @@ -171,7 +179,7 @@ ansible_connection: aws_ssm ansible_shell_type: powershell ansible_aws_ssm_bucket_name: nameofthebucket - ansible_aws_ssm_region: us-east-1 + ansible_aws_ssm_bucket_region: eu-west-1 tasks: - name: Create the directory win_file: @@ -185,7 +193,7 @@ vars: ansible_connection: aws_ssm ansible_aws_ssm_bucket_name: nameofthebucket - ansible_aws_ssm_region: us-west-2 + ansible_aws_ssm_bucket_region: us-west-2 ansible_aws_ssm_bucket_sse_mode: 'aws:kms' ansible_aws_ssm_bucket_sse_kms_key_id: alias/kms-key-alias tasks: