Commit Graph

61 Commits

Author SHA1 Message Date
Diógenes Fernandes
e1dd6c3625 Normalize paths at internal/lang/funcs tests (#3223)
Signed-off-by: Diogenes Fernandes <diofeher@gmail.com>
2025-09-16 09:17:02 -03:00
Christian Mesh
c8b58e949b Address review comments
Co-authored-by: James Humphries <James@james-humphries.co.uk>
Co-authored-by: Ilia Gogotchuri <ilia.gogotchuri0@gmail.com>
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2025-09-10 07:45:23 -04:00
Christian Mesh
19eed53765 Update funcs package to properly handle ephemeral values (#3168)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2025-09-10 07:45:23 -04:00
Christian Mesh
60b268200c Add ephemeralasnull() function (#3154)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
Co-authored-by: Martin Atkins <mart@degeneration.co.uk>
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2025-09-10 07:45:23 -04:00
Andrei Ciobanu
013097b631 Ephemeral variables (#3108)
Signed-off-by: Andrei Ciobanu <andrei.ciobanu@opentofu.org>
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2025-09-10 07:45:23 -04:00
Martin Atkins
c2ea647ff4 funcs: issensitive returns unknown when given an unknown value
Other parts of the language allow deciding the sensitivity of a value based
on results that won't be known until the apply phase, which means that in
practice we cannot predict the final sensitivity of an unknown value.

Previously this function assumed that an unknown value would always be a
placeholder for a final value of the same sensitivity, which is not a valid
assumption in practice and so using the results of this function could
cause downstream value consistency checks to fail.

This does unfortunately create a situation where a new version of OpenTofu
will return an unknown value in a situation that was previously always
known, which could therefore begin causing a plan-time error if the result
is then used to populate something that is required to be known at plan
time. However, the previous behavior caused OpenTofu to produce confusing
errors (blaming a provider for OpenTofu's mistake) during the apply phase,
and so the potential new plan-time errors are arguably better than the
previous behavior.

Any unknown result is refined as definitely not null to shrink the
potential impact: other parts of the language will still be able to assume
that the result of this function is not null even if it's not yet known.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-07-10 08:12:29 -07:00
Christian Mesh
8ee707b3e6 Fix lint issues in internal/lang (#2786)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
2025-05-09 13:53:34 -07:00
Martin Atkins
97026e4048 lang/funcs: transpose fix panics with null elements
Previously the "transpose" function would panic if any of the given lists
were null or if any of the strings inside the given lists were null.

Null values _are_ invalid in those positions because we can't project null
values into the keys of the resulting map, but we should return explicit
error messages in those cases rather than causing a cty panic.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-03-11 13:56:46 -07:00
Mikel Olasagasti Uranga
66765bdab3 Fix: Ensure constant format strings in fmt and printf calls
Go 1.24 introduces stricter checks for format string validation.
This commit fixes instances where non-constant format strings were
used in calls to functions like `fmt.Errorf`, `fmt.Printf`, and similar.

Changes include:
- Replacing dynamically constructed strings passed as format strings
with constant format strings.
- Refactoring `fmt.Sprintf` calls to ensure the format string matches
the number of arguments provided.
- Simplifying redundant formatting and ensuring compliance with Go
1.24's stricter `vet` tool checks.

This update ensures compatibility with Go 1.24 and prevents potential
runtime errors caused by misinterpreted dynamic format strings.

Resolves #2389

Signed-off-by: Mikel Olasagasti Uranga <mikel@olasagasti.info>
Co-authored-by: Martin Atkins <mart@degeneration.co.uk>
Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-02-26 11:33:43 -08:00
Oleksandr Levchenkov
5ff40ae505 refactor sensitive marks usage (#2503)
Signed-off-by: ollevche <ollevche@gmail.com>
2025-02-11 19:02:21 +02:00
Andrei Ciobanu
8fe739dc83 MakeStaticTimestampFunc now returns unknown value if the given time.Time is zero (#2413)
Signed-off-by: yottta <andpectech@gmail.com>
Co-authored-by: yottta <andpectech@gmail.com>
2025-01-27 17:07:40 +02:00
Nathan Baulch
9b7bec31b4 Another batch of minor typos (#1953)
Signed-off-by: Nathan Baulch <nathan.baulch@gmail.com>
2024-09-09 07:51:39 -04:00
Nathan Baulch
ea558d9d4b Fix typos (#1905)
Signed-off-by: Nathan Baulch <nathan.baulch@gmail.com>
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
Co-authored-by: Christian Mesh <christianmesh1@gmail.com>
2024-08-29 13:20:33 -04:00
James Humphries
89926cc97a Ensure that using a sensitive path for templatefile that it doesnt panic (#1801)
Signed-off-by: James Humphries <james@james-humphries.co.uk>
2024-07-23 09:06:02 -04:00
Jonas Bakken
fc5ffe4edd feat: implement issensitive function (#1381)
Signed-off-by: Jonas Bakken <jonasbakken@protonmail.com>
2024-03-13 11:22:58 +01:00
Christian Mesh
b51396fed5 Allow for templatefile recursion (up to 1024 depth default) (#1250)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
Co-authored-by: Janos <86970079+janosdebugs@users.noreply.github.com>
2024-03-11 10:00:06 -04:00
Pooria Ghaedi
b5889b10eb Feat: urldecode function #1234 (#1283)
Signed-off-by: pooriaghaedi <pooria.ghaedi@gmail.com>
2024-03-01 15:09:45 +00:00
Sanskruti Shahu
835dcb8121 Added templatestring function similar to templatefile (#1223)
Signed-off-by: sanskruti-shahu <sanskruti.shahu@harness.io>
Signed-off-by: Sanskruti Shahu <76054960+sanskruti-shahu@users.noreply.github.com>
Co-authored-by: James Humphries <James@james-humphries.co.uk>
2024-02-28 09:56:05 -05:00
namgyalangmo
cb2e9119aa Update copyright notice (#1232)
Signed-off-by: namgyalangmo <75657887+namgyalangmo@users.noreply.github.com>
2024-02-08 09:48:59 +00:00
Mikel Olasagasti Uranga
ceaa079937 Update to latest github.com/bmatcuk/doublestar (#1194)
Signed-off-by: Mikel Olasagasti Uranga <mikel@olasagasti.info>
2024-01-25 17:52:20 +01:00
Ashwin Annamalai
eda6dcd2a7 Updated terraform icon with opentofu icon (#1122)
Signed-off-by: Ashwin Annamalai <4549937+IgnorantSapient@users.noreply.github.com>
2024-01-15 19:28:05 -05:00
Marcin Wyszynski
b524b6140c Implement cidrcontains function (#366) 2024-01-11 23:33:55 +01:00
Kuba Martin
47c34d05e2 Refactor base64gunzip function to be more in line with other functions. (#1077)
Signed-off-by: Jakub Martin <kubam@spacelift.io>
2024-01-08 15:05:20 +01:00
Joao C Costa
28e6bce155 nonsensitive no longer produces error when applied to values that are not sensitive (#369)
Signed-off-by: Joao C Costa <joao.costa@kit-ar.com>
2023-12-27 15:16:13 +01:00
l-with
ae5ec54458 implement gunzipbase64 (#799)
Signed-off-by: Lars With <lars@with.de>
2023-12-21 11:16:15 -05:00
RLRabinowitz
26fb627af9 Remove all Terraform mentions in STDOUTs in the codebase (#704) 2023-10-12 14:24:04 +01:00
Yaron Yarimi
059190f273 Rename multiple packages to OpenTofu (#488) 2023-09-20 15:59:27 +03:00
Yaron Yarimi
c8acedd885 Rename github.com/placeholderplaceholderplaceholder/opentf to github.com/opentofu/opentofu (#461) 2023-09-20 14:35:35 +03:00
Lars Lehtonen
ff3d0b2c61 internal/lang: wrap formatted errors (#444) 2023-09-20 11:39:52 +03:00
Ikko Eltociear Ashimine
a3a57375ab Fix typo in crypto.go (#387) 2023-09-14 16:00:44 +03:00
Lars Lehtonen
bc28cc35cc internal/lang/funcs: deprecate io/ioutil (#345)
Signed-off-by: Lars Lehtonen <lars.lehtonen@gmail.com>
2023-09-08 10:04:53 +02:00
RLRabinowitz
650b1a339a Adjust mentions of terraform in internal/lang 2023-08-23 11:12:15 +03:00
Kuba Martin
ebcf7455eb Rename root module name. (#4)
* Rename module name from "github.com/hashicorp/terraform" to "github.com/placeholderplaceholderplaceholder/opentf".

Signed-off-by: Jakub Martin <kubam@spacelift.io>

* Gofmt.

Signed-off-by: Jakub Martin <kubam@spacelift.io>

* Regenerate protobuf.

Signed-off-by: Jakub Martin <kubam@spacelift.io>

* Fix comments.

Signed-off-by: Jakub Martin <kubam@spacelift.io>

* Undo issue and pull request link changes.

Signed-off-by: Jakub Martin <kubam@spacelift.io>

* Undo comment changes.

Signed-off-by: Jakub Martin <kubam@spacelift.io>

* Fix comment.

Signed-off-by: Jakub Martin <kubam@spacelift.io>

* Undo some link changes.

Signed-off-by: Jakub Martin <kubam@spacelift.io>

* make generate && make protobuf

Signed-off-by: Jakub Martin <kubam@spacelift.io>

---------

Signed-off-by: Jakub Martin <kubam@spacelift.io>
2023-08-17 14:45:11 +02:00
Martin Atkins
81c15f987e lang/funcs: startswith considers string prefix refinement
If the string to be tested is an unknown value that's been refined with
a prefix and the prefix we're being asked to test is in turn a prefix of
that known prefix then we can return a known answer despite the inputs
not being fully known.

There are also some other similar deductions we can make about other
combinations of inputs.

This extra analysis could be useful in a custom condition check that
requires a string with a particular prefix, since it can allow the
condition to fail even on partially-unknown input, thereby giving earlier
feedback about a problem.
2023-05-24 13:44:08 -07:00
Martin Atkins
c912970153 lang/funcs: Non-null refinements for various functions
cty's new "refinements" concept allows us to reduce the range of unknown
values from our functions. This initial changeset focuses only on
declaring which functions are guaranteed to return a non-null result,
which is a helpful baseline refinement because it allows "== null" and
"!= null" tests to produce known results even when the given value is
otherwise unknown.

This commit also includes some updates to test results that are now
refined based on cty's own built-in refinement behaviors, just as a
result of us having updated cty in the previous commit.
2023-05-24 13:44:08 -07:00
hashicorp-copywrite[bot]
325d18262e [COMPLIANCE] Add Copyright and License Headers 2023-05-02 15:33:06 +00:00
Zac Clifton
3bb6a5896b Feat: Add strcontains function and documentation (#33069)
* add strcontains function and documentation
2023-04-26 20:41:32 +01:00
Liam Cervante
aae6990d38 Add native plantimestamp function to Terraform (#32980)
* add plantimestamp function

* documentation

* add missing links

* fix typo
2023-04-21 09:47:28 +02:00
Martin Atkins
9f827f57ae go.mod: Revert cty minor version v1.13 upgrade
We inadvertently incorporated the new minor release of cty into the 1.4
branch, and that's introduced some more refined handling of unknown values
that is too much of a change to introduce in a patch release.

Therefore this reverts back to the previous minor release for the v1.4
series, and then we'll separately get the main branch ready to work
correctly with the new cty before Terraform v1.5.

This reverts just the upgrade and the corresponding test changes from
#32775, while retaining the HCL upgrade and the new test case it
introduced for that bug it was trying to fix. That new test is still
passing so it seems that the cty upgrade is not crucial to that fix.
2023-03-16 11:48:41 -04:00
Liam Cervante
32f151f20b Update HCL to handle type mismatches when applying defaults (#32775)
* add test reproducing terraform crash

* pull latest hcl

* add missing go.sum file

* also fix tests broken by go-cty update
2023-03-09 14:29:58 +01:00
Daniel Banck
f29156cdef Replace HTML entities in function descriptions (#32710) 2023-02-20 14:11:06 +00:00
Daniel Banck
4fd8322802 Add function descriptions (#32453)
* Add consolidated function description list

* Add function parameter descriptions

* Add descriptions to all functions

* Add sanity test for function descriptions

* Apply suggestions from code review

Co-authored-by: kmoe <5575356+kmoe@users.noreply.github.com>

Co-authored-by: kmoe <5575356+kmoe@users.noreply.github.com>
2023-01-16 10:48:31 +00:00
Martin Atkins
2ee9589650 lang/funcs: "timecmp" function
This is a complement to "timestamp" and "timeadd" which allows
establishing the ordering of two different timestamps while taking into
account their timezone offsets, which isn't otherwise possible using the
existing primitives in the Terraform language.
2022-08-25 10:15:42 -07:00
Martin Atkins
783a07d9e8 build: Use Go 1.19
Go 1.19's "fmt" has some awareness of the new doc comment formatting
conventions and adjusts the presentation of the source comments to make
it clearer how godoc would interpret them. Therefore this commit includes
various updates made by "go fmt" to acheve that.

In line with our usual convention that we make stylistic/grammar/spelling
tweaks typically only when we're "in the area" changing something else
anyway, I also took this opportunity to review most of the comments that
this updated to see if there were any other opportunities to improve them.
2022-08-22 10:59:12 -07:00
Joshua Barton
c73c0ad63c feat: add startswith and endswith funcs 2022-06-30 18:30:32 -05:00
Alisdair McDiarmid
718b0875ef lang: Remove defaults function
Now that we are able to specify optional object attribute defaults
inline in a type constraint, the separate `defaults` function is no
longer needed.
2022-06-01 06:40:37 -04:00
Martin Atkins
d4776e8ef1 lang/funcs: type conversion functions can convert null values
We had intended these functions to attempt to convert any given value, but
there is a special behavior in the function system where functions must
opt in to being able to handle dynamically-typed arguments so that we
don't need to repeat the special case for that inside every function
implementation.

In this case we _do_ want to specially handle dynamically-typed values,
because the keyword "null" in HCL produces
cty.NullVal(cty.DynamicPseudoType) and we want the conversion function
to convert it to a null of a more specific type.

These conversion functions are already just a thin wrapper around the
underlying type conversion functionality anyway, and that already supports
converting dynamic-typed values in the expected way, so we can just opt
in to allowing dynamically-typed values and let the conversion
functionality do the expected work.

Fixing this allows module authors to use type conversion functions to
give additional type information to Terraform in situations that are too
ambiguous to be handled automatically by the type inference/unification
process. Previously tostring(null) was effectively a no-op, totally
ignoring the author's request to treat the null as a string.
2022-04-20 09:09:12 -07:00
shinbunbun
a1ead44c71 cidrnetmask() produce an error with IPv6 (#30703)
* Add error handling for IPv6



Co-authored-by: kmoe <5575356+kmoe@users.noreply.github.com>
2022-03-25 14:26:47 +00:00
Alisdair McDiarmid
0764726e3e functions: Fix sum() of all strings
The sum() function accepts a collection of values which must all convert
to numbers. It is valid for this to be a collection of string values
representing numbers.

Previously the function would panic if the first element of a collection
was a non-number type, as we didn't attempt to convert it to a number
before calling the cty `Add` method.
2022-03-16 08:50:06 -04:00
Alisdair McDiarmid
843c50e8ce lang: Further limit the console-only type function
This commit introduces a capsule type, `TypeType`, which is used to
extricate type information from the console-only `type` function. In
combination with the `TypeType` mark, this allows us to restrict the use
of this function to top-level display of a value's type. Any other use
of `type()` will result in an error diagnostic.
2022-02-10 06:12:58 -05:00