Config: Avoid emitting integers in objects using exponent notation #7005
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Config values that are objects are represented in memory as JSON strings. When a config map is being saved to a file, object values are first unmarshaled from JSON to
interface{}
and then the entire config map is marshaled to YAML (or JSON) and saved to disk. When an object value is unmarshaled from JSON, any numbers in the JSON string were being implicitly unmarshaled asfloat64
, which resulted in some numbers in the nested objects being emitted in YAML using exponent notation (e.g. a number12321123131
in an object value was being saved in the YAML as1.2321123131e+10
). To address this, when unmarshaling the JSON for an object value, first try to unmarshal any numbers asint64
, falling back tofloat64
.Fixes #6787
Before
Running
pulumi config set --path parent.nested 12321123131
resulted inPulumi.<stack>.yaml
having:After
Running
pulumi config set --path parent.nested 12321123131
resulted inPulumi.<stack>.yaml
having: