From 5e45c1c00e1b720846a1b173a8a5329c4a996a54 Mon Sep 17 00:00:00 2001 From: Gonzalo Sanchez Date: Wed, 21 Apr 2021 15:28:29 -0300 Subject: [PATCH 1/3] Specify aws creds and connection params in the client --- src/param_store/stores.py | 7 +++++-- tests/test_stores.py | 27 +++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/param_store/stores.py b/src/param_store/stores.py index b9cbabe..e3ee1bc 100644 --- a/src/param_store/stores.py +++ b/src/param_store/stores.py @@ -10,10 +10,13 @@ def load_values(self, items): class EC2ParameterStore(BaseStore): - def __init__(self): + def __init__(self, aws_config=None): import boto3 - self.client = boto3.client("ssm") + if isinstance(aws_config, dict): + self.client = boto3.client("ssm", **aws_config) + else: + self.client = boto3.client("ssm") def load_values(self, items): """Load the parameters from the AWS Parameter Store. diff --git a/tests/test_stores.py b/tests/test_stores.py index 5bb3268..f84714d 100644 --- a/tests/test_stores.py +++ b/tests/test_stores.py @@ -6,17 +6,19 @@ @moto.mock_ssm def test_ec2_parameter_store(): - ssm = boto3.client("ssm", region_name="eu-west-1") + region_name = "eu-west-1" + ssm = boto3.client("ssm", region_name=region_name) ssm.put_parameter(Name="key", Value="hoi", Type="SecureString") ssm.put_parameter(Name="second-key", Value="doei", Type="String") - store = EC2ParameterStore() + store = EC2ParameterStore(aws_config={"region_name": region_name}) result = store.load_values(["key", "second-key", "non-existing-key"]) assert result == {"key": "hoi", "second-key": "doei"} @moto.mock_ssm def test_ec2_parameter_store_many(): + region_name = "eu-west-1" data = { "/path/key/a": "a", "/path/key/b": "b", @@ -30,15 +32,32 @@ def test_ec2_parameter_store_many(): "/path/key/j": "j", "/path/key/k": "k", } - ssm = boto3.client("ssm", region_name="eu-west-1") + ssm = boto3.client("ssm", region_name=region_name) for key, value in data.items(): ssm.put_parameter(Name=key, Value=value, Type="String") - store = EC2ParameterStore() + store = EC2ParameterStore(aws_config={"region_name": region_name}) result = store.load_values(list(data.keys())) assert result == data +@moto.mock_ssm +def test_ec2_parameter_store_different_parameters(): + right_region_name = "eu-west-1" + key_wanted = "key-eu-weast-1" + ssm = boto3.client("ssm", region_name=right_region_name) + ssm.put_parameter(Name=key_wanted, Value="hoi", Type="SecureString") + + store = EC2ParameterStore(aws_config={"region_name": "us-east-1"}) + result = store.load_values([key_wanted]) + assert key_wanted not in result + + store = EC2ParameterStore(aws_config={"region_name": right_region_name}) + result = store.load_values([key_wanted]) + assert key_wanted in result + assert result == {key_wanted: "hoi"} + + def test_file_parameter_store(tmpdir): secret_path = tmpdir.mkdir("secrets") secret_path.join("key").write("hoi") From 06a78cc68791feb57c49f1044b557e493f9f8133 Mon Sep 17 00:00:00 2001 From: Gonzalo Sanchez Date: Wed, 21 Apr 2021 15:32:33 -0300 Subject: [PATCH 2/3] Revert chagnes to prev tests --- tests/test_stores.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/test_stores.py b/tests/test_stores.py index f84714d..f8f188c 100644 --- a/tests/test_stores.py +++ b/tests/test_stores.py @@ -6,19 +6,17 @@ @moto.mock_ssm def test_ec2_parameter_store(): - region_name = "eu-west-1" - ssm = boto3.client("ssm", region_name=region_name) + ssm = boto3.client("ssm", region_name="eu-west-1") ssm.put_parameter(Name="key", Value="hoi", Type="SecureString") ssm.put_parameter(Name="second-key", Value="doei", Type="String") - store = EC2ParameterStore(aws_config={"region_name": region_name}) + store = EC2ParameterStore() result = store.load_values(["key", "second-key", "non-existing-key"]) assert result == {"key": "hoi", "second-key": "doei"} @moto.mock_ssm def test_ec2_parameter_store_many(): - region_name = "eu-west-1" data = { "/path/key/a": "a", "/path/key/b": "b", @@ -32,11 +30,11 @@ def test_ec2_parameter_store_many(): "/path/key/j": "j", "/path/key/k": "k", } - ssm = boto3.client("ssm", region_name=region_name) + ssm = boto3.client("ssm", region_name="eu-west-1") for key, value in data.items(): ssm.put_parameter(Name=key, Value=value, Type="String") - store = EC2ParameterStore(aws_config={"region_name": region_name}) + store = EC2ParameterStore() result = store.load_values(list(data.keys())) assert result == data From dd26873b77058e287e1f3ff6dc11170a55ddd91f Mon Sep 17 00:00:00 2001 From: Gonzalo Sanchez Date: Wed, 21 Apr 2021 15:36:05 -0300 Subject: [PATCH 3/3] Add use explanation --- README.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.rst b/README.rst index 1615d76..31cfede 100644 --- a/README.rst +++ b/README.rst @@ -50,6 +50,25 @@ As a standalone package result = interpolate_dict(data, store) assert result[key] == 'my-secret-password' +Using custom configuration parameters + +.. code-block:: python + + from param_store import EC2ParameterStore + from param_store import interpolate_dict + + data = { + 'key': 'my-secret-{{ parameter-1 }}' + } + + aws_config = { + "region_name": "us-east-1", + "aws_access_key_id": "YOUR_NEW_ACCESS_KEY" + } + + store = EC2ParameterStore(aws_config=aws_config) + result = interpolate_dict(data, store) + assert result[key] == 'my-secret-password' In combination with django-environ