flux-local is a python library and set of tools for managing a flux gitops repository, with validation steps to help improve quality of commits, PRs, and general local testing.
Project description
flux-local is a set of tools and libraries for managing a local flux gitops repository focused on validation steps to help improve quality of commits, PRs, and general local testing.
This library uses command line tools like kustomize and helm to replicate the behavior of flux to gather objects in the cluster. It only looks at the local git repo, and not a live cluster. However, this is fine since the local repository has enough information and the definition is simple. Secrets are ignored as the content is not needed to validate the cluster is creating valid objects.
This library at first glance is little more than shell scripts running commands, but is easier to test, maintain, and evolve.
See documentation for full quickstart and API reference. See the github project.
flux-local CLI
The CLI is written in python and packaged as part of the flux-local
python library, which can be installed using pip:
$ pip3 install flux-local
You can use the flux-local
cli to inspect objects in the cluster, similar to how you might
use the flux command on a real cluster.
This example lists all Kustomizations in the cluster:
$ flux-local get ks
NAME PATH HELMREPOS RELEASES
apps ./tests/testdata/cluster/apps/prod 0 0
infra-controllers ./tests/testdata/cluster/infrastructure/controllers 0 0
infra-configs ./tests/testdata/cluster/infrastructure/configs 2 0
This example lists all HelmReleases in the cluster:
$ flux-local get hr -A
NAMESPACE NAME REVISION CHART SOURCE
podinfo podinfo 6.3.2 podinfo-podinfo podinfo
metallb metallb 4.1.14 metallb-metallb bitnami
This example lists all HelmReleases in a specific namespace:
$ flux-local get hr -n metallb
NAME REVISION CHART SOURCE
metallb 4.1.14 metallb-metallb bitnami
You can use the flux-local
cli to build all objects in a cluster, similar to how you
use kustomize build
, which is used underneath. Here is an example to build all flux
Kustomization
objects within a git repository, using kustomize cfg count
to parse
the yaml output:
$ flux-local build tests/testdata/cluster/ | kustomize cfg count
ClusterPolicy: 1
ConfigMap: 1
HelmRelease: 2
HelmRepository: 2
Namespace: 1
You can also specify the root to build all clusters.
Additionally, you can inflate HelmRelease
objects inside each Kustomization
by adding
the --enable-helm
command line flag. This example again shows kustomize cfg count
to parse the yaml output which now includes the resources from HelmRelease
objects
defined in the cluster:
$ flux-local build tests/testdata/cluster/ --enable-helm --skip-crds | kustomize cfg count
ClusterPolicy: 1
ClusterRole: 2
ClusterRoleBinding: 2
ConfigMap: 3
DaemonSet: 1
Deployment: 3
HelmRelease: 2
HelmRepository: 2
Ingress: 1
Namespace: 1
Role: 3
RoleBinding: 3
Secret: 1
Service: 3
ServiceAccount: 2
ValidatingWebhookConfiguration: 1
You may also use flux-local
to verify your local changes to cluster resources have the desird
effect. This is similar to flux diff
but entirely local. This will run a local kustomize build
first against the local repo then again against a prior repo revision, then prints the output:
$ flux-local diff ks apps
---
+++
@@ -2,6 +2,13 @@
kind: Namespace
metadata:
name: podinfo
+- apiVersion: v1
+ data:
+ foo: bar
+ kind: ConfigMap
+ metadata:
+ name: podinfo-config
+ namespace: podinfo
- apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
Additionally flux-local
can inflate a HelmRelease
locally and show diffs in the output
objects. This is similar to flux diff
but for HelmReleases:
$ flux-local diff hr -n podinfo podinfo
---
+++
@@ -33,8 +33,8 @@
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: podinfo
- app.kubernetes.io/version: 6.3.2
- helm.sh/chart: podinfo-6.3.2
+ app.kubernetes.io/version: 6.3.3
+ helm.sh/chart: podinfo-6.3.3
name: podinfo
spec:
ports:
...
Library
The flux_local
library documentation for details
on the python APIs provided.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for flux_local-0.4.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 956f2078e96d8c90f585d2bc37842d7d62e2b64865846af07225c85226bc0346 |
|
MD5 | f715b06509696e07b4128db8b7fef03b |
|
BLAKE2b-256 | be32558eef19beb2aa658b65d7ff4308d248ee5a72b371a29a5c51c690559fdc |