Skip to content

Conversation

arthurian
Copy link

@arthurian arthurian commented Oct 19, 2021

This PR fixes an issue related to #28 so that it's possible to pull parameters that have values anywhere along the path. Currently, an error is raised if a parameter has a value and then that parameter participates in a longer path.

Given these remote parameters:

/qa/ci               = ci_value
/qa/ci/api           = api_value
/qa/ci/api/db_schema = schema_value
/qa/ci/api/db_user   = user_value

The YAML representation would look like this:

qa:
  ci:
    '@value': ci_value
    api:
      '@value': api_value
      db_schema: schema_value
      db_user: user_value

Since the @ character is not allowed in parameter names, @value is used as the mapping key for intermediate path values (must be quoted). There should be no conflict with remote parameters and any attempt to update a remote parameter would result in an error.

To apply changes, simply treat @value as any other key and then run ssm-diff plan and ssm-diff apply. For example, changing the YAML to this:

qa:
  ci:
    api:
      '@value': api_value_changed
      db_schema: schema_value
      db_user: user_value

Would result in the following plan to remove /qa/ci and update /qa/ci/api:

- /qa/ci
~ /qa/ci/api:
	< api_value
	> api_value_changed

@runtheops

Internal values are represented in the YAML with a parameter name that
is considered invalid by the Parameter Store, so there is no chance of
conflict.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant