terranix is available via the nix flakes.
Using terranix via flakes
You can check out an example using the template feature of nix flakes.
nix flake init --template github:terranix/terranix-examples
Using terranixConfiguration
You can render the config.tf.json using the lib.terranixConfiguration.
Here is a minimal flake.nix
{
inputs.terranix.url = "github:terranix/terranix";
outputs = { terranix, ... }:
let
system = "x86_64-linux";
in
{
defaultPackage.${system} = terranix.lib.terranixConfiguration {
inherit system;
modules = [ ./config.nix ];
};
};
}
You can run nix build -o config.tf.json, which should create a config.tf.json
in your current folder.
Now you are ready to run terraform.
Import terranix modules
You can include a terranix module like a nixosModule with flakes.
inputs.github.url = "github:terranix/terranix-module-github";
...
terraformConfiguration = terranix.lib.terranixConfiguration{
inherit system;
modules = [
github.terranixModule
./config.nix
];
};
Writing terranix modules
If you want to create your own terranix module
you can start with the module template from terranix-examples
nix flake init --template "github:terranix/terranix-examples#module"
terranix modules should obey the following output structure:
terranixModules.<name>terranixModule: contains allterranixModulescombined of the given flake.
using terranixOptions
It's good practise to provide a options.json and options.md on the top of your
Repository.
The function lib.terranixOptions renders a options.json which contains a lot of information,
which can be easily queried by jq.
For example you can pull the options.json of the terranix github module
curl https://raw.githubusercontent.com/terranix/terranix-module-github/main/options.json | \
jq 'to_entries | .[] |
{
label: .key,
type: .value.type,
description: .value.description,
example: .value.example | tojson,
default: .value.default | tojson,
defined: .value.declarations[0].path,
url: .value.declarations[0].url,
}' | \
jq -s '{ options: . }'
Using terranixConfigurationAst or terranixOptionsAst
If you want to get deeper insides in the output of terranixConfiguration or terranixOptions
you can make use of the terranixConfigurationAst or the terranixOptionsAst function.
Here is a simple example of using nix repl and terranixConfigurationAst.
nix-repl> terranixAst = (builtins.getFlake "github:terranix/terranix").lib.terranixConfigurationAst
nix-repl> terranix = terranixAst {
system = "x86_64-linux";
modules = [{
resource.local_file = {
content = "yolo";
filename = "./example";
};
}];
}
nix-repl> terranix.config.resource.local_file
{ content = "yolo"; filename = "./example"; }