runtheops / ssm-diff

A human-friendly way of managing parameters in AWS SSM
MIT License
46 stars 25 forks source link

Improved concurrency handling in `pull` #16

Open ambsw-technology opened 5 years ago

ambsw-technology commented 5 years ago

I've been digging through the implementation and it looks like the force flag in pull only supports two modes:

It would be nice to be able to provide more granular concurrency options. For example, consider the following three cases:

  1. Key1 changed locally but not on SSM
  2. Key1 changed locally and was changed in SSM
  3. Key1 only changed on SSM

In git, the pull behavior is more like:

  1. Preserves this value
  2. Identifies the conflict and throws an exception (unless you prefer-local or prefer-remote)
  3. Update this value

It'd be nice to support something similar.

ambsw-technology commented 5 years ago

If it isn't obvious, this request requires a local file that stores the remote values from the last time pull or init was run. I'd probably create a file like <filename>.orig right next to <filename>.yml.

ambsw-technology commented 5 years ago

As I dig deeper, I think the following case will result in unwanted behavior in the current implementation:

In both cases, the pull will treat the local a/b/x key as "added". The key will be retained and restored to SSM when apply is run. Most users will probably want the tool to recognize the remote delete and update the local file accordingly.