Commit Graph

30507 Commits

Author SHA1 Message Date
James Bardin
92c8c76684 fix variable name 2022-10-20 13:14:16 -04:00
James Bardin
a44c859c86 update UIMode comment 2022-10-20 13:13:58 -04:00
James Bardin
ac99cd6051 remove extra import line 2022-10-20 11:03:58 -04:00
James Bardin
28d5a5bf63 NoOp nodes should not have destroy edges
NoOp changes should not participate in a destroy sequence, but because
they are included as normal update nodes the usual connections were
still being made.
2022-10-20 10:59:08 -04:00
James Bardin
586401aeea make naming consistent 2022-10-20 09:36:10 -04:00
James Bardin
8a4883fd13 don't eval checks on destroy 2022-10-19 17:47:53 -04:00
James Bardin
8d11c7f524 the destroy refresh plan should be refresh-only
Refreshing for a destroy should use the refresh-only plan to avoid
planning new objects or evaluating conditions. This should also be
skipped if there is no state, since there would be nothing to refresh.
2022-10-19 17:47:53 -04:00
James Bardin
08081097cb check console with preconditions 2022-10-19 17:47:53 -04:00
James Bardin
a0723442b9 test for incorrectly evaluated outputs 2022-10-19 17:47:53 -04:00
James Bardin
333bdecf39 checks must be registered during eval 2022-10-19 17:47:53 -04:00
James Bardin
1eb22fd94a fix output transformer names
The removeRootOutputs field was not strictly used for that purpose, and
was also copied to another DestroyPlan field.
2022-10-19 17:47:42 -04:00
James Bardin
47b6386348 remove IsFullDestroy workaround
IsFullDestroy was a workaround during apply to detect when the change
set was created by a destroy plan. This no longer works correctly, and
we need to fall back to the UIMode set in the plan.
2022-10-19 14:47:06 -04:00
James Bardin
bcb792ee00 complete the root output expansion
Not all root output instances were going through proper expansion when
destroy operations were involved, leading to cases where they would be
evaluated even though the expected result was only to remove them from
the state.

Normally destroy nodes stand alone in the graph, and do not produce
references to other nodes. Because root output nodes were replaced by
expansion nodes, these were being connected via normal references, even
in the case where we were working with a destroy graph.
2022-10-19 14:42:55 -04:00
James Bardin
8a24d73d15 outputs should not be checked during destroy
Module output may need to be evaluated during destroy in order to
possibly be used by providers. The final state however is that all
objects are destroyed, so preconditions should not be evaluated.
2022-10-19 14:39:21 -04:00
James Bardin
71837d187b walkDestroy op in apply graph 2022-10-19 14:39:00 -04:00
James Bardin
5085ccdfbd fix error message 2022-10-19 14:29:34 -04:00
James Bardin
99608b7da4
Merge pull request #32002 from hashicorp/compliance/add-license
[COMPLIANCE] Update MPL 2.0 LICENSE
2022-10-14 12:04:20 -04:00
Martin Atkins
4bc1696fd1 core: Simplify our idea of "root node" and require it for DynamicExpand
The graph walking mechanism is specified as requiring a graph with a single
root, which in practice means there's exactly one node in the graph
which doesn't have any dependencies.

However, we previously weren't verifying that invariant is true for
subgraphs returned from DynamicExpand. It was working anyway, but it's not
ideal to be relying on a behavior that isn't guaranteed by our underlying
infrastructure.

We also previously had the RootTransformer being a bit clever and trying
to avoid adding a new node if there is already only a single graph with
no dependencies. That special case isn't particularly valuable since
there's no harm in turning a one-node graph into a two-node graph with
an explicit separate root node, and doing that allows us to assume that
the root node is always present and is always exactly terraform.rootNode.

Many existing DynamicExpand implementations were not producing valid
graphs and were previously getting away with it. All of them now produce
properly-rooted graphs that should pass validation, and we will guarantee
that with an explicit check of the DynamicExpand return value before we
try to walk that subgraph. For good measure we also verify that the root
node is exactly terraform.rootNode, even though that isn't strictly
required by our graph walker, just to help us catch potential future bugs
where a DynamicExpand implementation neglects to add our singleton root
node.
2022-10-13 14:01:08 -07:00
Brian Flad
8c93420270
docs/plugin-protocol: Add notes about missing configuration in ReadResource and UpgradeResourceState request messages (#31998)
This opts to inline document these intentional design decisions in the protocol definition as a catch-all for it not being documented elsewhere.

Protocol Buffers files updated via:

```shell
make protobuf
```
2022-10-13 16:29:34 -04:00
James Bardin
980bf430f3
Merge pull request #31990 from hashicorp/jbardin/orphan-noop
core: A NoOp orphan change has nothing to apply
2022-10-12 14:20:13 -04:00
hashicorp-copywrite[bot]
dcee05d198 [COMPLIANCE] Update MPL 2.0 LICENSE 2022-10-12 17:36:01 +00:00
James Bardin
3779dbc2af noop orphan change has nothing to apply
An orphaned resource which plans as a NoOp change will have no config.
This is not an error, but there is nothing to do since there are also
no checks to validate. We still leave the change in the plan to keep the
plan as complete as possible, noting all possible changes.

Preventing the node from being added to the graph is awkward, because
the config is attached separately from the diff transformer. This should
not pose any problems however, because there is no longer any state or
config linking the instance to any dependencies in the graph.
2022-10-11 14:30:29 -04:00
Sarah French
73c3994455
Update CHANGELOG.md 2022-10-11 18:58:26 +01:00
Sarah French
89ef27d3b4
Add Private Service Connect endpoint support to GCS backend (#31967)
* Add support for `storage_custom_endpoint` in `gcs` backend

* Add documentation for new `storage_custom_endpoint` endpoint

* Empty commit to trigger Vercel deployment
2022-10-11 18:57:09 +01:00
Brandon Croft
bc1436af53
Merge pull request #31821 from glennsarti/gs/TF-707-add-pre-apply
Add support for pre-apply task results in the cloud backend
2022-10-10 09:18:15 -06:00
Nick Fagerlund
71f1b12226
Merge pull request #31959 from hashicorp/nf/oct22-updown-comments
Clarify some comments in internal/dag
2022-10-06 15:56:48 -07:00
Nick Fagerlund
ccd7bd017e Clarify some comments in internal/dag
When reading this code to check Terraform's graph sorting behavior, I got very
confused about the direction of traversal for several methods. Although some of
these methods would also probably benefit from renames, this commit only updates
their doc comments to use the same directional terminology that we use in the
`Edge` interface (source/target).
2022-10-06 15:10:33 -07:00
Matthew Garrell
03bff99caa
Merge pull request #31954 from hashicorp/mg_no_code_prov_followup
Adding mention of no-code to Creating Modules section of TF Language docs
2022-10-06 12:00:39 -04:00
Laura Pacilio
e60bfc0b57
Merge pull request #31953 from hashicorp/add-cont-valid-callout
Add callout to Continuous Validation
2022-10-06 11:58:29 -04:00
Matthew Garrell
a50d8cfc11 Adding mention of no-code to Modules section of TF Language docs 2022-10-06 11:53:53 -04:00
Liam Cervante
4d7ba14f72
Add skeleton action for equivalence tests (#31940) 2022-10-06 12:11:27 +02:00
Laura Pacilio
c8d8536160 Add callout to Continuous Validation 2022-10-05 22:32:37 -04:00
Laura Pacilio
1faa05b344
Merge pull request #31945 from hashicorp/fix-backends-link
Update backends.mdx
2022-10-05 14:06:05 -04:00
Laura Pacilio
8258070fd5
Update website/docs/language/state/backends.mdx 2022-10-05 13:43:45 -04:00
Laura Pacilio
97c628044a
Update website/docs/language/state/backends.mdx 2022-10-05 13:42:22 -04:00
Laura Pacilio
bed5650e2f
Update backends.mdx 2022-10-05 13:33:30 -04:00
James Bardin
3047b8c13e
Merge pull request #31878 from hashicorp/jbardin/import-plan-new
evaluation of missing instances during import
2022-10-04 12:45:06 -04:00
James Bardin
041d9d3eec unknown evaluation of missing instances in import
Because import does not yet plan new instances as part of the import
process, we can end up evaluating references to resources which have no
state at all. The fallback for this situation could result in slightly
better values during import. The count and for_each values were
technically incorrect, since the length is not known to be zero, and the
single instance does have a concrete type which we can return.
2022-10-04 11:07:16 -04:00
James Bardin
c1e0b046b8
Merge pull request #31917 from hashicorp/jbardin/destroy-edge-cycles
Extract more exact provider name when checking for destroy cycles
2022-10-04 11:06:25 -04:00
James Bardin
c296172be7 test for cycle around aliased provider 2022-10-04 10:59:51 -04:00
James Bardin
036fb9c1bf check detailed provider for destroy edge cycles
When we checked for cycles with destroy edges around providers, it was
only for providers of a different type, but one can do the same thing
with the same provider under different local aliases. Check to see if
the provider also contains an alias, or is defined absolutely in some
other way. The absolute accuracy here isn't critical, since in most
cases these edges are not required for correct results, but finding a
correct and consistent method for determining when these edges are
needed is going to take more research.

There was also an oversight fixed here where the basic
creator->destroyer edges were added _after_ the cycle checks, limiting
their utility. The ordering of the additions was swapped to make sure
all cycles are noticed.
2022-10-04 10:58:36 -04:00
James Bardin
162b7274fa
Merge pull request #31914 from hashicorp/jbardin/ignore-all-legacy
special handling for legacy `ignore_changes = all`
2022-10-04 10:57:23 -04:00
Sarah French
65b531c416
Update CHANGELOG.md 2022-10-04 10:14:45 +01:00
Sarah French
d43ec0f30f
Add customer-managed encryption key (KMS) support to GCS backend (#31786)
* Add ability to use customer-managed KMS key to encrypt state, add acceptance tests

* Change test names for different encrpytion methods

* Commit files updated by `go mod tidy`

* Add guard against missing ENVs to `setupKmsKey` func

* Update KMS setup function to get credentials from ENVs

* Update tests to not include zero-values in config

This means that default values are supplied later by TF instead of supplied as config from the user

This also avoids issues related to making field conflicts explicit with `ConflictsWith`

* Make `encryption_key` & `kms_encryption_key` conflicting fields

Removing the Default from `encryption_key` does not appear to be a breaking change when tested manually

* Add ability to set `kms_encryption_key` via ENV

* Refactor `encryption_key` to use `DefaultFunc` to access ENV, if set

* Remove comments

* Update `gcs` backend docs & descriptions in schema

* Update `gcs` backend docs to include information on encryption methods

* Apply technical writing suggestions from code review

Co-authored-by: Matthew Garrell <69917312+mgarrell777@users.noreply.github.com>

* Update documentation to remove passive voice

* Change use of context in tests, add inline comment, update logs

* Remove use of `ReadPathOrContents` for new field

Co-authored-by: Matthew Garrell <69917312+mgarrell777@users.noreply.github.com>
2022-10-04 10:10:49 +01:00
Craig Wright
e7fb895c46
Merge pull request #31876 from zisom-hc/patch-1
Update custom-conditions.mdx
2022-10-03 16:28:01 -07:00
James Bardin
fcec9e2c4f
Merge pull request #31902 from hashicorp/jbardin/noop-deposed
Prevent errors from NoOp deposed changes
2022-10-03 12:10:54 -04:00
James Bardin
f78ecef5e7 prevent errors from NoOp deposed changes
If a previously deposed object is deleted outside of Terraform, the
next plan will result in a NoOp change for the deposed object. Fix the
check to verify that the deposed object has an acceptable action rather
than use the `update` flag.
2022-10-03 09:24:23 -04:00
Martin Atkins
0803ea3f4a
Update CHANGELOG.md 2022-09-30 09:57:17 -07:00
Martin Atkins
f260ed1177 website: Remove warning that yamlencode is experimental
We originally included this warning because the go-cty-yaml module wasn't
yet stable and it was also not extensively tested so it wasn't yet clear
if its behavior would need to change in some less common cases we hadn't
tested so far.

However, go-cty-yaml had its v1.0.0 release some time ago and is now
committed to preserving its current Marshal output unless it is found to
be non-compliant with the YAML 1.2 specification. This doc change means
that Terraform's yamlencode is now adopting a similar posture:
 - The exact style details produced by the function for a particular input
   are now frozen. It'll change only if we find that the function is
   producing output that isn't valid per the YAML spec.
 - If someone finds a YAML parser that cannot parse what yamlencode
   produces but what it produces is valid per the YAML 1.2 spec, we'll
   expect the parser to be corrected to better support the spec rather
   than changing the yamlencode output.

There may be pragmatic exceptions if we encounter a situation we cannot
anticipate yet, but the above will be our general rule. This is really
just a specialization of the spirit of the v1.x Compatibility Promises,
tailored specifically to this function.
2022-09-30 09:08:12 -07:00
James Bardin
92f3a83530 special handling for legacy ignore_changes = all
Legacy providers expect Terraform to be able to clean up invalid plans
and computed attributes. Add a special case for the LegacyTypeSystem to
revert `ignore_changes = all` to the complete prior state.
2022-09-30 09:19:29 -04:00