-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for resolving dynamic ssm values #268
Conversation
26adb29
to
f180250
Compare
This adds support for resolving the two types of SSM dynamic references: 1. [SSM PlainText](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references-ssm.html) 2. [SSM SecureString](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references-ssm-secure-strings.html) closes #200
f180250
to
2df4985
Compare
src/converters/ssm-dynamic.ts
Outdated
* @param value - A fully resolved value that may contain a ssm dynamic reference | ||
* @returns A secret output if the value is a ssm dynamic reference, otherwise the original value | ||
*/ | ||
export function processSSMReferenceValue(parent: pulumi.Resource, value: any): any { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could be made slightly more elegant (but also feel free to disregard), if the functions such as parseSSMDynamicSecureStringReference returned an error code instead of throwing an exception. Then they could be combined by trying it out sequentially to parse case A, case B, or case C. In particular the glue code here would not need to perform tests on v.startsWith
anymore.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like this idea. I updated it to have a single function for all dynamic values with fallthrough.
src/converters/ssm-dynamic.ts
Outdated
* @returns A secret output if the value is a ssm dynamic reference, otherwise the original value | ||
*/ | ||
export function processSSMReferenceValue(parent: pulumi.Resource, value: any): any { | ||
let returnValue = value; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Possibly better to just use lift
? It also will take care of promises, not just Output values, which do arise.
const f = (value: any) => {
// safely assume value is not an output here
if (typeof value === 'string) {
// try transforming refs
} else {
return value;
}
};
return lift(f, value);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using lift requires some additional knowledge/handling of the types going into lift (e.g arrays need to be handled as arrays). I took the necessary pieces from lift to make this better.
This PR has been shipped in release v1.1.0. |
This adds support for resolving the two types of SSM dynamic references:
closes #200