pulumi/pkg/resource
Sean Gillespie 2870518a64 Refine resource replacement logic for providers (#2767)
This commit touches an intersection of a few different provider-oriented
features that combined to cause a particularly severe bug that made it
impossible for users to upgrade provider versions without seeing
replacements with their resources.

For some context, Pulumi models all providers as resources and places
them in the snapshot like any other resource. Every resource has a
reference to the provider that created it. If a Pulumi program does not
specify a particular provider to use when performing a resource
operation, the Pulumi engine injects one automatically; these are called
"default providers" and are the most common ways that users end up with
providers in their snapshot. Default providers can be identified by
their name, which is always prefixed with "default".

Recently, in an effort to make the Pulumi engine more flexible with
provider versions, it was made possible for the engine to have multiple
default providers active for a provider of a particular type, which was
previously not possible. Because a provider is identified as a tuple of
package name and version, it was difficult to find a name for these
duplicate default providers that did not cause additional problems. The
provider versioning PR gave these default providers a name that was
derived from the version of the package. This proved to be a problem,
because when users upgraded from one version of a package to another,
this changed the name of their default provider which in turn caused all
of their resources created using that provider (read: everything) to be
replaced.

To combat this, this PR introduces a rule that the engine will apply
when diffing a resource to determine whether or not it needs to be
replaced: "If a resource's provider changes, and both old and new
providers are default providers whose properties do not require
replacement, proceed as if there were no diff." This allows the engine
to gracefully recognize and recover when a resource's default provider changes
names, as long as the provider's config has not changed.
2019-06-03 12:16:31 -07:00
..
config Encrypt secret values in deployments 2019-05-10 17:07:52 -07:00
deploy Refine resource replacement logic for providers (#2767) 2019-06-03 12:16:31 -07:00
edit Retain the SecretsManager that was used to deserialize a deployment 2019-05-10 17:07:52 -07:00
graph Process deletions conservatively in parallel (#1963) 2018-09-27 15:49:08 -07:00
plugin Use server information from NodeJS host for fetching plugins 2019-06-03 09:31:18 -07:00
provider Implement status sinks 2018-08-31 15:56:53 -07:00
stack Support aliases for renaming, re-typing, or re-parenting resources (#2774) 2019-05-31 23:01:01 -07:00
testdata Fix asset bugs; write more tests 2017-10-24 09:00:11 -07:00
asset.go Correctly handle FileArchives when the filename contains a dot 2019-03-28 13:26:07 -07:00
asset_test.go Correctly handle FileArchives when the filename contains a dot 2019-03-28 13:26:07 -07:00
errors.go Add license headers 2018-05-22 15:02:47 -07:00
properties.go Rework secret annotation algorithm slightly 2019-05-15 09:33:02 -07:00
properties_diff.go Fix a panic during property diffing 2019-05-15 16:20:25 -07:00
properties_diff_test.go Fix a panic during property diffing 2019-05-15 16:20:25 -07:00
properties_test.go Add license headers 2018-05-22 15:02:47 -07:00
resource_goal.go Support aliases for renaming, re-typing, or re-parenting resources (#2774) 2019-05-31 23:01:01 -07:00
resource_id.go Add license headers 2018-05-22 15:02:47 -07:00
resource_id_test.go Adopt golangci-lint and address issues 2018-11-08 14:11:47 -08:00
resource_operation.go Add a list of in-flight operations to the deployment (#1759) 2018-08-10 21:39:59 -07:00
resource_state.go Support aliases for renaming, re-typing, or re-parenting resources (#2774) 2019-05-31 23:01:01 -07:00
stack.go Make a smattering of CLI UX improvements 2018-09-24 08:43:46 -07:00
status.go Partial status for resource providers 2018-07-02 13:32:23 -07:00
urn.go Add license headers 2018-05-22 15:02:47 -07:00
urn_test.go Add license headers 2018-05-22 15:02:47 -07:00