Code Monkey home page Code Monkey logo

volvo-cars-lingon's Introduction

Go Reference GoReportCard example License Go Version Go Test Coverage

Lingon ๐Ÿ’ - Libraries for building platforms with Go

Project Status

This was a proof-of-concept that after evaluation we have decided not to take forward.

What is this?

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.

It can do 4 things so far

  • 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 and terragen.GenerateGoCode
  • export terraform Go code to valid Terraform HCL terra.Export

The only dependencies you need are:

  • Go
  • Terraform CLI
  • kubectl

Who is this for?

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.

Project status

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.

See FAQ for more details.

Required knowledge

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.

Getting started

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.

Examples

Install binaries

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 code
  • terragen - generate Go code from Terraform providers

Github releases

Or simply download the binaries from the releases page.

Install from source

go install github.com/volvo-cars/lingon/cmd/explode@latest
go install github.com/volvo-cars/lingon/cmd/kygo@latest
go install github.com/volvo-cars/lingon/cmd/terragen@latest 

Motivation

See Rationale for more details.

Extraordinary use cases

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

Why Go?

See Why Go for more details.

Similar projects

See Comparison for more details.

License

This code is released under the Apache-2.0 License.

volvo-cars-lingon's People

Contributors

veggiemonk avatar jlarfors avatar dependabot[bot] avatar 2lambda123 avatar penify-dev[bot] avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.