Summary
Starting from the interest in #3231 this is making the case for providing a terragrunt subcommand to start a stand alone provider cache server. In the discussion, creating a RFC is suggested.
Having a single cache server instance serving many parallel terragrunt invocations would improve efficiency on Terraform Automation & Collaboration Software (TACOS) platforms like Atlantis.
Motivation
Organisations running self hosted TACOS platforms or similar services like Atlantis for merge request workflow integration often find themselves with systems that will run terragrunt plan/apply and other commands frequently and in parallel.
Existing provider caching has proven lacking for such situations, which lead to terragrunt adding provider caching functionality.
For these systems having a single cache storage location is the most efficient way to use the cache. Past issues have shown that spinning up many cache servers in parallel pointing to the same directories can lead to locking issues among others.
Running a single permanent cache server on the automation system host allows for the most efficient use of cache. All terragrunt processes launched could connect to the same cache server serving providers from a unified cache location without locking issues.
Proposal
Introduce a new subcommand like terragrunt cache-server. This command does nothing but start a cache server and not return unless a fatal error is encountered or signal to stop is received.
Server parameters can be set using established terragrunt configuration methods like command line arguments or environment variables. These parameters include cache dir location, registry configuration, listening host/port and the authentication token.
Users of a system like atlantis could add the cache server process to the host/pod running atlantis and extend the atlantis configuration to invoke terragrunt in pipelines with the settings needed to connect to the standalone cache server. This would include enabling caching, providing a server URI and authentication token. Adding these options would differ depending on the actual TACOS used.
Technical Details
- terragrunt
- New command added. Expected to mostly hook in to existing functionality.
- Option to instruct terragrunt to connect to an existing server when needed instead of starting a new one
Press Release
Standalone provider cache server for efficient TACOS hosting
Terragrunt introduces the ability to run a standalone cache server giving TACOS operators more control to ensure efficient reuse of downloaded providers.
A single cache server process enables limitless parallelism enabling operators to scale workflow automation efficiently with minimal overhead.
Standalone cache server is available as of [RELEASE]. To learn more about how to integrate with your selfhosted TACAS, check the documentation.
Drawbacks
Operations for the additional component of the cache server increases the overhead for teams providing TACOS. This includes but is not limited to keeping it up to date and monitoring availability.
Terragrunt might need to improve handling situations where a cache server is supposed to be used but can't be reached, added complexity will complicate troubleshooting in some scenarios.
Sharing a cache server with untrusted entities could be enabled through this and might bring security issues like cache poisoning into the setup.
A long running cache server shared across many terragrunt invocations may increase the requirements for the cache server implementation itself compared over running a server for shorter times with limited scope.
Alternatives
- Using the cache server as is per terragrunt invocation
- Falling back on OpenTofu/terraform built in caching options that may improve in the future
- Implementing some form of provider caching outside of the realm of terragrunt
Migration Strategy
None required
Unresolved Questions
Are there other use cases for this outside of hosting systems that run terragrunt as a service integrated into team workflows (TACOS)?
Do other systems bring additional requirements to be able to integrate a standalone server?
Would running a central server on a network location be a useful scenario? This might introduce many additional security considerations compared to running via localhost only.
References
Proof of Concept Pull Request
No response
Support Level
Customer Name
No response
Summary
Starting from the interest in #3231 this is making the case for providing a terragrunt subcommand to start a stand alone provider cache server. In the discussion, creating a RFC is suggested.
Having a single cache server instance serving many parallel terragrunt invocations would improve efficiency on Terraform Automation & Collaboration Software (TACOS) platforms like Atlantis.
Motivation
Organisations running self hosted TACOS platforms or similar services like Atlantis for merge request workflow integration often find themselves with systems that will run terragrunt plan/apply and other commands frequently and in parallel.
Existing provider caching has proven lacking for such situations, which lead to terragrunt adding provider caching functionality.
For these systems having a single cache storage location is the most efficient way to use the cache. Past issues have shown that spinning up many cache servers in parallel pointing to the same directories can lead to locking issues among others.
Running a single permanent cache server on the automation system host allows for the most efficient use of cache. All terragrunt processes launched could connect to the same cache server serving providers from a unified cache location without locking issues.
Proposal
Introduce a new subcommand like
terragrunt cache-server. This command does nothing but start a cache server and not return unless a fatal error is encountered or signal to stop is received.Server parameters can be set using established terragrunt configuration methods like command line arguments or environment variables. These parameters include cache dir location, registry configuration, listening host/port and the authentication token.
Users of a system like atlantis could add the cache server process to the host/pod running atlantis and extend the atlantis configuration to invoke terragrunt in pipelines with the settings needed to connect to the standalone cache server. This would include enabling caching, providing a server URI and authentication token. Adding these options would differ depending on the actual TACOS used.
Technical Details
Press Release
Standalone provider cache server for efficient TACOS hosting
Terragrunt introduces the ability to run a standalone cache server giving TACOS operators more control to ensure efficient reuse of downloaded providers.
A single cache server process enables limitless parallelism enabling operators to scale workflow automation efficiently with minimal overhead.
Standalone cache server is available as of [RELEASE]. To learn more about how to integrate with your selfhosted TACAS, check the documentation.
Drawbacks
Operations for the additional component of the cache server increases the overhead for teams providing TACOS. This includes but is not limited to keeping it up to date and monitoring availability.
Terragrunt might need to improve handling situations where a cache server is supposed to be used but can't be reached, added complexity will complicate troubleshooting in some scenarios.
Sharing a cache server with untrusted entities could be enabled through this and might bring security issues like cache poisoning into the setup.
A long running cache server shared across many terragrunt invocations may increase the requirements for the cache server implementation itself compared over running a server for shorter times with limited scope.
Alternatives
Migration Strategy
None required
Unresolved Questions
Are there other use cases for this outside of hosting systems that run terragrunt as a service integrated into team workflows (TACOS)?
Do other systems bring additional requirements to be able to integrate a standalone server?
Would running a central server on a network location be a useful scenario? This might introduce many additional security considerations compared to running via localhost only.
References
Proof of Concept Pull Request
No response
Support Level
Customer Name
No response