-
Notifications
You must be signed in to change notification settings - Fork 9.5k
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
command: Fix state mv for only resource in module #25523
Conversation
Codecov Report
|
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.
Excellent, and what an interesting subtle bug!
@@ -223,7 +220,7 @@ func (c *StateMvCommand) Run(args []string) int { | |||
|
|||
// Update the address before adding it to the state. | |||
rs.Addr = addrTo | |||
stateTo.Module(addrTo.Module).Resources[addrTo.Resource.String()] = rs | |||
stateTo.EnsureModule(addrTo.Module).Resources[addrTo.Resource.String()] = rs |
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 that this also clears up a bit of redundancy (more like unnecessary code) since EnsureModule is safe to run in place of Module (here, that is)!
When moving a resource block with multiple instances to a new address within the same module, we need to ensure that the target module is present as late as possible. Otherwise, deleting the resource from the original address triggers pruning, and the module is removed just before we try to add the resource to it, which causes a crash. Includes regression test which panics without this code change.
6c478b9
to
17e1c9d
Compare
I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further. |
When moving a resource block with multiple instances to a new address within the same module, we need to ensure that the target module is present as late as possible. Otherwise, deleting the resource from the original address triggers pruning, and the module is removed just before we try to add the resource to it, which causes a crash.
Includes regression test which panics without this code change.
Fixes #25520