-
Notifications
You must be signed in to change notification settings - Fork 232
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Type Block need handle attribute marked as removed contionally.
In some provider, e.g. AzureRM, TypeSet is use quite prevalent to hold a set of sub-resources (e.g. security_rule in azurerm_network_security_group). The reason for using TypeSet instead of TypeList might because service return a collection of info with arbitrary order, or other reasons. In this case: Given a slice of nested blocks, if one of the nested block (B1) attributes is optional and has no default value, and user didn't specify a value for it. Then if another nested block (B2) changed, which triggers some diff, then B1 will also be replaced. That is because the optional attribute contribute a diff of "zero value" -> `null`, which changed the hash of the block. This fix is to carefully handle this case. We keep attribute marked as `NewRemoved` after a `diffString` only when all the attributes are marked as such. Otherwise, as long as one attribute is not marked to be removed, that means this block will be kept. Then we will manipulate the attributes in this block, which being marked as removed just because user didn't specify a value and the original value is the zero value. This keeps consistent as other Resource types (e.g. List Resource). (Though those type just remove the attribute from diff set, while for Set we need to return the complete state as we will not depend on the old state during diff apply).
- Loading branch information
Showing
2 changed files
with
204 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters