HashiCorp Vault¶
HashiCorp Vault is an identity-based secrets and encryption management system.
Add the following dependency to your project file:
| NuGet | |
|---|---|
1 | |
You can start a Vault container instance from any .NET application. Here, we create different container instances and pass them to the base test class. This allows us to test different configurations.
1 2 3 4 5 6 7 8 | |
This example uses xUnit.net's IAsyncLifetime interface to manage the lifecycle of the container. The container is started in the InitializeAsync method before the test method runs, ensuring that the environment is ready for testing. After the test completes, the container is removed in the DisposeAsync method.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
The test example writes a secret to the key/value secrets engine and reads it back. Use GetBaseAddress() to configure the Vault client. The container runs Vault in dev mode, and the default configuration uses the root token root. Use WithRootToken(string) to configure a different root token.
The test example uses the following NuGet dependencies:
1 2 3 4 5 | |
To execute the tests, use the command dotnet test from a terminal.
Tip
For the complete source code of this example and additional information, please refer to our test projects.
Init commands¶
Use WithInitCommand(params string[]) to run Vault CLI commands after the container has started, for example to enable a secrets engine or to write a secret. The commands run in order, without the leading vault, and use the configured root token:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
If a command fails, the container start throws an ExecFailedException that contains the exit code and the output of the command. In dev mode, Vault keeps its data in memory. A restarted container starts without any data, so the init commands run on every start.