Skip to content

Commit 7add672

Browse files
authored
[FIX] Fix interpolation validation with secrets (#5)
1 parent 8e39e53 commit 7add672

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

himl/config_generator.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,20 +53,21 @@ def process(self, cwd=None, path=None, filters=(), exclude_keys=(), enclosing_ke
5353
generator.add_dynamic_data()
5454
generator.resolve_interpolations()
5555

56-
if len(filters) > 0:
57-
generator.filter_data(filters)
58-
59-
if len(exclude_keys) > 0:
60-
generator.exclude_keys(exclude_keys)
61-
6256
if not skip_secrets:
63-
generator.resolve_secrets()
57+
default_aws_profile = self.get_default_aws_profile(generator.generated_data)
58+
generator.resolve_secrets(default_aws_profile)
6459
# Perform another resolving, in case some secrets are used as interpolations.
6560
# Example:
6661
# value1: "{{ssm.mysecret}}"
6762
# value2: "something-{{value1}} <--- this will be resolved at this step
6863
generator.resolve_interpolations()
6964

65+
if len(filters) > 0:
66+
generator.filter_data(filters)
67+
68+
if len(exclude_keys) > 0:
69+
generator.exclude_keys(exclude_keys)
70+
7071
if not skip_interpolation_validation:
7172
generator.validate_interpolations()
7273

@@ -83,6 +84,10 @@ def process(self, cwd=None, path=None, filters=(), exclude_keys=(), enclosing_ke
8384

8485
return data
8586

87+
@staticmethod
88+
def get_default_aws_profile(data):
89+
return data['aws']['profile'] if 'aws' in data and 'profile' in data['aws'] else None
90+
8691
@staticmethod
8792
def get_relative_path(path):
8893
cwd = os.path.join(os.getcwd(), '')
@@ -230,9 +235,9 @@ def resolve_interpolations(self):
230235
resolver = InterpolationResolver()
231236
self.generated_data = resolver.resolve_interpolations(self.generated_data)
232237

233-
def resolve_secrets(self):
238+
def resolve_secrets(self, default_aws_profile):
234239
resolver = SecretResolver()
235-
self.generated_data = resolver.resolve_secrets(self.generated_data)
240+
self.generated_data = resolver.resolve_secrets(self.generated_data, default_aws_profile)
236241

237242
def validate_interpolations(self):
238243
self.interpolation_validator.check_all_interpolations_resolved(self.generated_data)

himl/interpolation.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,16 @@ def resolve_interpolations(self, data):
4343

4444
class SecretResolver(object):
4545

46-
def resolve_secrets(self, data):
46+
def resolve_secrets(self, data, default_aws_profile):
4747
# Resolve interpolations representing secrets
4848
# Example:
4949
# value1: "{{ssm.path(mysecret)}}"
50-
secrets_injector = SecretsInterpolationResolver(self.get_secret_injector(data))
51-
secrets_injector.resolve_interpolations(data)
50+
injector = SecretInjector(default_aws_profile)
51+
secrets_resolver = SecretsInterpolationResolver(injector)
52+
secrets_resolver.resolve_interpolations(data)
5253

5354
return data
5455

55-
def get_secret_injector(self, data):
56-
default_aws_profile = data['aws']['profile'] if 'aws' in data and 'profile' in data['aws'] else None
57-
return SecretInjector(default_aws_profile)
58-
5956

6057
class DictIterator(object):
6158

0 commit comments

Comments
 (0)