Commit Graph

44 Commits

Author SHA1 Message Date
Martin Atkins
efe631d9ec lang/funcs: in "sort", don't panic if given a null string
It is incorrect to use a null string, but that should be reported as an
error rather than a panic.
2018-10-16 19:14:11 -07:00
Martin Atkins
479c6b2466 move "configschema" from "config" to "configs"
The "config" package is no longer used and will be removed as part
of the 0.12 release cleanup. Since configschema is part of the
"new world" of configuration modelling, it makes more sense for
it to live as a subdirectory of the newer "configs" package.
2018-10-16 18:50:29 -07:00
Martin Atkins
ccd90bcf35 lang/funcs: never include the private key in error output
This is based on c811440188 made against the
old "config" package implementations, but also catches a few other cases
where we would previously have printed the private key into the error
messages.
2018-10-16 18:50:29 -07:00
Kristin Laemmert
c23a971ed1 minor fixes 2018-10-16 18:49:20 -07:00
Kristin Laemmert
0dbecc54c0 functions: ValuesFunc - cleanup return type 2018-10-16 18:49:20 -07:00
Kristin Laemmert
a213c4a648 functions: add tests and support for unknown values 2018-10-16 18:49:20 -07:00
Kristin Laemmert
d802d5c624 functions: pr feedback fixes 2018-10-16 18:49:20 -07:00
Kristin Laemmert
ff4b3d763b functions: fix lookup()'s handling of numberical defaults 2018-10-16 18:49:20 -07:00
Kristin Laemmert
4f5c03339a functions: ZipmapFunc 2018-10-16 18:49:20 -07:00
Kristin Laemmert
605e23db6b various code review fixes 2018-10-16 18:49:20 -07:00
Kristin Laemmert
6463dd90e9 functions: TransposeFunc, SliceFunc 2018-10-16 18:49:20 -07:00
Kristin Laemmert
30671d85ad functions: MergeFunc 2018-10-16 18:49:20 -07:00
Kristin Laemmert
aecd7b2e62 functions: LookupFunc 2018-10-16 18:49:20 -07:00
Kristin Laemmert
4d8c398f8e functions: KeysFunc 2018-10-16 18:49:20 -07:00
Kristin Laemmert
21daabe680 functions: MapFunc 2018-10-16 18:49:20 -07:00
Kristin Laemmert
da02e0da4d functions: ListFunc 2018-10-16 18:49:20 -07:00
Kristin Laemmert
529c2c3cc9 functions: FlattenFunc 2018-10-16 18:49:20 -07:00
Kristin Laemmert
4dd3ffc127 porting matchkeys 2018-10-16 18:49:20 -07:00
Kristin Laemmert
b979053361 general cleanup - addressing code review 2018-10-16 18:49:20 -07:00
Kristin Laemmert
498ffbf77b adding some test cases and tweaking implementation to address them 2018-10-16 18:49:20 -07:00
Kristin Laemmert
0cbcd75ebb port distinct and chunklist functions 2018-10-16 18:49:20 -07:00
Kristin Laemmert
8aac7587f7 port index and contains functions 2018-10-16 18:49:20 -07:00
Kristin Laemmert
e697e7d733 port compact function 2018-10-16 18:49:20 -07:00
Kristin Laemmert
1901d5d184 port coalescelist function 2018-10-16 18:49:20 -07:00
Kristin Laemmert
04ac87747c base64decode: check that the decoded (not encoded) string is valid UTF-8 2018-10-16 18:49:20 -07:00
Kristin Laemmert
74f2d58b8b base64decode: check that the decoded (not encoded) string is valid UTF-8 2018-10-16 18:49:20 -07:00
Kristin Laemmert
6171ba3b8a base64decodeFunc now checks for valid UTF-8 2018-10-16 18:49:20 -07:00
Kristin Laemmert
b6d3d69d3a port cidr functions 2018-10-16 18:49:20 -07:00
Kristin Laemmert
10ef61c71c porting many functions 2018-10-16 18:49:20 -07:00
Kristin Laemmert
602b59cdc4 porting functions 2018-10-16 18:49:20 -07:00
Kristin Laemmert
4ad3676934 port ceil function 2018-10-16 18:49:20 -07:00
Kristin Laemmert
c4f4dddff5 porting crypto functions 2018-10-16 18:49:20 -07:00
Kristin Laemmert
eb1d8b7909 cleanup comments for nicer godocs 2018-10-16 18:49:20 -07:00
Kristin Laemmert
9aa9b18658 porting crypto functions 2018-10-16 18:49:20 -07:00
Kristin Laemmert
1a5299efcb porting encoding functions 2018-10-16 18:49:20 -07:00
Kristin Laemmert
d4e703a5c1 base64decode 2018-10-16 18:48:28 -07:00
Kristin Laemmert
e30cb1a7dc typo 2018-10-16 18:48:28 -07:00
Kristin Laemmert
a187c92f0e implement datetime functions 2018-10-16 18:48:28 -07:00
Kristin Laemmert
755b1e2497 implement pathexpand 2018-10-16 18:48:28 -07:00
Kristin Laemmert
2a2ffb6ef4 implement dirname function 2018-10-16 18:48:28 -07:00
Kristin Laemmert
8c1f0842b0 implement basename function 2018-10-16 18:48:28 -07:00
Martin Atkins
129f5fe74d lang/funcs: port some of Terraform's built-in functions
These implementations are adaptations of the existing implementations in
config/interpolate_funcs.go, updated to work with the cty API.

The set of functions chosen here was motivated mainly by what Terraform's
existing context tests depend on, so we can get the contexts tests back
into good shape before fleshing out the rest of these functions.
2018-10-16 18:48:28 -07:00
Martin Atkins
c937c06a03 terraform: ugly huge change to weave in new HCL2-oriented types
Due to how deeply the configuration types go into Terraform Core, there
isn't a great way to switch out to HCL2 gradually. As a consequence, this
huge commit gets us from the old state to a _compilable_ new state, but
does not yet attempt to fix any tests and has a number of known missing
parts and bugs. We will continue to iterate on this in forthcoming
commits, heading back towards passing tests and making Terraform
fully-functional again.

The three main goals here are:
- Use the configuration models from the "configs" package instead of the
  older models in the "config" package, which is now deprecated and
  preserved only to help us write our migration tool.
- Do expression inspection and evaluation using the functionality of the
  new "lang" package, instead of the Interpolator type and related
  functionality in the main "terraform" package.
- Represent addresses of various objects using types in the addrs package,
  rather than hand-constructed strings. This is not critical to support
  the above, but was a big help during the implementation of these other
  points since it made it much more explicit what kind of address is
  expected in each context.

Since our new packages are built to accommodate some future planned
features that are not yet implemented (e.g. the "for_each" argument on
resources, "count"/"for_each" on modules), and since there's still a fair
amount of functionality still using old-style APIs, there is a moderate
amount of shimming here to connect new assumptions with old, hopefully in
a way that makes it easier to find and eliminate these shims later.

I apologize in advance to the person who inevitably just found this huge
commit while spelunking through the commit history.
2018-10-16 18:46:46 -07:00
Martin Atkins
a16ca2ec53 lang: new package for the runtime parts of the config language
Whereas package "configs" deals with the static structure of the
configuration language, this new package "lang" deals with the dynamic
aspects such as expression evaluation.

So far this mainly consists of populating a hcl.EvalContext that contains
the values necessary to evaluate a block or an expression. There is also
special handling here for dynamic block generation using the HCL
"dynblock" extension, which is exposed in the public interface (rather
than hiding it as an implementation detail of EvalBlock) so that the
caller can then extract proper source locations for any result values
using the expanded body.

This also includes the beginnings of a replacement for the function table
handling that currently lives in the old "config" package, but most of
the functions are not yet ported and so this will expand in subsequent
commits.
2018-10-16 18:44:26 -07:00