Bundle Concept - stefanprodan/timoni

Timoni is a package manager for Kubernetes that utilizes the CUE language and is inspired by Helm. It offers a superior experience in creating, packaging, and delivering applications to Kubernetes by relying on cuelang’s type safety, code generation, and data validation features. In contrast to Helm’s use of Go templates with YAML or Kustomize’s layering of YAML, Timoni provides a more streamlined approach.

A key concept in Timoni is a “bundle,” which is a CUE file for defining a group of instances along with their values and module references. Here’s an example of a bundle:

bundle : {
apiVersion :  " v1alpha1 "
name :  " podinfo "
instances : {
redis : {
module : {
url :      " oci://ghcr.io/stefanprodan/modules/redis "
version :  " 7.2.1 "
}
namespace :  " podinfo "
values :  maxmemory :  256
}
podinfo : {
module :  url :      " oci://ghcr.io/stefanprodan/modules/podinfo "
module :  version :  " 6.5.0 "
namespace :  " podinfo "
values :  caching : {
enabled :   true
redisURL :  " tcp://redis:6379 "
}
}
}
}

You can perform various operations on bundles using the following commands:

  • timoni bundle lint -f bundle.cue: Lint the bundle
  • timoni bundle build -f bundle.cue: Build the bundle
  • timoni bundle apply -f bundle.cue: Apply the bundle
  • timoni bundle delete -f bundle.cue: Delete the bundle

For more information on bundles, refer to the Bundle API documentation.

Timoni also supports the concept of “modules” and “instances.” A Timoni module is equivalent to a Helm chart, a Timoni bundle is equivalent to an umbrella chart, and a Timoni instance is equivalent to a Helm release.

For more details on modules, refer to the Timoni Modules documentation.

Additionally, Timoni allows you to share your application with others using bundles. A bundle contains everything you need to deploy, including referenced images. This makes it possible to move a bundle into a disconnected or airgapped environment. Once a bundle is installed, it is tracked as an “installation” of the bundle, which includes the parameters used to customize the installation, previous runs of the bundle, the current version of the bundle, and other useful metadata.

For more information on bundles and installations, refer to the Porter documentation on Concepts and Components.

Timoni also supports archiving bundles, which enables you to move the entire bundle, including the invocation image and any images declared in the bundle, into a private data center or across an air-gapped network.

For more details on archiving bundles, refer to the Porter documentation on Archiving Bundles.

In summary, Timoni’s bundle concept offers a declarative way of managing app delivery across clusters, with various options for creating, managing, and sharing bundles.