evalTerranixConfiguration
lib.evalTerranixConfiguration evaluates terranix modules and returns
the Terraform configuration as a Nix attrset, without writing anything
to the Nix store.
terranix.lib.evalTerranixConfiguration {
system = "x86_64-linux"; # or set pkgs directly
modules = [ ./config.nix ];
extraArgs = { }; # extra arguments passed to modules
strip_nulls = true; # remove null values from the output
}
The return value is an attrset containing config, like so:
{
config = {
resource = { ... };
provider = { ... };
# ...
};
}
Exploring in nix repl #
The primary use case is inspecting your Terraform configuration interactively.
For example, with nix repl you can produce a terranix configuration like so:
$ nix repl
nix-repl> terranix = builtins.getFlake "github:terranix/terranix"
nix-repl> result = terranix.lib.evalTerranixConfiguration {
system = "x86_64-linux";
modules = [{
resource.local_file.example = {
content = "hello";
filename = "./example.txt";
};
}];
}
nix-repl> result.config.resource.local_file.example
{ content = "hello"; filename = "./example.txt"; }
You can also load modules from files:
nix-repl> result = terranix.lib.evalTerranixConfiguration {
system = "x86_64-linux";
modules = [ ./config.nix ];
}
nix-repl> builtins.attrNames result.config
[ "provider" "resource" ]
Accessing config from terranixConfiguration
#
lib.terranixConfiguration produces a config.tf.json store derivation.
It now also carries the evaluated configuration as a passthru attribute,
so you can access the attrset without a separate call:
let
tfConfig = terranix.lib.terranixConfiguration {
inherit system;
modules = [ ./config.nix ];
};
in
{
# tfConfig is the config.tf.json derivation
# tfConfig.config is the Terraform attrset
inherit (tfConfig) config;
}
This is convenient when your flake already uses terranixConfiguration
and you want to inspect or reuse the configuration in other Nix expressions.
Migrating from terranixConfigurationAst #
lib.terranixConfigurationAst is deprecated. Replace calls with lib.evalTerranixConfiguration:
# Old
terranix.lib.terranixConfigurationAst { system = "x86_64-linux"; modules = [ ./config.nix ]; }
# New
terranix.lib.evalTerranixConfiguration { system = "x86_64-linux"; modules = [ ./config.nix ]; }
The return value is the same: { config = { ... }; }.