- What is this?
- Who is this for?
- Project status
- Required knowledge
- Getting started
- Examples
- Install binaries
- Motivation
- Extraordinary use cases
- Why Go?
- Similar projects
- License
Write Terraform (HCL) and Kubernetes (YAML) in Go. see Rationale for more details.
Lingon is not a platform, it is a thin wrapper around terraform and kubernetes API in a library meant to be consumed in a Go application that platform engineers write to manage their platforms. It is a tool to build and automate the creation and the management of platforms regardless of the target infrastructure and services.
- import kubernetes YAML manifests to valid Go code (even CRDs)
kube.Import
- export Go code to kubernetes YAML manifests
kube.Export
- generate Go code from Terraform providers
terragen.GenerateProviderSchema
andterragen.GenerateGoCode
- export terraform Go code to valid Terraform HCL
terra.Export
The only dependencies you need are:
- Go
- Terraform CLI
- kubectl
Lingon is aimed at advanced platform teams who need to automate the lifecycle of their cloud infrastructure and have suffered the pain of configuration languages and complexity of gluing tools together with more tools.
This project is in beta. The APIs are stable, but we do not promise backward compatibility at this point. We will eventually promise backward compatibility when the project is more battle tested.
This was a proof-of-concept at volvo-cars. Unfortunately the project for which Lingon was being developed ended. The original authors (jacob and julien) believe in the concept and are now maintainers of this project and will make sure it is healthy and receives updates.
See FAQ for more details.
This is not a tutorial on how to use Go, Terraform or Kubernetes. Lingon doesn't try to hide the complexity of these technologies, it embraces it.
Which is why you need to know how to use these technologies to use Lingon.
Note that in the terraform case, the code generation is fast. Compiling all the generated resources will take a while. Thankfully, Go is fast at compiling and keeps a cache of compiled packages. Expect to wait a few minutes the first time you run
go build
after generating the code.
- All the Examples are in the documentation.
- Convert kubernetes manifests from YAML containing CRDs to Go: example_import_test.go
- Export Go code to kubernetes manifests: kube_test.go
- Create the HCL code for Terraform: aws_test.go
- An example is Platypus which shows how the kubernetes and terraform libraries can be used together.
Lingon provides helper binaries.
explode
- explode a kubernetes manifests YAML file into multiple files organized by kind and namespace.kygo
- convert kubernetes YAML manifests to Go codeterragen
- generate Go code from Terraform providers
Or simply download the binaries from the releases page.
go install github.com/golingon/lingon/cmd/explode@latest
go install github.com/golingon/lingon/cmd/kygo@latest
go install github.com/golingon/lingon/cmd/terragen@latest
See Rationale for more details.
Lingon might be helpful if you need to:
- use the SDK of your cloud provider to access APIs (alpha, beta, deprecated) not included in a Terraform provider.
- authenticate to a multitude of providers or webhook with specific requirements (e.g. Azure SSO, AWS, Github, Slack, etc.)
- automate some parts of the infrastructure that are really hard to test (e.g. iptables, DNS, IAM, etc.)
- store the state of the infrastructure in a database for further analysis
- collect advanced metrics about the failures occurring during the deployment of the infrastructure
- enforce advanced rules on kubernetes manifests before deploying it (e.g. every service account must be related to a role and that role cannot have '*' in access rights, etc.)
- define CI/CD pipelines as imperative code, not declarative.
- execute smoke tests after deploying changes to the platform (HTTP, gRPC, DB connection, etc.)
- write unit tests for your infrastructure
See Why Go for more details.
See Comparison for more details.
This code is released under the Apache-2.0 License.