Commit Graph

32422 Commits

Author SHA1 Message Date
Martin Atkins
da8a2ecfce repl: break typeString into some smaller functions
This function was too long for our function length linting rule, so we'll
split each of the type kinds with special handling into their own function
and thus the main typeString function is just a straightforward dispatch
table with only one statement per case.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-06 08:38:44 -08:00
Martin Atkins
6cc3fc6a07 repl: FormatValue factor out printing of null values
This value was too long for our function length lint rule, and factoring
out the printing of null values makes this more balanced with how we're
already handling unknown values and sensitive values so that the main
body of FormatValue is focused on the normal value printing case.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-06 08:38:44 -08:00
Martin Atkins
547bb32cee statefile: old version upgrades exempt from linters
The functions in these files are for handling older state snapshot formats
that current OpenTofu versions never generate, and so it's highly unlikely
that we'll ever make substantial changes to these functions.

Therefore it's unjustified to risk reworking it to pass linting rules, and
so we'll add nolint comments instead. Our priority is to make as few
changes as possible to these functions, to minimize the risk of regressing
a upgrade paths that are exercised very infrequently.

(For context, state version 4 has been current ever since Terraform
v0.12.0, and so the earlier versions are long obsolete.)

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-06 08:38:15 -08:00
Martin Atkins
1551f1d6cf legacy packages: Exempt from complexity linters
These packages are frozen copies of old code from much older versions of
the product that are preserved to keep the state storage backends working
until we decide on a way to get them out of this codebase entirely.

Therefore the only potential future change to this code is to delete it
once it's no longer needed. It would not be worth the risk or time
investment to rework these to meet our strict complexity linting rules.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-06 08:37:54 -08:00
Martin Atkins
9d9c1486fa ipaddr: Exempt from all lint rules
The code in this package is all snapshot from the Go codebase in older
versions, inlined here to allow OpenTofu's cidr-calculation-related
functions to preserve their original behavior despite upstream changing
the parsing rules in a breaking way.

This code is intentionally modified as little as possible from the upstream
code it was derived from. We are imposing on ourselves considerably
stricter style conventions than the Go project follows and so we need
to disable various linters for this package to allow this code to remain
written in the Go idiomatic style, rather than in OpenTofu's stricter
local style.

In particular, we've chosen to prohibit ourselves from using named return
values or package-global variables, despite those both being typical in the
standard library and in other codebases.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-06 08:36:42 -08:00
Martin Atkins
ad32bde2ae Temporarily disable the complexity-related lint rules
We're intending to gradually improve all of the existing functions that
fail these checks as a separate project from other work, because fixing
for these particular lint rules tends to be too invasive to be safe or
sensible to combine with other work.

Therefore we'll temporarily disable these lints from the main lint run
and add a separate .golangci-complexity.yml that we can use to track our
progress towards eliminating those lint failures without continuing to
litter the code with nolint comments in the meantime.

This also removes all of the existing nolint comments for these linters so
that we can start fresh and review each one as part of our improvement
project.

We'll re-enable these linters (and remove .golangci-complexity.yml) once
each example has either been rewritten to pass the checks or we've
concluded that further decomposition would hurt readability and so added
"nolint" comments back in so we can review whether our lint rules are too
strict once we've got a bunch of examples to consider together.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-03 10:41:05 -05:00
Martin Atkins
f802281c5a rfc: A Pragmatic Approach to Linting for Code Complexity
We currently have a set of aspirational linting rules in the project's
golangci-lint configuration, but this codebase was derived from a much
older codebase that was not written under those lint rules and so we made
the pragmatic decision that only code that has changed since the addition
of the lint rules is subjected to those lint rules.

That approach aims to make the compromise of encouraging us to gradually
improve code "while we're in the area" working on other changes, while
avoiding the need for a huge retrofit of existing code.

However, that compromise seems to be less appropriate for the subset of
linting rules related to code complexity in particular. That category of
rules typically imposes some arbitrary limit on a qualitative metric that
the linting tool can measure. These particular rules therefore have a
relatively broad scope and tend to require very disruptive changes to
existing code in order to resolve them.

This proposal aims to find a pragmatic path that will lead to a codebase
that _does_ conform to the complexity lint rules in the long run, but to
treat those improvements as a separate project in their own right rather
than as something we aim to gradually improve as part of other work.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-02 13:35:50 -08:00
Jon Johnson
c280c23b4c
configs: Fix quadratic buildChildModules
By building a map from module path to snapshotModule we can avoid repeatedly scanning the set of modules for each call to Open.

Signed-off-by: Jon Johnson <jon.johnson@chainguard.dev>
2025-01-02 13:29:03 -08:00
Martin Atkins
3dbf8aae7b tofu: eval_iteration.go is now eval_expansion.go
Using the word "iteration" to describe what count and for_each do tends to
confuse people because it sounds like explicit control flow rather than
just dynamically declaring multiple objects.

Elsewhere in the codebase we refer to this idea as "expansion" so this is
a rename for consistency with that and to remove the confusing terminology.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-02 13:24:11 -08:00
Martin Atkins
1e0d1050e8 CHANGELOG: A supplemental enhancement related to -exclude
Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-02 13:24:11 -08:00
Martin Atkins
f1358f9fe8 evalchecks: Suggest -exclude as a workaround for unknown count/for_each
Previously we made a very generic suggestion to use -target to split a
change into two parts as a workaround for the fact that count and for_each
must be known during planning. That works, but we didn't have enough
information available to tell the operator exactly what to target and so
anyone who is not an expert on the configuration they're working with tends
to get stuck unable to figure out exactly what they need to do.

The new -exclude option gives us an opportunity to do better here: we tend
to know for which object we're currently evaluating count or for_each, and
so we can mention that object directly in the error message when if we
recommend to use -exclude instead of -target.

Not all objects that support count/for_each will necessarily be directly
targetable, so we can still potentially recommend -target when we're
dealing with one of those objects. For example, as of this commit that
is true for for_each in a provider block, because there is not currently
any syntax for specifying a provider configuration as an addrs.Targetable.
Perhaps we'll introduce such a thing in the future, but that's outside the
scope of this change that's primarily focused on improving the messaging
for resource and module count/for_each.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-01-02 13:24:11 -08:00
Oleksandr Levchenkov
be5b14625d
fix randomly failing destroyed_mod_outputs test (#2315)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-30 16:38:27 +02:00
Oleksandr Levchenkov
3945b3c93a
bump golang.org/x/net from 0.25 to 0.33 (#2311)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-26 15:13:05 +02:00
Ilia Gogotchuri
2d9cef1f55
Functions: decode_tfvars, encode_tfvars, encode_expr on bult-in provider for compatibility (#2306)
Signed-off-by: Ilia Gogotchuri <ilia.gogotchuri0@gmail.com>
Co-authored-by: Oleksandr Levchenkov <ollevche@gmail.com>
2024-12-25 13:21:59 +04:00
Oleksandr Levchenkov
c5b43b9f1a
fix: unused config's create_before_destroy on resource change with no refresh (#2248)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-20 10:47:00 +02:00
Sekiranda Hamza
211ec55a30
Skip reading encryption keys on tofu init with -backend=false flag set (#2293)
Signed-off-by: Sekiranda <sekirandahamza@gmail.com>
2024-12-20 10:45:12 +02:00
Martin Atkins
27ab52fd03
Compare ModuleInstance to Module without allocating, and similar (#2261)
Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2024-12-12 12:47:57 -05:00
Christian Mesh
73e4a657ae
Bump main to 1.10.0-alpha1 now that 1.9 has been branched (#2291)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-12 12:13:54 -05:00
dependabot[bot]
cdd86f2b38
Bump golang.org/x/crypto from 0.21.0 to 0.31.0 (#2287)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-12 08:50:09 -05:00
Martin Atkins
954e3aed01 rfc: Static Evaluation of Provider Iteration state tracking revision
The original proposal called for the state snapshot loader to accept a
resource instance with both an instance-level provider instance address
and a resource-level provider instance address.

The final implementation does follow that specification, but it also emits
a warning in that case to draw attention to the inconsistency.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2024-12-11 12:52:50 -08:00
Martin Atkins
b480343798 rfc: Static Evaluation of Provider Iteration state tracking revision
The original proposal called for the state snapshot writer to generate a
resource-level provider property if all of the instances of the resource
had the same provider instance address, regardless of what that address
actually is.

The actual implementation instead chose to generate the resource-level
property only if none of the instances of the resource refer to a provider
instance that has an instance key.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2024-12-11 12:52:50 -08:00
Christian Mesh
00bc17917a Require static scope stack to have at least one entry
Kind of odd code smell, but the only alternative I could think of was a
panic.  Would rather ensure this requirement at compile time instead.

Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-11 10:14:49 -08:00
Martin Atkins
7fdc4909d6 configs: Some basic tests for StaticScope's GetLocalValue
Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2024-12-11 10:14:49 -08:00
Martin Atkins
083e5f2e1c configs: Early eval must "finalize" input variable values
In the main language runtime input variables have both a "raw" value as
provided by the caller and a "finalized" value that has been
type-converted, default-attributes-inserted, and validated.

Unfortunately the "early eval" codepath is essentially a reimplementation
of the language runtime in terms of data available in the static
configuration, and it previously wasn't properly emulating the finalization
of input variable values and was thus incorrectly exposing the "raw"
values into a module instead of the "finalized" values.

Since we are already in the v1.9 prerelease period significant refactoring
is too risky, and so this just copies the most important transformations
from the language runtime into the early eval runtime. We hope to find a
more sustainable way to implement this in the future, but that will likely
require refactoring of both the early eval codepath _and_ the traditional
language runtime, and so that work needs to begin early in a minor release
period.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2024-12-11 10:14:49 -08:00
Ilia Gogotchuri
267b7f6008
Warn user about provider version 0.0.0 (#2281)
Signed-off-by: Ilia Gogotchuri <ilia.gogotchuri0@gmail.com>
2024-12-11 21:10:49 +04:00
I S
c433f87c58
Update TSC_SUMMARY.md (#2279)
Signed-off-by: I S <igor@scalr.com>
2024-12-11 08:40:19 -08:00
Christian Mesh
6c74923f22
Local values can now be used in provider key expressions (#2280)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-11 07:46:40 -05:00
Oleksandr Levchenkov
01ef4dd8a4
add missing changelog for #2274 (#2275)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-10 16:45:39 +02:00
Oleksandr Levchenkov
5f8eee4708
add simulated state serialization between tofu test runs (#2274)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-10 16:34:25 +02:00
Christian Mesh
f5930c6ce1
Bump version to 1.9.0-beta2 (#2271)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-09 09:11:10 -05:00
Christian Mesh
ece1bb4f49
Fix data provider iteration destroy (#2270)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-09 07:56:58 -05:00
Ilia Gogotchuri
ffa43acfcd
Azurerm backend timeout (#2263)
adds a timeout_seconds configuration variable with a default value to the AzureRM backend
Signed-off-by: Ilia Gogotchuri <ilia.gogotchuri0@gmail.com>
2024-12-06 17:32:23 +04:00
Christian Mesh
85dc2615ad
Fix packagecloud push skip for alpha/beta/rc (#2256)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-05 10:39:55 -05:00
AbstractionFactory
eecf4f3c85
Update release instructions (#2259)
Signed-off-by: AbstractionFactory <179820029+abstractionfactory@users.noreply.github.com>
2024-12-05 16:01:35 +01:00
Oleksandr Levchenkov
dd2c75fe7f
prepare for v1.9.0-beta1 (#2258)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-05 16:42:15 +02:00
Martin Atkins
c453eb6a3b
website: Initial documentation updates for dynamic provider instances (#2138)
Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2024-12-05 07:46:02 -05:00
Christian Mesh
f6a1d8e2dd
Support References in Variable Validation (#2216)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-04 14:24:44 -05:00
Christian Mesh
3d51e3c9df
Shallow clone of website/submodules for testing (#2249)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-04 12:24:41 -05:00
Oleksandr Levchenkov
32ca523689
fix: type defaults for variables in tests (#2244)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-04 16:48:08 +02:00
Oleksandr Levchenkov
e5d26f9a71
make tofu test generate dynamic mock values (#2245)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-04 16:22:54 +02:00
Oleksandr Levchenkov
da1ad73f6e
fix tf migration buttons in docs (#2243)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-04 12:46:23 +02:00
AbstractionFactory
7b42ce7238
Missing release notes for #2179 (#2242)
Signed-off-by: AbstractionFactory <179820029+abstractionfactory@users.noreply.github.com>
2024-12-04 11:20:34 +01:00
Christian Mesh
c7aaa5ed50
Force state change if encryption used fallback (#2232)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-03 17:44:30 -05:00
Christian Mesh
8fb8f066c4
Detect when provider and resource/module have identical for_each (#2186)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
Co-authored-by: Martin Atkins <mart@degeneration.co.uk>
2024-12-03 14:02:27 -05:00
Martin Atkins
91b43aecd1
tofu: Variable validation diagnostics must mark sensitive values (#2233)
Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2024-12-03 12:40:44 -05:00
Oleksandr Levchenkov
6c8bfa2794
implement override resources for mock providers (#2168)
Signed-off-by: ollevche <ollevche@gmail.com>
2024-12-03 11:24:26 -05:00
Jon Johnson
cb866bf503
Only wake up from waitDeps to trace when debugging (#2176)
Signed-off-by: Jon Johnson <jon.johnson@chainguard.dev>
2024-12-02 09:36:38 -05:00
Christian Mesh
0903aeff58
Split variable evaluation / validation scope (#2199)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2024-12-02 09:18:07 -05:00
AbstractionFactory
84395e505d
Adding website updates to the release docs (#2226)
Signed-off-by: AbstractionFactory <179820029+abstractionfactory@users.noreply.github.com>
2024-12-02 09:00:51 -05:00
AbstractionFactory
091f68d173
Updated migration guides (#2224)
Signed-off-by: AbstractionFactory <179820029+abstractionfactory@users.noreply.github.com>
Co-authored-by: Oleksandr Levchenkov <ollevche@gmail.com>
2024-11-28 14:57:55 +01:00