Compare commits

..

9 Commits

Author SHA1 Message Date
Jeff McCune
f7e0470c48 version 0.104.0 with cue 0.12.0 2025-02-06 14:37:50 -08:00
Jeff McCune
d5c7b82684 go mod tidy 2025-02-06 14:33:14 -08:00
Jeff McCune
7d0392e596 update to cue 0.12.0
Most relevant for us: lots of fixes to the evaluator, enables the embed
and toposort experiments.
2025-02-06 14:31:39 -08:00
Gary Larizza
410b882d1d Merge pull request #403 from holos-run/gl/hello-holos-testscript
docs: Update Hello Holos tutorial to use testscript
2025-01-22 14:43:47 -08:00
Gary Larizza
e2648202dc Merge pull request #404 from holos-run/gl/kustomize-testscript
docs: Update Kustomize tutorial to use testscript
2025-01-22 14:43:33 -08:00
Jeff McCune
44c2fe220a test: fix helm capabilities test
Helm was upgraded in GitHub Actions resulting in an accidental failure
of the test case.
2025-01-17 12:33:28 -08:00
Jeff McCune
fe1ae2fa80 docs: migrate from an ApplicationSet blog post 2025-01-17 12:22:56 -08:00
Gary Larizza
8fbee1cbd9 docs: Update Kustomize tutorial to use testscript
PROBLEM:

The "Kustomize" tutorial has hardcoded code blocks and hasn't been
updated to use the automated testscript workflow.

SOLUTION:

Create a test for the Kustomize tutorial.
Create a testscript for the Kustomize test.
Update the Kustomize MDX file to load in data from the testscript directory.

OUTCOME:

The code content in the Kustomize tutorial now comes directly from the
testscript workflow.
2025-01-16 14:24:24 -08:00
Gary Larizza
982db2cccc docs: Update Hello Holos tutorial to use testscript
PROBLEM:

The "Hello Holos" tutorial has hardcoded code blocks and hasn't been
updated to use the automated testscript workflow.

SOLUTION:

* Create a test for the Hello Holos tutorial.
* Create a testscript for the Hello Holos test.
* Update the Hello Holos MDX file to load in data from the testscript directory.

OUTCOME:

The code content in the Hello Holos tutorial now comes directly from the
testscript workflow.
2025-01-16 10:12:17 -08:00
170 changed files with 3475 additions and 1788 deletions

1
.gitignore vendored
View File

@@ -12,3 +12,4 @@ tmp/
/holos-k3d/
/holos-infra/
node_modules/
.tmp/

View File

@@ -1,7 +1,9 @@
# https://github.com/holos-run/holos/issues/330
exec holos init platform v1alpha5 --force
# Make sure the helm chart works with plain helm
exec helm template ./components/capabilities/vendor/0.1.0/capabilities
cmp stdout want/helm-template.yaml
stdout 'name: has-foo-v1beta1'
stdout 'kubeVersion: v'
exec holos render platform ./platform
# When no capabilities are specified
cmp deploy/components/capabilities/capabilities.gen.yaml want/when-no-capabilities-specified.yaml

20
doc/md/topics/kargo.mdx Normal file
View File

@@ -0,0 +1,20 @@
---
description: Kargo
slug: kargo
sidebar_position: 110
---
# Kargo
Holos pairs nicely with [Kargo], offering a holistic solution for code
promotion across stages.
Watch this space for a more detailed write up of the integration being
developed.
If you're interested in this topic, please thumbs up the [Kargo
Topic](https://github.com/holos-run/holos/issues/378) issue, or drop into
[Discord] and let us know about your use case.
[Kargo]: https://kargo.io/
[Discord]: https://discord.gg/JgDVbNpye7

View File

@@ -1,2 +0,0 @@
kargo-demo/
.tmp/

View File

@@ -1,17 +0,0 @@
env GH_USER=holos-run
# Remove the directory if it already exists
exec rm -rf kargo-demo
# Clone your fork of the kargo-demo repository
exec bash -c 'bash -euo pipefail command.sh 2>&1'
cmp stdout output.txt
# Get the git commit
cd kargo-demo
exec git rev-parse --verify origin/HEAD
cp stdout $WORK/git.commit
-- command.sh --
git clone https://github.com/${GH_USER}/kargo-demo.git
cd kargo-demo
-- output.txt --
Cloning into 'kargo-demo'...

View File

@@ -1,37 +0,0 @@
env GH_USER=jeffmccune
cd ../script-01-clone/kargo-demo
## Walk the reader from entrypoint to the deployment pipeline
# holos render platform entrypoint
exec bash -c 'cat $(<$WORK/entrypoint.path)'
cp stdout $WORK/entrypoint.txt
exec bash -c 'basename $(<$WORK/entrypoint.path)'
cp stdout $WORK/entrypoint.basename
# platform.stacks location
exec bash -c 'cat $(<$WORK/stacks.path)'
cp stdout $WORK/stacks.txt
exec bash -c 'basename $(<$WORK/stacks.path)'
cp stdout $WORK/stacks.basename
# certmanager.config location
exec bash -c 'cat $(<$WORK/config.path)'
cp stdout $WORK/config.txt
exec bash -c 'basename $(<$WORK/config.path)'
cp stdout $WORK/config.basename
# Cert Manager Component.
exec bash -c 'cat $(<$WORK/component.path)'
cp stdout $WORK/component.txt
# Get the path basename for the docs.
exec bash -c 'basename $(<$WORK/component.path)'
cp stdout $WORK/component.basename
-- config.path --
config/certmanager/certmanager.cue
-- stacks.path --
config/platform/security.cue
-- entrypoint.path --
platform/stacks.cue
-- component.path --
stacks/security/components/cert-manager/cert-manager.cue

View File

@@ -1,56 +0,0 @@
env GH_USER=jeffmccune
env HOME=$WORK/.tmp
cd ../script-01-clone/kargo-demo
chmod 0755 $WORK/update.sh
# Combine the steps separated in the doc.
exec cat $WORK/header.sh $WORK/body.txt $WORK/trailer.sh
stdin stdout
exec bash -xeuo pipefail
cmp config/platform/organization_$GH_USER.cue $WORK/code.want.cue
# Render the platform
exec bash -c 'bash -euo pipefail $WORK/command.sh 2>&1'
stdin stdout
exec $WORK/update.sh $WORK/output.txt
# Get the diff
exec bash -c 'bash -euo pipefail $WORK/diff.sh 2>&1'
stdin stdout
exec $WORK/update.sh $WORK/diff.patch
# Set the author
exec git config --global user.name 'Holos Docs'
exec git config --global user.email 'hello@holos.run'
# Make the commit
exec bash -c 'bash -euo pipefail $WORK/commit.sh 2>&1'
stdin stdout
exec $WORK/update.sh $WORK/commit.txt
-- update.sh --
#! /bin/bash
set -euo pipefail
[[ -s "$1" ]] && [[ -z "${HOLOS_UPDATE_SCRIPTS:-}" ]] && exit 0
cat > "$1"
-- header.sh --
cat <<EOF > config/platform/organization_${GH_USER}.cue
-- body.txt --
@if(${GH_USER})
package platform
organization: repoURL: "https://github.com/${GH_USER}/kargo-demo.git"
-- trailer.sh --
EOF
-- code.want.cue --
@if(jeffmccune)
package platform
organization: repoURL: "https://github.com/jeffmccune/kargo-demo.git"
-- command.sh --
holos render platform -t ${GH_USER}
-- commit.sh --
git add .
git commit -m "Switch to $GH_USER fork"
-- diff.sh --
git diff

View File

@@ -1,2 +0,0 @@
git clone https://github.com/${GH_USER}/kargo-demo.git
cd kargo-demo

View File

@@ -1 +0,0 @@
238fe0403c99eeea4f4fb764a88b780554048414

View File

@@ -1 +0,0 @@
Cloning into 'kargo-demo'...

View File

@@ -1 +0,0 @@
stacks/security/components/cert-manager/cert-manager.cue

View File

@@ -1,21 +0,0 @@
package holos
import "holos.example/config/certmanager"
// Produce a helm chart build plan.
holos: Component.BuildPlan
Component: #Helm & {
Name: "cert-manager"
Namespace: certmanager.config.namespace
Chart: certmanager.config.chart
EnableHooks: true
Values: #Values & {
crds: enabled: true
startupapicheck: enabled: false
// https://github.com/cert-manager/cert-manager/issues/6716
global: leaderElection: namespace: Namespace
}
}

View File

@@ -1 +0,0 @@
config/certmanager/certmanager.cue

View File

@@ -1,30 +0,0 @@
@extern(embed)
package certmanager
import "github.com/holos-run/holos/api/core/v1alpha5:core"
// Unify data from yaml for Kargo integration.
_data: _ @embed(file=cert-manager.yaml)
config: #Config & {
namespace: "cert-manager"
// datafile value must align to the embed file directive above for proper
// configuration of Kargo promotion stages.
datafile: "./config/certmanager/cert-manager.yaml"
chart: {
name: "cert-manager"
version: _data.chart.version
repository: {
name: "jetstack"
url: "https://charts.jetstack.io"
}
}
}
#Config: {
namespace: string
datafile: string
chart: core.#Chart & {
version: =~"^v{0,1}[0-9]+\\.[0-9]+\\.[0-9]+$"
}
}

View File

@@ -1,8 +0,0 @@
package main
import "holos.example/config/platform"
// Register all stack components with the platform spec.
for STACK in platform.stacks {
Platform: Components: STACK.components
}

View File

@@ -1,46 +0,0 @@
package platform
import "holos.example/config/certmanager"
stacks: security: (#StackBuilder & {
(#PromoterBuilder & {parameters: {
name: "cert-manager"
config: {
datafile: certmanager.config.datafile
chart: certmanager.config.chart
}
}}).promoter
// Manage the external-secrets namespace.
stack: namespaces: "external-secrets": _
parameters: {
name: "security"
components: {
namespaces: {
path: "stacks/security/components/namespaces"
annotations: description: "configures namespaces for all stacks"
}
"external-secrets-crds": {
path: "stacks/security/components/external-secrets-crds"
annotations: description: "external secrets custom resource definitions"
}
"external-secrets": {
path: "stacks/security/components/external-secrets"
annotations: description: "external secrets custom resource definitions"
}
"cert-manager": {
path: "stacks/security/components/cert-manager"
annotations: description: "cert-manager operator and custom resource definitions"
parameters: {
kargoProject: "cert-manager"
kargoStage: "main"
}
}
"local-ca": {
path: "stacks/security/components/local-ca"
annotations: description: "localhost mkcert certificate authority"
}
}
}
}).stack

View File

@@ -1,4 +0,0 @@
@if(${GH_USER})
package platform
organization: repoURL: "https://github.com/${GH_USER}/kargo-demo.git"

View File

@@ -1,4 +0,0 @@
@if(jeffmccune)
package platform
organization: repoURL: "https://github.com/jeffmccune/kargo-demo.git"

View File

@@ -1 +0,0 @@
holos render platform -t ${GH_USER}

View File

@@ -1,2 +0,0 @@
git add .
git commit -m "Switch to $GH_USER fork"

View File

@@ -1,3 +0,0 @@
[main b883807] Switch to jeffmccune fork
43 files changed, 70 insertions(+), 66 deletions(-)
create mode 100644 config/platform/organization_jeffmccune.cue

View File

@@ -1,686 +0,0 @@
diff --git a/deploy/components/cert-manager-promoter/cert-manager-promoter.gen.yaml b/deploy/components/cert-manager-promoter/cert-manager-promoter.gen.yaml
index 55a6a49..ab483d5 100644
--- a/deploy/components/cert-manager-promoter/cert-manager-promoter.gen.yaml
+++ b/deploy/components/cert-manager-promoter/cert-manager-promoter.gen.yaml
@@ -28,7 +28,7 @@ spec:
checkout:
- branch: main
path: ./src
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- as: update
config:
@@ -51,7 +51,7 @@ spec:
uses: git-push
- as: pull
config:
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
sourceBranch: ${{ outputs.push.branch }}
targetBranch: main
uses: git-open-pr
diff --git a/deploy/components/kargo-promoter/kargo-promoter.gen.yaml b/deploy/components/kargo-promoter/kargo-promoter.gen.yaml
index 87e4bfd..a2eb91d 100644
--- a/deploy/components/kargo-promoter/kargo-promoter.gen.yaml
+++ b/deploy/components/kargo-promoter/kargo-promoter.gen.yaml
@@ -28,7 +28,7 @@ spec:
checkout:
- branch: main
path: ./src
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- as: update
config:
@@ -51,7 +51,7 @@ spec:
uses: git-push
- as: pull
config:
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
sourceBranch: ${{ outputs.push.branch }}
targetBranch: main
uses: git-open-pr
diff --git a/deploy/gitops/app-projects.application.gen.yaml b/deploy/gitops/app-projects.application.gen.yaml
index a98a52e..a58f7fb 100644
--- a/deploy/gitops/app-projects.application.gen.yaml
+++ b/deploy/gitops/app-projects.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/app-projects
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/argocd-crds.application.gen.yaml b/deploy/gitops/argocd-crds.application.gen.yaml
index 6aba002..4ce8835 100644
--- a/deploy/gitops/argocd-crds.application.gen.yaml
+++ b/deploy/gitops/argocd-crds.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/argocd-crds
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/argocd-secrets.application.gen.yaml b/deploy/gitops/argocd-secrets.application.gen.yaml
index 245fb00..0a5b79d 100644
--- a/deploy/gitops/argocd-secrets.application.gen.yaml
+++ b/deploy/gitops/argocd-secrets.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/argocd-secrets
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/argocd.application.gen.yaml b/deploy/gitops/argocd.application.gen.yaml
index 764a55f..6c4cfad 100644
--- a/deploy/gitops/argocd.application.gen.yaml
+++ b/deploy/gitops/argocd.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/argocd
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/cert-manager-promoter.application.gen.yaml b/deploy/gitops/cert-manager-promoter.application.gen.yaml
index c28bb66..a98c0ef 100644
--- a/deploy/gitops/cert-manager-promoter.application.gen.yaml
+++ b/deploy/gitops/cert-manager-promoter.application.gen.yaml
@@ -16,5 +16,5 @@ spec:
project: security
source:
path: deploy/components/cert-manager-promoter
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/cert-manager.application.gen.yaml b/deploy/gitops/cert-manager.application.gen.yaml
index 14e15f0..d6a24d3 100644
--- a/deploy/gitops/cert-manager.application.gen.yaml
+++ b/deploy/gitops/cert-manager.application.gen.yaml
@@ -12,5 +12,5 @@ spec:
project: security
source:
path: deploy/components/cert-manager
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/external-secrets-crds.application.gen.yaml b/deploy/gitops/external-secrets-crds.application.gen.yaml
index 5515a52..c86bbf8 100644
--- a/deploy/gitops/external-secrets-crds.application.gen.yaml
+++ b/deploy/gitops/external-secrets-crds.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: security
source:
path: deploy/components/external-secrets-crds
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/external-secrets.application.gen.yaml b/deploy/gitops/external-secrets.application.gen.yaml
index b1b2434..a1a90d2 100644
--- a/deploy/gitops/external-secrets.application.gen.yaml
+++ b/deploy/gitops/external-secrets.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: security
source:
path: deploy/components/external-secrets
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/gateway-api.application.gen.yaml b/deploy/gitops/gateway-api.application.gen.yaml
index a567685..1209068 100644
--- a/deploy/gitops/gateway-api.application.gen.yaml
+++ b/deploy/gitops/gateway-api.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/gateway-api
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/httproutes.application.gen.yaml b/deploy/gitops/httproutes.application.gen.yaml
index 01e7eea..ba17725 100644
--- a/deploy/gitops/httproutes.application.gen.yaml
+++ b/deploy/gitops/httproutes.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/httproutes
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istio-base.application.gen.yaml b/deploy/gitops/istio-base.application.gen.yaml
index 344bba2..32d4f4b 100644
--- a/deploy/gitops/istio-base.application.gen.yaml
+++ b/deploy/gitops/istio-base.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istio-base
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istio-cni.application.gen.yaml b/deploy/gitops/istio-cni.application.gen.yaml
index 478e7c4..5fdf222 100644
--- a/deploy/gitops/istio-cni.application.gen.yaml
+++ b/deploy/gitops/istio-cni.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istio-cni
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istio-gateway.application.gen.yaml b/deploy/gitops/istio-gateway.application.gen.yaml
index 9561e06..0267f9b 100644
--- a/deploy/gitops/istio-gateway.application.gen.yaml
+++ b/deploy/gitops/istio-gateway.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istio-gateway
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istio-ztunnel.application.gen.yaml b/deploy/gitops/istio-ztunnel.application.gen.yaml
index a6da24e..ac21566 100644
--- a/deploy/gitops/istio-ztunnel.application.gen.yaml
+++ b/deploy/gitops/istio-ztunnel.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istio-ztunnel
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/istiod.application.gen.yaml b/deploy/gitops/istiod.application.gen.yaml
index 57d3fdc..a09c8b9 100644
--- a/deploy/gitops/istiod.application.gen.yaml
+++ b/deploy/gitops/istiod.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: network
source:
path: deploy/components/istiod
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/kargo-promoter.application.gen.yaml b/deploy/gitops/kargo-promoter.application.gen.yaml
index 079ee37..f6db555 100644
--- a/deploy/gitops/kargo-promoter.application.gen.yaml
+++ b/deploy/gitops/kargo-promoter.application.gen.yaml
@@ -16,5 +16,5 @@ spec:
project: argocd
source:
path: deploy/components/kargo-promoter
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/kargo-secrets.application.gen.yaml b/deploy/gitops/kargo-secrets.application.gen.yaml
index c1d048b..308560d 100644
--- a/deploy/gitops/kargo-secrets.application.gen.yaml
+++ b/deploy/gitops/kargo-secrets.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/kargo-secrets
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/kargo.application.gen.yaml b/deploy/gitops/kargo.application.gen.yaml
index 22408e1..04f92fc 100644
--- a/deploy/gitops/kargo.application.gen.yaml
+++ b/deploy/gitops/kargo.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/kargo
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/local-ca.application.gen.yaml b/deploy/gitops/local-ca.application.gen.yaml
index 38901f2..16caa18 100644
--- a/deploy/gitops/local-ca.application.gen.yaml
+++ b/deploy/gitops/local-ca.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: security
source:
path: deploy/components/local-ca
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/namespaces.application.gen.yaml b/deploy/gitops/namespaces.application.gen.yaml
index e35f41c..2fd01a8 100644
--- a/deploy/gitops/namespaces.application.gen.yaml
+++ b/deploy/gitops/namespaces.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: security
source:
path: deploy/components/namespaces
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/rollouts-crds.application.gen.yaml b/deploy/gitops/rollouts-crds.application.gen.yaml
index 221cb50..761a823 100644
--- a/deploy/gitops/rollouts-crds.application.gen.yaml
+++ b/deploy/gitops/rollouts-crds.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/rollouts-crds
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/gitops/rollouts.application.gen.yaml b/deploy/gitops/rollouts.application.gen.yaml
index f96f85c..d1fc696 100644
--- a/deploy/gitops/rollouts.application.gen.yaml
+++ b/deploy/gitops/rollouts.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: argocd
source:
path: deploy/components/rollouts
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml b/deploy/projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
index 815f6a3..bbf1f89 100644
--- a/deploy/projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
+++ b/deploy/projects/httpbin/components/kargo-stages/kargo-stages.gen.yaml
@@ -16,7 +16,7 @@ spec:
- branch: project/httpbin/component/dev-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -46,7 +46,7 @@ spec:
- name: httpbin-dev-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -73,7 +73,7 @@ spec:
- branch: project/httpbin/component/prod-us-central-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -103,7 +103,7 @@ spec:
- name: httpbin-prod-us-central-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -131,7 +131,7 @@ spec:
- branch: project/httpbin/component/prod-us-east-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -161,7 +161,7 @@ spec:
- name: httpbin-prod-us-east-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -189,7 +189,7 @@ spec:
- branch: project/httpbin/component/prod-us-west-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -219,7 +219,7 @@ spec:
- name: httpbin-prod-us-west-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -247,7 +247,7 @@ spec:
- branch: project/httpbin/component/test-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -277,7 +277,7 @@ spec:
- name: httpbin-test-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -305,7 +305,7 @@ spec:
- branch: project/httpbin/component/uat-httpbin
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -335,7 +335,7 @@ spec:
- name: httpbin-uat-httpbin
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
diff --git a/deploy/projects/httpbin/gitops/dev-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/dev-httpbin.application.gen.yaml
index 03136e0..8b207ff 100644
--- a/deploy/projects/httpbin/gitops/dev-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/dev-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/dev-httpbin
diff --git a/deploy/projects/httpbin/gitops/kargo-project.application.gen.yaml b/deploy/projects/httpbin/gitops/kargo-project.application.gen.yaml
index 9e666a7..07ebce2 100644
--- a/deploy/projects/httpbin/gitops/kargo-project.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/kargo-project.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-project
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/httpbin/gitops/kargo-stages.application.gen.yaml b/deploy/projects/httpbin/gitops/kargo-stages.application.gen.yaml
index df82b81..157a1e0 100644
--- a/deploy/projects/httpbin/gitops/kargo-stages.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/kargo-stages.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: httpbin
source:
path: deploy/projects/httpbin/components/kargo-stages
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/httpbin/gitops/prod-us-central-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/prod-us-central-httpbin.application.gen.yaml
index d3eb9ee..3e5e8b3 100644
--- a/deploy/projects/httpbin/gitops/prod-us-central-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/prod-us-central-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/prod-us-central-httpbin
diff --git a/deploy/projects/httpbin/gitops/prod-us-east-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/prod-us-east-httpbin.application.gen.yaml
index 2d768f4..e43d1f6 100644
--- a/deploy/projects/httpbin/gitops/prod-us-east-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/prod-us-east-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/prod-us-east-httpbin
diff --git a/deploy/projects/httpbin/gitops/prod-us-west-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/prod-us-west-httpbin.application.gen.yaml
index 8903303..a7012b0 100644
--- a/deploy/projects/httpbin/gitops/prod-us-west-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/prod-us-west-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/prod-us-west-httpbin
diff --git a/deploy/projects/httpbin/gitops/test-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/test-httpbin.application.gen.yaml
index 5426c31..296e3ed 100644
--- a/deploy/projects/httpbin/gitops/test-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/test-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/test-httpbin
diff --git a/deploy/projects/httpbin/gitops/uat-httpbin.application.gen.yaml b/deploy/projects/httpbin/gitops/uat-httpbin.application.gen.yaml
index 717e608..264d1c4 100644
--- a/deploy/projects/httpbin/gitops/uat-httpbin.application.gen.yaml
+++ b/deploy/projects/httpbin/gitops/uat-httpbin.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: httpbin
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/httpbin/component/uat-httpbin
diff --git a/deploy/projects/podinfo/components/kargo-stages/kargo-stages.gen.yaml b/deploy/projects/podinfo/components/kargo-stages/kargo-stages.gen.yaml
index 1107e34..2ebbbd1 100644
--- a/deploy/projects/podinfo/components/kargo-stages/kargo-stages.gen.yaml
+++ b/deploy/projects/podinfo/components/kargo-stages/kargo-stages.gen.yaml
@@ -16,7 +16,7 @@ spec:
- branch: project/podinfo/component/dev-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -46,7 +46,7 @@ spec:
- name: podinfo-dev-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -73,7 +73,7 @@ spec:
- branch: project/podinfo/component/prod-us-central-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -103,7 +103,7 @@ spec:
- name: podinfo-prod-us-central-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -131,7 +131,7 @@ spec:
- branch: project/podinfo/component/prod-us-east-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -161,7 +161,7 @@ spec:
- name: podinfo-prod-us-east-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -189,7 +189,7 @@ spec:
- branch: project/podinfo/component/prod-us-west-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -219,7 +219,7 @@ spec:
- name: podinfo-prod-us-west-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -247,7 +247,7 @@ spec:
- branch: project/podinfo/component/test-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -277,7 +277,7 @@ spec:
- name: podinfo-test-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
@@ -305,7 +305,7 @@ spec:
- branch: project/podinfo/component/uat-podinfo
create: true
path: ./out
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: git-clone
- config:
path: ./out
@@ -335,7 +335,7 @@ spec:
- name: podinfo-uat-podinfo
sources:
- desiredCommitFromStep: commit
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
uses: argocd-update
requestedFreight:
- origin:
diff --git a/deploy/projects/podinfo/gitops/dev-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/dev-podinfo.application.gen.yaml
index 9b3108e..9ac4849 100644
--- a/deploy/projects/podinfo/gitops/dev-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/dev-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/dev-podinfo
diff --git a/deploy/projects/podinfo/gitops/kargo-project.application.gen.yaml b/deploy/projects/podinfo/gitops/kargo-project.application.gen.yaml
index 3878efa..ab934d5 100644
--- a/deploy/projects/podinfo/gitops/kargo-project.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/kargo-project.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: podinfo
source:
path: deploy/projects/podinfo/components/kargo-project
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/podinfo/gitops/kargo-stages.application.gen.yaml b/deploy/projects/podinfo/gitops/kargo-stages.application.gen.yaml
index 0d4ade7..1b5eb9f 100644
--- a/deploy/projects/podinfo/gitops/kargo-stages.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/kargo-stages.application.gen.yaml
@@ -10,5 +10,5 @@ spec:
project: podinfo
source:
path: deploy/projects/podinfo/components/kargo-stages
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: main
diff --git a/deploy/projects/podinfo/gitops/prod-us-central-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/prod-us-central-podinfo.application.gen.yaml
index 59b3f98..182a3c9 100644
--- a/deploy/projects/podinfo/gitops/prod-us-central-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/prod-us-central-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/prod-us-central-podinfo
diff --git a/deploy/projects/podinfo/gitops/prod-us-east-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/prod-us-east-podinfo.application.gen.yaml
index 0165d40..6101a9b 100644
--- a/deploy/projects/podinfo/gitops/prod-us-east-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/prod-us-east-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/prod-us-east-podinfo
diff --git a/deploy/projects/podinfo/gitops/prod-us-west-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/prod-us-west-podinfo.application.gen.yaml
index 3422981..88b7409 100644
--- a/deploy/projects/podinfo/gitops/prod-us-west-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/prod-us-west-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/prod-us-west-podinfo
diff --git a/deploy/projects/podinfo/gitops/test-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/test-podinfo.application.gen.yaml
index 7ca895f..c3c32a1 100644
--- a/deploy/projects/podinfo/gitops/test-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/test-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/test-podinfo
diff --git a/deploy/projects/podinfo/gitops/uat-podinfo.application.gen.yaml b/deploy/projects/podinfo/gitops/uat-podinfo.application.gen.yaml
index cb28add..63cf194 100644
--- a/deploy/projects/podinfo/gitops/uat-podinfo.application.gen.yaml
+++ b/deploy/projects/podinfo/gitops/uat-podinfo.application.gen.yaml
@@ -14,5 +14,5 @@ spec:
project: podinfo
source:
path: ./
- repoURL: https://github.com/holos-run/kargo-demo.git
+ repoURL: https://github.com/jeffmccune/kargo-demo.git
targetRevision: project/podinfo/component/uat-podinfo

View File

@@ -1 +0,0 @@
cat <<EOF > config/platform/organization_${GH_USER}.cue

View File

@@ -1,47 +0,0 @@
rendered kargo-project for project podinfo in 438.04325ms
rendered kargo-promoter for stack argocd in 440.84075ms
rendered kargo-secrets for stack argocd in 441.76175ms
rendered rollouts for stack argocd in 441.989625ms
rendered kargo-project for project httpbin in 444.166291ms
rendered kargo-stages for project httpbin in 446.7485ms
rendered kargo-stages for project podinfo in 446.739792ms
rendered argocd-secrets for stack argocd in 448.0085ms
rendered app-projects for stack argocd in 449.610209ms
rendered gateway-api for stack network in 597.720375ms
rendered istio-gateway for stack network in 248.44325ms
rendered rollouts-crds for stack argocd in 885.346417ms
rendered namespaces for stack security in 478.418ms
rendered local-ca for stack security in 244.84025ms
rendered argocd-crds for stack argocd in 991.27875ms
rendered external-secrets-crds for stack security in 686.799417ms
rendered istio-cni for stack network in 748.069458ms
rendered istio-ztunnel for stack network in 762.896542ms
rendered test-httpbin for project httpbin in 318.5385ms
rendered cert-manager-promoter for stack security in 481.661833ms
rendered dev-httpbin for project httpbin in 465.202083ms
Pulled: ghcr.io/akuity/kargo-charts/kargo:1.1.1
Digest: sha256:4055c72418db85b85979da2fe12136c0e275709efc2e36a505b158e8234ad443
rendered kargo for stack argocd in 1.396269208s
rendered istiod for stack network in 997.264208ms
rendered external-secrets for stack security in 996.459042ms
rendered uat-httpbin for project httpbin in 517.124875ms
rendered prod-us-central-httpbin for project httpbin in 344.330875ms
rendered prod-us-east-httpbin for project httpbin in 449.991417ms
rendered prod-us-west-httpbin for project httpbin in 411.234333ms
rendered argocd for stack argocd in 1.631300708s
rendered istio-base for stack network in 1.203177s
rendered cert-manager for stack security in 1.127040208s
rendered httproutes for stack network in 1.556993875s
Pulled: ghcr.io/stefanprodan/charts/podinfo:6.7.0
Digest: sha256:104d101017e501c63b3aa71b20d5edd2ca6d5d58cbc57ff8163770110f92b9db
rendered dev-podinfo for project podinfo in 1.010673334s
rendered test-podinfo for project podinfo in 945.39075ms
rendered prod-us-west-podinfo for project podinfo in 897.117125ms
rendered uat-podinfo for project podinfo in 1.022036209s
Pulled: ghcr.io/stefanprodan/charts/podinfo:6.6.2
Digest: sha256:83295d47de6d6ca634ed4b952a7572fc176bcc38854d0c11ca0fa197bc5f1154
rendered prod-us-central-podinfo for project podinfo in 977.250667ms
Pulled: ghcr.io/stefanprodan/charts/podinfo:6.6.1
Digest: sha256:0cc9a8446c95009ef382f5eade883a67c257f77d50f84e78ecef2aac9428d1e5
rendered prod-us-east-podinfo for project podinfo in 1.071360916s
rendered platform in 2.467827834s

View File

@@ -1,8 +0,0 @@
cd ../script-setup/kargo-demo
# Execute the example capture stdout and stderr to one file.
exec bash -c 'bash -euo pipefail $WORK/tree.sh 2>&1'
# Copy standard output to a file to embed in the docs.
cp stdout $WORK/tree.txt
-- tree.sh --
tree -L3 -d platform stacks config

View File

@@ -1,40 +0,0 @@
---
title: Progressive Delivery
description: Learn how to manage progressive delivery pipelines with Holos.
sidebar_position: 110
---
import DocCardList from '@theme/DocCardList';
# Progressive Delivery
Holos pairs nicely with [Kargo], offering a holistic way to manage the
configuration of reusable progressive rollout deployment pipelines for Holos
components.
> Kargo is a next-generation continuous delivery and application lifecycle
> orchestration platform for Kubernetes. It builds upon GitOps principles and
> integrates with existing technologies, like Argo CD, to streamline and automate
> the progressive rollout of changes across the many stages of an application's
> lifecycle. ([ref](https://github.com/akuity/kargo#:~:text=Kargo%20is%20a%20next%2Dgeneration,stages%20of%20an%20application's%20lifecycle.))
Two main use cases are addressed within this topic.
1. **Platform Components**: Platform operators want pull requests automatically
opened when new versions of cluster add-ons are available so they can see
upcoming changes clearly.
2. **Workloads**: Product development teams want a well defined deployment
pipeline to automatically and safely promote new features and bug fixes. For
example, from dev to test to staging, then across multiple production regions
globally.
:::tip
Holos pairs well with Kargo to progressively deploy changes across multiple
clusters. Contact us for personalized [support] for your use case.
:::
---
<DocCardList />
[Kargo]: https://kargo.io/
[support]: ../support.mdx

View File

@@ -1,184 +0,0 @@
---
description: Automatic pull requests for platform components.
sidebar_position: 100
---
import useBaseUrl from '@docusaurus/useBaseUrl';
import ThemedImage from '@theme/ThemedImage';
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
# Platform Components
## Overview
We'll use Holos to configure Kargo to automatically watch for new versions of
the Istio, cert-manager, and external-secrets cluster platform components.
We'll learn how to define a reusable technique to mix-in the deployment pipeline
to any other cluster add-ons, like Kargo and ArgoCD.
<ThemedImage
alt="Pull Request summary for an available cert-manager update"
sources= {{
light: useBaseUrl('/img/kargo/add-on-promoter/kargo-pr-small.light.png'),
dark: useBaseUrl('/img/kargo/add-on-promoter/kargo-pr-small.dark.png'),
}}
/>
<ThemedImage
alt="Pull Request diff for an available cert-manager update"
sources= {{
light: useBaseUrl('/img/kargo/add-on-promoter/diff.light.png'),
dark: useBaseUrl('/img/kargo/add-on-promoter/diff.dark.png'),
}}
/>
## Setup
First, [fork] the [kargo-demo] repository to your personal account. Set your
GitHub user name for use through the rest of this tutorial.
```bash
export GH_USER=<your username>
```
Clone your fork. We'll run the rest of the commands from the root of the
repository.
import SetupCommand from '!!raw-loader!./_platform-components/script-01-clone/command.sh';
import SetupOutput from '!!raw-loader!./_platform-components/script-01-clone/output.txt';
<Tabs groupId="setup">
<TabItem value="command" label="Command">
<CodeBlock language="bash">{SetupCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
<CodeBlock language="txt">{SetupOutput}</CodeBlock>
</TabItem>
</Tabs>
## Configuration Tour
Let's review what happens when the `holos render platform` command renders the
Kargo deployment pipeline configuration for `cert-manager`.
import GitHubLink from '@site/src/components/GitHubLink';
import GitCommit from '!!raw-loader!./_platform-components/script-01-clone/git.commit';
import CertManagerEntrypointPath from '!!raw-loader!./_platform-components/script-10-cert-manager/entrypoint.path';
import CertManagerEntrypointBaseName from '!!raw-loader!./_platform-components/script-10-cert-manager/entrypoint.basename';
import CertManagerEntrypointCode from '!!raw-loader!./_platform-components/script-10-cert-manager/entrypoint.txt';
import CertManagerStacksPath from '!!raw-loader!./_platform-components/script-10-cert-manager/stacks.path';
import CertManagerStacksBaseName from '!!raw-loader!./_platform-components/script-10-cert-manager/stacks.basename';
import CertManagerStacksCode from '!!raw-loader!./_platform-components/script-10-cert-manager/stacks.txt';
import CertManagerComponentPath from '!!raw-loader!./_platform-components/script-10-cert-manager/component.path';
import CertManagerComponentBaseName from '!!raw-loader!./_platform-components/script-10-cert-manager/component.basename';
import CertManagerComponentCode from '!!raw-loader!./_platform-components/script-10-cert-manager/component.txt';
import CertManagerConfigPath from '!!raw-loader!./_platform-components/script-10-cert-manager/config.path';
import CertManagerConfigBaseName from '!!raw-loader!./_platform-components/script-10-cert-manager/config.basename';
import CertManagerConfigCode from '!!raw-loader!./_platform-components/script-10-cert-manager/config.txt';
1. <GitHubLink repo="holos-run/kargo-demo" tree={GitCommit} path={CertManagerEntrypointPath}>{CertManagerEntrypointPath}</GitHubLink> is the main entrypoint for the `holos render platform` command. Each platform stack's components are composed into the Platform spec `holos` uses to render each component.
1. <GitHubLink repo="holos-run/kargo-demo" tree={GitCommit} path={`${CertManagerStacksPath}#L32-L39`}>{CertManagerStacksBaseName}</GitHubLink> in the platform config package is where cert-manager is added to the platform as a holos component.
1. <GitHubLink repo="holos-run/kargo-demo" tree={GitCommit} path={CertManagerComponentPath}>{CertManagerComponentBaseName}</GitHubLink> is the component definition. The component imports the certmanager config package to get the chart version.
1. <GitHubLink repo="holos-run/kargo-demo" tree={GitCommit} path={CertManagerConfigPath}>{CertManagerConfigBaseName}</GitHubLink> in the certmanager config package defines configuration imported by multiple components. This file uses the CUE embed feature to load data from a yaml file in the same directory. Kargo promotion steps update the cert manager version in this file.
Cert Manager is managed as a Holos Component wrapping the official helm chart.
See
<Tabs groupId="render-git-url">
<TabItem value="entrypoint" label={CertManagerEntrypointBaseName}>
<CodeBlock language="txt">{CertManagerEntrypointPath}</CodeBlock>
<CodeBlock language="cue">{CertManagerEntrypointCode}</CodeBlock>
</TabItem>
<TabItem value="stacks" label={CertManagerStacksBaseName}>
<CodeBlock language="txt">{CertManagerStacksPath}</CodeBlock>
<CodeBlock language="cue">{CertManagerStacksCode}</CodeBlock>
</TabItem>
<TabItem value="component" label={CertManagerComponentBaseName}>
<CodeBlock language="txt">{CertManagerComponentPath}</CodeBlock>
<CodeBlock language="cue">{CertManagerComponentCode}</CodeBlock>
</TabItem>
<TabItem value="config" label={CertManagerConfigBaseName}>
<CodeBlock language="txt">{CertManagerConfigPath}</CodeBlock>
<CodeBlock language="cue">{CertManagerConfigCode}</CodeBlock>
</TabItem>
</Tabs>
## Holos Version
Ensure you have a current version of `holos` installed. This document was
tested with the following version.
import HolosVersionCommand from '!!raw-loader!./_platform-components/script-20-holos-version/command.sh';
import HolosVersionOutput from '!!raw-loader!./_platform-components/script-20-holos-version/output.txt';
<CodeBlock language="bash">{HolosVersionCommand}</CodeBlock>
<CodeBlock language="txt">{HolosVersionOutput}</CodeBlock>
## Configure Git URL
We need to configure gitops tools like ArgoCD and Kargo to use our fork instead
of the upstream repository when reconciling changes and opening pull requests.
Create the following file to configure your fork url.
import GitURLHeader from '!!raw-loader!./_platform-components/script-30-git-url/header.sh';
import GitURLBody from '!!raw-loader!./_platform-components/script-30-git-url/body.txt';
import GitURLTrailer from '!!raw-loader!./_platform-components/script-30-git-url/trailer.sh';
<CodeBlock language="bash">{GitURLHeader}</CodeBlock>
<CodeBlock language="cue">{GitURLBody}</CodeBlock>
<CodeBlock language="bash">{GitURLTrailer}</CodeBlock>
Then render the platform with your GitHub user name as a cue build tag.
import RenderCommand from '!!raw-loader!./_platform-components/script-30-git-url/command.sh';
import RenderOutput from '!!raw-loader!./_platform-components/script-30-git-url/output.txt';
<Tabs groupId="render-git-url">
<TabItem value="command" label="Command">
<CodeBlock language="bash">{RenderCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
<CodeBlock language="txt">{RenderOutput}</CodeBlock>
</TabItem>
</Tabs>
Holos reconfigures the Application resources for all components in the platform
to point to your git url. Take a look at the diff.
import DiffCommand from '!!raw-loader!./_platform-components/script-30-git-url/diff.sh';
import DiffOutput from '!!raw-loader!./_platform-components/script-30-git-url/diff.patch';
<Tabs groupId="git-diff">
<TabItem value="command" label="Command">
<CodeBlock language="bash">{DiffCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
<CodeBlock language="diff">{DiffOutput}</CodeBlock>
</TabItem>
</Tabs>
Commit and push the changes.
import CommitCommand from '!!raw-loader!./_platform-components/script-30-git-url/commit.sh';
import CommitOutput from '!!raw-loader!./_platform-components/script-30-git-url/commit.txt';
<Tabs groupId="git-commit">
<TabItem value="command" label="Command">
<CodeBlock language="bash">{CommitCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
<CodeBlock language="txt">{CommitOutput}</CodeBlock>
</TabItem>
</Tabs>
<CodeBlock language="bash">git push</CodeBlock>
[kargo-demo]: https://github.com/holos-run/kargo-demo
[fork]: https://github.com/holos-run/kargo-demo/fork
[installed]: ../../tutorial/setup.mdx

View File

@@ -1,38 +0,0 @@
---
description: Progressive delivery for your Workloads.
sidebar_position: 200
---
# Workloads
{/*
Based on my experience with enterprise Kubernetes platforms, "Workloads" or
"Applications" are the two most common terms, with "Workloads" being more
technically precise and common in platform engineering circles.
Here's why:
1. "Workloads" is preferred because:
- It's the term Kubernetes itself uses (Deployments, StatefulSets etc. are "workload" resources)
- It encompasses both services and batch jobs
- It clearly distinguishes from platform infrastructure
- Major cloud providers (AWS, GCP, Azure) use this terminology
2. "Applications" is also common but has some drawbacks:
- Can be ambiguous whether it means a single service or a group of services
- Doesn't naturally include batch jobs or data processing
- More of a business/product term than a technical one
3. Less common terms:
- "Services" - Too specific, excludes jobs/tasks
- "Business Applications" - Too wordy
- "User Applications" - Ambiguous about which users
- "Customer Workloads" - Implies external customers
Looking at your question about "software my internal teams build for our
business", these are classic workloads - the business logic, services, and jobs
that run on top of the platform you provide.
So while both "Workloads" and "Applications" are acceptable, "Workloads" is the
more precise and commonly used technical term in platform engineering contexts.
*/}

View File

@@ -1,8 +1,7 @@
cd ../script-01-clone/kargo-demo
exec bash -c 'bash -euo pipefail $WORK/command.sh 2>&1'
cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.102.3
0.103.0

View File

@@ -0,0 +1,126 @@
# Set $HOME because:
# - Helm uses it for temporary files
# - Git requires it for setting author name/email globally
env HOME=$WORK/.tmp
chmod 0755 $WORK/update.sh
# Configure git author for testscript execution
exec git config --global user.name 'Holos Docs'
exec git config --global user.email 'hello@holos.run'
exec git config --global init.defaultBranch main
# Remove the tutorial directory if it already exists
exec rm -rf holos-tutorial
# Create and change to the tutorial directory, and then initialize the Holos platform
exec bash -c 'bash -euo pipefail $WORK/mkdir-and-init.sh'
cd holos-tutorial
# Create the components directory
exec bash -c 'bash -euo pipefail $WORK/mkdir-components.sh'
# Combine and execute the multiline podinfo component header/body/trailer files
exec cat $WORK/podinfo-component-header.sh ../podinfo-component-body.cue ../eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Combine and execute the multiline platform registration header/body/trailer files
exec cat $WORK/register-podinfo-header.sh ../register-podinfo-body.cue ../eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Render the platform, capture stdout, and use update.sh to gate whether the
# output file should be updated.
#
# NOTE: The [net] condition will test whether external network access is available
[net] exec bash -c 'bash -euo pipefail $WORK/render.sh 2>&1'
[net] stdin stdout
exec $WORK/update.sh $WORK/register-components-output.txt
# Generate and update the tree of the tutorial directory (omitting the cue.mod directory)
exec bash -c 'bash -euo pipefail $WORK/tree.sh'
stdin stdout
exec $WORK/update.sh $WORK/tree.txt
# Split the rendered manifest into two separate files to display separately
exec bash -c 'bash -euo pipefail $WORK/split-rendered-manifest.sh $WORK/holos-tutorial/deploy/components/podinfo/podinfo.gen.yaml $WORK'
# Grep for the Hello Holos message and write the output file
exec bash -c 'bash -euo pipefail $WORK/grep-for-message.sh'
stdin stdout
exec $WORK/update.sh $WORK/grepped-output.txt
# Clean up the tutorial directory and tmp $HOME directory
cd $WORK
exec rm -rf holos-tutorial
exec rm -rf $HOME
-- update.sh --
#! /bin/bash
set -euo pipefail
[[ -s "$1" ]] && [[ -z "${HOLOS_UPDATE_SCRIPTS:-}" ]] && exit 0
cat > "$1"
-- mkdir-and-init.sh --
mkdir holos-tutorial && cd holos-tutorial
holos init platform v1alpha5
-- tree.sh --
tree -L 3 -I cue.mod .
-- mkdir-components.sh --
mkdir -p components/podinfo
-- podinfo-component-header.sh --
cat <<EOF > components/podinfo/podinfo.cue
-- podinfo-component-body.cue --
package holos
// Produce a helm chart build plan.
holos: HelmChart.BuildPlan
HelmChart: #Helm & {
Name: "podinfo"
Chart: {
version: "6.6.2"
repository: {
name: "podinfo"
url: "https://stefanprodan.github.io/podinfo"
}
}
// Holos marshals Values into values.yaml for Helm.
Values: {
// message is a string with a default value. @tag indicates a value may
// be injected from the platform spec component parameters.
ui: {
message: string | *"Hello World" @tag(greeting, type=string)
}
}
}
-- eof-trailer.sh --
EOF
-- register-podinfo-header.sh --
cat <<EOF > platform/podinfo.cue
-- register-podinfo-body.cue --
package holos
Platform: Components: podinfo: {
name: "podinfo"
path: "components/podinfo"
// Inject a value into the component.
parameters: greeting: "Hello Holos!"
}
-- render.sh --
holos render platform
-- register-components-output.txt --
cached podinfo 6.6.2
rendered podinfo in 1.938665041s
rendered platform in 1.938759417s
-- podinfo-rendered-path.sh --
deploy/components/podinfo/podinfo.gen.yaml
-- split-rendered-manifest.sh --
awk 'BEGIN {RS="---"} NR==1 {print > "service.yaml"} NR==2 {print > "deployment.yaml"}' $1
mv service.yaml $2/rendered-service.yaml
mv deployment.yaml $2/rendered-deployment.yaml
-- grep-for-message.sh --
grep -B2 Hello deploy/components/podinfo/podinfo.gen.yaml
-- grepped-output.txt --
env:
- name: PODINFO_UI_MESSAGE
value: Hello Holos!

View File

@@ -0,0 +1 @@
0.103.0

View File

@@ -0,0 +1 @@
grep -B2 Hello deploy/components/podinfo/podinfo.gen.yaml

View File

@@ -0,0 +1,3 @@
env:
- name: PODINFO_UI_MESSAGE
value: Hello Holos!

View File

@@ -0,0 +1,2 @@
mkdir holos-tutorial && cd holos-tutorial
holos init platform v1alpha5

View File

@@ -0,0 +1 @@
mkdir -p components/podinfo

View File

@@ -0,0 +1,23 @@
package holos
// Produce a helm chart build plan.
holos: HelmChart.BuildPlan
HelmChart: #Helm & {
Name: "podinfo"
Chart: {
version: "6.6.2"
repository: {
name: "podinfo"
url: "https://stefanprodan.github.io/podinfo"
}
}
// Holos marshals Values into values.yaml for Helm.
Values: {
// message is a string with a default value. @tag indicates a value may
// be injected from the platform spec component parameters.
ui: {
message: string | *"Hello World" @tag(greeting, type=string)
}
}
}

View File

@@ -0,0 +1 @@
cat <<EOF > components/podinfo/podinfo.cue

View File

@@ -0,0 +1 @@
deploy/components/podinfo/podinfo.gen.yaml

View File

@@ -0,0 +1,2 @@
rendered podinfo in 544.501875ms
rendered platform in 544.608125ms

View File

@@ -0,0 +1,8 @@
package holos
Platform: Components: podinfo: {
name: "podinfo"
path: "components/podinfo"
// Inject a value into the component.
parameters: greeting: "Hello Holos!"
}

View File

@@ -0,0 +1 @@
cat <<EOF > platform/podinfo.cue

View File

@@ -0,0 +1 @@
holos render platform

View File

@@ -0,0 +1,93 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: podinfo
app.kubernetes.io/version: 6.6.2
helm.sh/chart: podinfo-6.6.2
name: podinfo
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: podinfo
strategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
annotations:
prometheus.io/port: "9898"
prometheus.io/scrape: "true"
labels:
app.kubernetes.io/name: podinfo
spec:
containers:
- command:
- ./podinfo
- --port=9898
- --cert-path=/data/cert
- --port-metrics=9797
- --grpc-port=9999
- --grpc-service-name=podinfo
- --level=info
- --random-delay=false
- --random-error=false
env:
- name: PODINFO_UI_MESSAGE
value: Hello Holos!
- name: PODINFO_UI_COLOR
value: '#34577c'
image: ghcr.io/stefanprodan/podinfo:6.6.2
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- podcli
- check
- http
- localhost:9898/healthz
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: podinfo
ports:
- containerPort: 9898
name: http
protocol: TCP
- containerPort: 9797
name: http-metrics
protocol: TCP
- containerPort: 9999
name: grpc
protocol: TCP
readinessProbe:
exec:
command:
- podcli
- check
- http
- localhost:9898/readyz
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
resources:
limits: null
requests:
cpu: 1m
memory: 16Mi
volumeMounts:
- mountPath: /data
name: data
terminationGracePeriodSeconds: 30
volumes:
- emptyDir: {}
name: data

View File

@@ -0,0 +1,23 @@
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: podinfo
app.kubernetes.io/version: 6.6.2
helm.sh/chart: podinfo-6.6.2
name: podinfo
spec:
ports:
- name: http
port: 9898
protocol: TCP
targetPort: http
- name: grpc
port: 9999
protocol: TCP
targetPort: grpc
selector:
app.kubernetes.io/name: podinfo
type: ClusterIP

View File

@@ -0,0 +1,3 @@
awk 'BEGIN {RS="---"} NR==1 {print > "service.yaml"} NR==2 {print > "deployment.yaml"}' $1
mv service.yaml $2/rendered-service.yaml
mv deployment.yaml $2/rendered-deployment.yaml

View File

@@ -0,0 +1 @@
tree -L 3 -I cue.mod .

View File

@@ -0,0 +1,17 @@
.
|-- components
| `-- podinfo
| |-- podinfo.cue
| `-- vendor
|-- deploy
| `-- components
| `-- podinfo
|-- platform
| |-- platform.gen.cue
| `-- podinfo.cue
|-- platform.metadata.json
|-- resources.cue
|-- schema.cue
`-- tags.cue
8 directories, 7 files

View File

@@ -1 +1 @@
0.102.5
0.103.0

View File

@@ -1,3 +1,3 @@
[main e1c6859] add blackbox configuration
[main 1adcd08] add blackbox configuration
1 file changed, 15 insertions(+)
create mode 100644 config/prometheus/blackbox.cue
create mode 100644 components/blackbox.cue

View File

@@ -1,3 +1,2 @@
[main 668706a] integrate blackbox and prometheus together
3 files changed, 1348 insertions(+), 2 deletions(-)
create mode 100644 components/prometheus/values.cue.orig
[main 4221803] integrate blackbox and prometheus together
2 files changed, 4 insertions(+), 2 deletions(-)

View File

@@ -1,4 +1,4 @@
[main 7bc6772] import values
[main 52e90ea] import values
2 files changed, 1815 insertions(+)
create mode 100644 components/blackbox/values.cue
create mode 100644 components/prometheus/values.cue

View File

@@ -1,3 +1,3 @@
rendered blackbox in 146.654292ms
rendered prometheus in 178.845292ms
rendered platform in 178.9115ms
rendered blackbox in 365.936792ms
rendered prometheus in 371.855875ms
rendered platform in 372.109916ms

View File

@@ -1,4 +1,4 @@
[main d144f24] add blackbox and prometheus
[main b5df111] add blackbox and prometheus
5 files changed, 1550 insertions(+)
create mode 100644 components/blackbox/blackbox.cue
create mode 100644 components/prometheus/prometheus.cue

View File

@@ -1,3 +1,5 @@
rendered blackbox in 1.794799666s
rendered prometheus in 1.835097625s
rendered platform in 1.835185792s
cached prometheus-blackbox-exporter 9.0.1
rendered blackbox in 3.825430417s
cached prometheus 25.27.0
rendered prometheus in 4.840089667s
rendered platform in 4.840137792s

View File

@@ -1,2 +1,2 @@
[main 1399737] render integrated blackbox and prometheus manifests
[main 67efe0d] render integrated blackbox and prometheus manifests
2 files changed, 7 insertions(+), 7 deletions(-)

View File

@@ -0,0 +1,7 @@
exec bash -c 'bash -euo pipefail $WORK/command.sh 2>&1'
cmp stdout $WORK/output.txt
-- command.sh --
holos --version
-- output.txt --
0.103.0

View File

@@ -0,0 +1,226 @@
# Set $HOME because:
# - Helm uses it for temporary files
# - Git requires it for setting author name/email globally
env HOME=$WORK/.tmp
chmod 0755 $WORK/update.sh
# Configure git author for testscript execution
exec git config --global user.name 'Holos Docs'
exec git config --global user.email 'hello@holos.run'
exec git config --global init.defaultBranch main
# Remove the tutorial directory if it already exists
exec rm -rf holos-kustomize-tutorial
# Create and change to the tutorial directory, and then initialize the Holos platform
exec bash -c 'bash -euo pipefail $WORK/mkdir-and-init.sh'
cd holos-kustomize-tutorial
# Initialize git
exec bash -c 'bash -euo pipefail $WORK/git-init.sh'
# Create the component directory
exec bash -c 'bash -euo pipefail $WORK/mkdir-component.sh'
# Combine and execute the multiline httpbin component header/body/trailer files
exec cat $WORK/httpbin-component-header.sh $WORK/httpbin-component-body.cue $WORK/eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Combine and execute the multiline httpbin yaml header/body/trailer files
exec cat $WORK/httpbin-yaml-header.sh $WORK/httpbin-yaml-body.yaml $WORK/eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Combine and execute the multiline registration header/body/trailer files
exec cat $WORK/register-component-header.sh $WORK/register-component-body.cue $WORK/eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Render the platform, capture stdout, and use update.sh to gate whether the
# output file should be updated.
#
# NOTE: The [net] condition will test whether external network access is available
[net] exec bash -c 'bash -euo pipefail $WORK/render.sh 2>&1'
[net] stdin stdout
exec $WORK/update.sh $WORK/register-component-output.txt
# Git commit and capture output
exec bash -c 'bash -euo pipefail $WORK/git-commit-component.sh'
stdin stdout
exec $WORK/update.sh $WORK/git-commit-component-output.txt
# Export Build Plan and capture output
exec bash -c 'bash -euo pipefail $WORK/cue-export.sh'
stdin stdout
exec $WORK/update.sh $WORK/buildplan-output.cue
# Combine and execute the multiline kustomize patch header/body/trailer files
exec cat $WORK/httpbin-patch-header.sh $WORK/httpbin-patch-body.cue $WORK/eof-trailer.sh
stdin stdout
exec bash -xeuo pipefail
# Render the platform and capture output
[net] exec bash -c 'bash -euo pipefail $WORK/render.sh 2>&1'
[net] stdin stdout
exec $WORK/update.sh $WORK/kustomize-patch-render-output.txt
# Git diff and capture output
exec bash -c 'bash -euo pipefail $WORK/git-diff.sh'
stdin stdout
exec $WORK/update.sh $WORK/git.diff
# Git commit and capture output
exec bash -c 'bash -euo pipefail $WORK/git-commit-final.sh'
stdin stdout
exec $WORK/update.sh $WORK/git-commit-final-output.txt
# Clean up the tutorial directory and tmp $HOME directory
cd $WORK
exec rm -rf holos-kustomize-tutorial
exec rm -rf $HOME
-- update.sh --
#! /bin/bash
set -euo pipefail
[[ -s "$1" ]] && [[ -z "${HOLOS_UPDATE_SCRIPTS:-}" ]] && exit 0
cat > "$1"
-- mkdir-and-init.sh --
mkdir holos-kustomize-tutorial
cd holos-kustomize-tutorial
holos init platform v1alpha5
-- git-init.sh --
git init . && git add . && git commit -m initial
-- mkdir-component.sh --
mkdir -p components/httpbin
-- httpbin-component-header.sh --
cat <<EOF > components/httpbin/httpbin.cue
-- httpbin-component-body.cue --
package holos
// Produce a Kustomize BuildPlan for Holos
holos: Kustomize.BuildPlan
// https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/README.md
Kustomize: #Kustomize & {
KustomizeConfig: {
// Files tells Holos to copy the file from the component path to the
// temporary directory Holos uses for BuildPlan execution.
Files: {
"httpbin.yaml": _
}
CommonLabels: {
"app.kubernetes.io/name": "httpbin"
}
// Kustomization represents a kustomization.yaml file in CUE. Holos
// marshals this field into a `kustomization.yaml` while processing a
// BuildPlan. See
// https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/
Kustomization: {
images: [{name: "mccutchen/go-httpbin"}]
// Use a hidden field to compose patches easily with a struct. Hidden
// fields are not included in exported structures.
_patches: {}
// Convert the hidden struct to a list.
patches: [for x in _patches {x}]
}
}
}
-- eof-trailer.sh --
EOF
-- httpbin-yaml-header.sh --
cat <<EOF > components/httpbin/httpbin.yaml
-- httpbin-yaml-body.yaml --
# https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/resources.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
template:
spec:
containers:
- name: httpbin
image: mccutchen/go-httpbin
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /status/200
port: http
readinessProbe:
httpGet:
path: /status/200
port: http
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
spec:
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
appProtocol: http
-- register-component-header.sh --
cat <<EOF > platform/httpbin.cue
-- register-component-body.cue --
package holos
Platform: Components: {
httpbin: {
name: "httpbin"
path: "components/httpbin"
}
}
-- git-commit-component.sh --
git add . && git commit -m 'add httpbin'
-- cue-export.sh --
holos cue export --expression holos --out=yaml ./components/httpbin
-- httpbin-patch-header.sh --
cat <<EOF > components/httpbin/patches.cue
-- httpbin-patch-body.cue --
package holos
import "encoding/yaml"
// Mix in a Kustomize patch to the configuration.
Kustomize: KustomizeConfig: Kustomization: _patches: {
probe: {
target: kind: "Service"
target: name: "httpbin"
patch: yaml.Marshal([{
op: "add"
path: "/metadata/annotations/prometheus.io~1probe"
value: "true"
}])
}
}
-- httpbin-component-output.txt --
rendered httpbin in 197.030208ms
rendered platform in 197.416416ms
-- render.sh --
holos render platform
-- git-diff.sh --
git diff
-- git.diff --
diff --git a/deploy/components/httpbin/httpbin.gen.yaml b/deploy/components/httpbin/httpbin.gen.yaml
index 298b9a8..a16bd1a 100644
--- a/deploy/components/httpbin/httpbin.gen.yaml
+++ b/deploy/components/httpbin/httpbin.gen.yaml
@@ -1,6 +1,8 @@
apiVersion: v1
kind: Service
metadata:
+ annotations:
+ prometheus.io/probe: "true"
labels:
app.kubernetes.io/name: httpbin
name: httpbin
-- git-commit-final.sh --
git add . && git commit -m 'annotate httpbin for prometheus probes'

View File

@@ -0,0 +1 @@
holos --version

View File

@@ -0,0 +1 @@
0.103.0

View File

@@ -0,0 +1,36 @@
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: no-name
spec:
artifacts:
- artifact: components/no-name/no-name.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources: {}
- kind: File
output: httpbin.yaml
file:
source: httpbin.yaml
validators: []
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
- httpbin.yaml
output: components/no-name/no-name.gen.yaml
kustomize:
kustomization:
labels:
- includeSelectors: false
pairs:
app.kubernetes.io/name: httpbin
patches: []
images:
- name: mccutchen/go-httpbin
resources:
- resources.gen.yaml
- httpbin.yaml
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

View File

@@ -0,0 +1 @@
holos cue export --expression holos --out=yaml ./components/httpbin

View File

@@ -0,0 +1 @@
EOF

View File

@@ -0,0 +1,6 @@
[main f0dd632] add httpbin
4 files changed, 113 insertions(+)
create mode 100644 components/httpbin/httpbin.cue
create mode 100644 components/httpbin/httpbin.yaml
create mode 100644 deploy/components/httpbin/httpbin.gen.yaml
create mode 100644 platform/httpbin.cue

View File

@@ -0,0 +1 @@
git add . && git commit -m 'add httpbin'

View File

@@ -0,0 +1,3 @@
[main b120712] annotate httpbin for prometheus probes
2 files changed, 18 insertions(+)
create mode 100644 components/httpbin/patches.cue

View File

@@ -0,0 +1 @@
git add . && git commit -m 'annotate httpbin for prometheus probes'

View File

@@ -0,0 +1 @@
git init . && git add . && git commit -m initial

View File

@@ -0,0 +1,13 @@
diff --git a/deploy/components/httpbin/httpbin.gen.yaml b/deploy/components/httpbin/httpbin.gen.yaml
index 298b9a8..a16bd1a 100644
--- a/deploy/components/httpbin/httpbin.gen.yaml
+++ b/deploy/components/httpbin/httpbin.gen.yaml
@@ -1,6 +1,8 @@
apiVersion: v1
kind: Service
metadata:
+ annotations:
+ prometheus.io/probe: "true"
labels:
app.kubernetes.io/name: httpbin
name: httpbin

View File

@@ -0,0 +1,30 @@
package holos
// Produce a Kustomize BuildPlan for Holos
holos: Kustomize.BuildPlan
// https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/README.md
Kustomize: #Kustomize & {
KustomizeConfig: {
// Files tells Holos to copy the file from the component path to the
// temporary directory Holos uses for BuildPlan execution.
Files: {
"httpbin.yaml": _
}
CommonLabels: {
"app.kubernetes.io/name": "httpbin"
}
// Kustomization represents a kustomization.yaml file in CUE. Holos
// marshals this field into a `kustomization.yaml` while processing a
// BuildPlan. See
// https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/
Kustomization: {
images: [{name: "mccutchen/go-httpbin"}]
// Use a hidden field to compose patches easily with a struct. Hidden
// fields are not included in exported structures.
_patches: {}
// Convert the hidden struct to a list.
patches: [for x in _patches {x}]
}
}
}

View File

@@ -0,0 +1 @@
cat <<EOF > components/httpbin/httpbin.cue

View File

@@ -0,0 +1,2 @@
rendered httpbin in 197.030208ms
rendered platform in 197.416416ms

View File

@@ -0,0 +1,16 @@
package holos
import "encoding/yaml"
// Mix in a Kustomize patch to the configuration.
Kustomize: KustomizeConfig: Kustomization: _patches: {
probe: {
target: kind: "Service"
target: name: "httpbin"
patch: yaml.Marshal([{
op: "add"
path: "/metadata/annotations/prometheus.io~1probe"
value: "true"
}])
}
}

View File

@@ -0,0 +1 @@
cat <<EOF > components/httpbin/patches.cue

View File

@@ -0,0 +1,36 @@
# https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/resources.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
template:
spec:
containers:
- name: httpbin
image: mccutchen/go-httpbin
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /status/200
port: http
readinessProbe:
httpGet:
path: /status/200
port: http
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
spec:
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
appProtocol: http

View File

@@ -0,0 +1 @@
cat <<EOF > components/httpbin/httpbin.yaml

View File

@@ -0,0 +1,2 @@
rendered httpbin in 132.00525ms
rendered platform in 132.124042ms

View File

@@ -0,0 +1,3 @@
mkdir holos-kustomize-tutorial
cd holos-kustomize-tutorial
holos init platform v1alpha5

View File

@@ -0,0 +1 @@
mkdir -p components/httpbin

View File

@@ -0,0 +1,8 @@
package holos
Platform: Components: {
httpbin: {
name: "httpbin"
path: "components/httpbin"
}
}

View File

@@ -0,0 +1 @@
cat <<EOF > platform/httpbin.cue

View File

@@ -0,0 +1,2 @@
rendered httpbin in 175.057083ms
rendered platform in 175.145292ms

View File

@@ -0,0 +1 @@
holos render platform

View File

@@ -0,0 +1,4 @@
#! /bin/bash
set -euo pipefail
[[ -s "$1" ]] && [[ -z "${HOLOS_UPDATE_SCRIPTS:-}" ]] && exit 0
cat > "$1"

View File

@@ -10,6 +10,7 @@ import TabItem from '@theme/TabItem';
import RenderingOverview from '@site/src/diagrams/rendering-overview.mdx';
import PlatformSequence from '@site/src/diagrams/render-platform-sequence.mdx';
import ComponentSequence from '@site/src/diagrams/render-component-sequence.mdx';
import CodeBlock from '@theme/CodeBlock';
# Hello Holos
@@ -21,49 +22,37 @@ This introduces the core concept of wrapping Helm charts as Holos Components.
## Implementation
### Holos Version
Ensure you have a current version of `holos` installed. This document was
tested with the following version.
import HolosVersionCommand from '!!raw-loader!./_hello-holos/script-01-holos-version/command.sh';
import HolosVersionOutput from '!!raw-loader!./_hello-holos/script-01-holos-version/output.txt';
<CodeBlock language="bash">{HolosVersionCommand}</CodeBlock>
<CodeBlock language="txt">{HolosVersionOutput}</CodeBlock>
### Initialize Platform Structure
Create and initialize a minimal platform:
```shell
mkdir holos-tutorial && cd holos-tutorial
holos init platform v1alpha5
```
import MkdirAndInit from '!!raw-loader!./_hello-holos/script-02-hello-holos/mkdir-and-init.sh';
import TreeOutput from '!!raw-loader!./_hello-holos/script-02-hello-holos/tree.txt';
The resulting directory structure:
<CodeBlock language="bash">{MkdirAndInit}</CodeBlock>
For reference, the directory structure you will attain by the end of this tutorial
is listed below (NOTE: we have omitted the `cue.mod` directory for brevity):
<Tabs groupId="80D04C6A-BC83-44D0-95CC-CE01B439B159">
<TabItem value="tree" label="Tree">
```text showLineNumbers
holos-tutorial/
├── components/
│   └── podinfo/
│   └── podinfo.cue
├── cue.mod/
├── platform/
│   ├── platform.gen.cue
│   └── podinfo.cue
├── resources.cue
├── schema.cue
└── tags.cue
```
<CodeBlock language="txt" showLineNumbers>{TreeOutput}</CodeBlock>
</TabItem>
<TabItem value="details" label="Details">
<div style={{display: "flex"}}>
<div>
```text showLineNumbers
holos-tutorial/
├── components/
│   └── podinfo/
│   └── podinfo.cue
├── cue.mod/
├── platform/
│   ├── platform.gen.cue
│   └── podinfo.cue
├── resources.cue
├── schema.cue
└── tags.cue
```
<CodeBlock language="txt" showLineNumbers>{TreeOutput}</CodeBlock>
</div>
<div>
- **Line 1** The platform root is the `holos-tutorial` directory we created.
@@ -72,22 +61,24 @@ anywhere.
- **Line 3** A component is a collection of `*.cue` files at a path.
- **Line 4** We'll create this file and configure the podinfo helm chart in the
next section.
- **Line 5** The CUE module directory. Schema definitions for Kubernetes and
Holos resources reside within the `cue.mod` directory.
- **Line 6** The platform directory is the **main entrypoint** for the `holos
- **Line 5** The `vendor` directory contains a cached copy of the Helm chart that
was fetched for the component.
- **Line 6** Rendered manifests are placed within the `deploy` directory following
the structure of the `components/` directory.
- **Line 9** The platform directory is the **main entrypoint** for the `holos
render platform` command.
- **Line 7** `platform.gen.cue` is initialized by `holos init platform` and
- **Line 10** `platform.gen.cue` is initialized by `holos init platform` and
contains the Platform spec.
- **Line 8** `podinfo.cue` integrates podinfo with the platform by adding the
- **Line 11** `podinfo.cue` integrates podinfo with the platform by adding the
component to the platform spec. We'll add ths file after the next section.
- **Line 9** `resources.cue` Defines the Kubernetes resources available to
- **Line 13** `resources.cue` Defines the Kubernetes resources available to
manage in CUE.
- **Line 10** `schema.cue` Defines the configuration common to all component
- **Line 14** `schema.cue` Defines the configuration common to all component
kinds.
- **Line 11** `tags.cue` Defines where component parameter values are injected
- **Line 15** `tags.cue` Defines where component parameter values are injected
into the overall platform configuration. We don't need to be concerned with
this file until we cover component parameters.
- **Lines 9-11** Initialized by `holos init platform`, user editable after
- **Lines 9-15** Initialized by `holos init platform`, user editable after
initialization.
</div>
</div>
@@ -98,40 +89,15 @@ initialization.
Configure the `podinfo` component:
```bash
mkdir -p components/podinfo
```
```bash
cat <<EOF > components/podinfo/podinfo.cue
```
```cue showLineNumbers
package holos
import MkdirComponents from '!!raw-loader!./_hello-holos/script-02-hello-holos/mkdir-components.sh';
import PodinfoHeader from '!!raw-loader!./_hello-holos/script-02-hello-holos/podinfo-component-header.sh';
import PodinfoBody from '!!raw-loader!./_hello-holos/script-02-hello-holos/podinfo-component-body.cue';
import EofTrailer from '!!raw-loader!./_hello-holos/script-02-hello-holos/eof-trailer.sh';
// Produce a helm chart build plan.
holos: HelmChart.BuildPlan
HelmChart: #Helm & {
Name: "podinfo"
Chart: {
version: "6.6.2"
repository: {
name: "podinfo"
url: "https://stefanprodan.github.io/podinfo"
}
}
// Holos marshals Values into values.yaml for Helm.
Values: {
// message is a string with a default value. @tag indicates a value may
// be injected from the platform spec component parameters.
ui: {
message: string | *"Hello World" @tag(greeting, type=string)
}
}
}
```
```bash
EOF
```
<CodeBlock language="bash">{MkdirComponents}</CodeBlock>
<CodeBlock language="bash">{PodinfoHeader}</CodeBlock>
<CodeBlock language="cue" showLineNumbers>{PodinfoBody}</CodeBlock>
<CodeBlock language="bash">{EofTrailer}</CodeBlock>
:::important
Like Go packages, CUE loads all `*.cue` files in the component directory to
@@ -148,22 +114,12 @@ root-level `schema.cue`.
Register the `podinfo` component in `platform/podinfo.cue`:
```bash
cat <<EOF > platform/podinfo.cue
```
```cue showLineNumbers
package holos
import RegisterPodinfoHeader from '!!raw-loader!./_hello-holos/script-02-hello-holos/register-podinfo-header.sh';
import RegisterPodinfoBody from '!!raw-loader!./_hello-holos/script-02-hello-holos/register-podinfo-body.cue';
Platform: Components: podinfo: {
name: "podinfo"
path: "components/podinfo"
// Inject a value into the component.
parameters: greeting: "Hello Holos!"
}
```
```bash
EOF
```
<CodeBlock language="bash">{RegisterPodinfoHeader}</CodeBlock>
<CodeBlock language="cue" showLineNumbers>{RegisterPodinfoBody}</CodeBlock>
<CodeBlock language="bash">{EofTrailer}</CodeBlock>
:::tip
Parameter names are unrestricted, except for the reserved `holos_` prefix.
@@ -173,161 +129,42 @@ Parameter names are unrestricted, except for the reserved `holos_` prefix.
Render the `podinfo` configuration:
import RenderCommand from '!!raw-loader!./_hello-holos/script-02-hello-holos/render.sh';
import RegisterComponentsOutput from '!!raw-loader!./_hello-holos/script-02-hello-holos/register-components-output.txt';
<Tabs groupId="E150C802-7162-4FBF-82A7-77D9ADAEE847">
<TabItem value="command" label="Command">
```bash
holos render platform
```
<CodeBlock language="bash">{RenderCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
```
cached podinfo 6.6.2
rendered podinfo in 1.938665041s
rendered platform in 1.938759417s
```
<CodeBlock language="txt">{RegisterComponentsOutput}</CodeBlock>
</TabItem>
</Tabs>
Holos executes `helm template` with locally cached charts to generate:
```txt
deploy/components/podinfo/podinfo.gen.yaml
```
import PodinfoRenderedPath from '!!raw-loader!./_hello-holos/script-02-hello-holos/podinfo-rendered-path.sh';
import RenderedService from '!!raw-loader!./_hello-holos/script-02-hello-holos/rendered-service.yaml';
import RenderedDeployment from '!!raw-loader!./_hello-holos/script-02-hello-holos/rendered-deployment.yaml';
<CodeBlock language="txt">{PodinfoRenderedPath}</CodeBlock>
<Tabs groupId="0E9C231D-D0E8-410A-A4A0-601842A086A6">
<TabItem value="service" label="Service">
```yaml showLineNumbers
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: podinfo
app.kubernetes.io/version: 6.6.2
helm.sh/chart: podinfo-6.6.2
name: podinfo
spec:
ports:
- name: http
port: 9898
protocol: TCP
targetPort: http
- name: grpc
port: 9999
protocol: TCP
targetPort: grpc
selector:
app.kubernetes.io/name: podinfo
type: ClusterIP
```
<CodeBlock language="yaml" showLineNumbers>{RenderedService}</CodeBlock>
</TabItem>
<TabItem value="deployment" label="Deployment">
```yaml showLineNumbers
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: podinfo
app.kubernetes.io/version: 6.6.2
helm.sh/chart: podinfo-6.6.2
name: podinfo
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: podinfo
strategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
annotations:
prometheus.io/port: "9898"
prometheus.io/scrape: "true"
labels:
app.kubernetes.io/name: podinfo
spec:
containers:
- command:
- ./podinfo
- --port=9898
- --cert-path=/data/cert
- --port-metrics=9797
- --grpc-port=9999
- --grpc-service-name=podinfo
- --level=info
- --random-delay=false
- --random-error=false
env:
- name: PODINFO_UI_MESSAGE
value: Hello Holos!
- name: PODINFO_UI_COLOR
value: '#34577c'
image: ghcr.io/stefanprodan/podinfo:6.6.2
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- podcli
- check
- http
- localhost:9898/healthz
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: podinfo
ports:
- containerPort: 9898
name: http
protocol: TCP
- containerPort: 9797
name: http-metrics
protocol: TCP
- containerPort: 9999
name: grpc
protocol: TCP
readinessProbe:
exec:
command:
- podcli
- check
- http
- localhost:9898/readyz
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
resources:
limits: null
requests:
cpu: 1m
memory: 16Mi
volumeMounts:
- mountPath: /data
name: data
terminationGracePeriodSeconds: 30
volumes:
- emptyDir: {}
name: data
```
<CodeBlock language="yaml" showLineNumbers>{RenderedDeployment}</CodeBlock>
</TabItem>
</Tabs>
Holos renders the component with the greeting injected from the platform spec.
```shell
grep -B2 Hello deploy/components/podinfo/podinfo.gen.yaml
```
```yaml
env:
- name: PODINFO_UI_MESSAGE
value: Hello Holos!
```
import GrepForMessage from '!!raw-loader!./_hello-holos/script-02-hello-holos/grep-for-message.sh';
import GreppedOutput from '!!raw-loader!./_hello-holos/script-02-hello-holos/grepped-output.txt';
<CodeBlock language="bash">{GrepForMessage}</CodeBlock>
<CodeBlock language="yaml">{GreppedOutput}</CodeBlock>
## Breaking it down

View File

@@ -0,0 +1,19 @@
package main
import (
"path/filepath"
"testing"
)
// Run these with go test -v to see the verbose names
func TestHelloHolos(t *testing.T) {
t.Run("TestHelloHolos", func(t *testing.T) {
// Get an ordered list of test script files.
dir := "_hello-holos"
for _, file := range sortedTestScripts(t, filepath.Join(dir, "examples")) {
t.Run("examples", func(t *testing.T) {
runOneScript(t, dir, file)
})
}
})
}

View File

@@ -7,6 +7,7 @@ sidebar_position: 45
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
# Kustomize
@@ -24,6 +25,17 @@ covered in the [Helm Values] tutorial.
## The Code
### Holos Version
Ensure you have a current version of `holos` installed. This document was
tested with the following version.
import HolosVersionCommand from '!!raw-loader!./_kustomize/script-01-holos-version/command.sh';
import HolosVersionOutput from '!!raw-loader!./_kustomize/script-01-holos-version/output.txt';
<CodeBlock language="bash">{HolosVersionCommand}</CodeBlock>
<CodeBlock language="txt">{HolosVersionOutput}</CodeBlock>
### Generating the structure
<Tabs>
@@ -39,18 +51,14 @@ Use `holos` to generate a minimal platform directory structure. First, create
and navigate into a blank directory. Then, run the `holos init platform`
command.
```shell
mkdir holos-kustomize-tutorial
cd holos-kustomize-tutorial
holos init platform v1alpha5
```
import MkdirAndInit from '!!raw-loader!./_kustomize/script-02-kustomize/mkdir-and-init.sh';
import GitInit from '!!raw-loader!./_kustomize/script-02-kustomize/git-init.sh';
<CodeBlock language="bash">{MkdirAndInit}</CodeBlock>
Make a commit to track changes.
```bash
git init . && git add . && git commit -m initial
```
<CodeBlock language="bash">{GitInit}</CodeBlock>
</TabItem>
</Tabs>
@@ -59,97 +67,26 @@ git init . && git add . && git commit -m initial
Create the `httpbin` component directory, and add the `httpbin.cue` and
`httpbin.yaml` files to it for configuration and setup.
import MkdirComponent from '!!raw-loader!./_kustomize/script-02-kustomize/mkdir-component.sh';
import HttpbinComponentHeader from '!!raw-loader!./_kustomize/script-02-kustomize/httpbin-component-header.sh';
import HttpbinComponentBody from '!!raw-loader!./_kustomize/script-02-kustomize/httpbin-component-body.cue';
import EofTrailer from '!!raw-loader!./_kustomize/script-02-kustomize/eof-trailer.sh';
import HttpbinYamlHeader from '!!raw-loader!./_kustomize/script-02-kustomize/httpbin-yaml-header.sh';
import HttpbinYamlBody from '!!raw-loader!./_kustomize/script-02-kustomize/httpbin-yaml-body.yaml';
<Tabs groupId="800C3AE7-E7F8-4AFC-ABF1-6AFECD945958">
<TabItem value="setup" label="Setup">
```bash
mkdir -p components/httpbin
```
<CodeBlock language="bash">{MkdirComponent}</CodeBlock>
</TabItem>
<TabItem value="components/httpbin/httpbin.cue" label="httpbin.cue">
```bash
cat <<EOF > components/httpbin/httpbin.cue
```
```cue showLineNumbers
package holos
// Produce a Kustomize BuildPlan for Holos
holos: Kustomize.BuildPlan
// https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/README.md
Kustomize: #Kustomize & {
KustomizeConfig: {
// Files tells Holos to copy the file from the component path to the
// temporary directory Holos uses for BuildPlan execution.
Files: {
"httpbin.yaml": _
}
CommonLabels: {
"app.kubernetes.io/name": "httpbin"
}
// Kustomization represents a kustomization.yaml file in CUE. Holos
// marshals this field into a `kustomization.yaml` while processing a
// BuildPlan. See
// https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/
Kustomization: {
images: [{name: "mccutchen/go-httpbin"}]
// Use a hidden field to compose patches easily with a struct. Hidden
// fields are not included in exported structures.
_patches: {}
// Convert the hidden struct to a list.
patches: [for x in _patches {x}]
}
}
}
```
```bash
EOF
```
<CodeBlock language="bash">{HttpbinComponentHeader}</CodeBlock>
<CodeBlock language="cue" showLineNumbers>{HttpbinComponentBody}</CodeBlock>
<CodeBlock language="bash">{EofTrailer}</CodeBlock>
</TabItem>
<TabItem value="components/httpbin/httpbin.yaml" label="httpbin.yaml">
```bash
cat <<EOF > components/httpbin/httpbin.yaml
```
```yaml showLineNumbers
# https://github.com/mccutchen/go-httpbin/blob/v2.15.0/kustomize/resources.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
template:
spec:
containers:
- name: httpbin
image: mccutchen/go-httpbin
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /status/200
port: http
readinessProbe:
httpGet:
path: /status/200
port: http
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
spec:
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
appProtocol: http
```
```bash
EOF
```
<CodeBlock language="bash">{HttpbinYamlHeader}</CodeBlock>
<CodeBlock language="yaml" showLineNumbers>{HttpbinYamlBody}</CodeBlock>
<CodeBlock language="bash">{EofTrailer}</CodeBlock>
</TabItem>
</Tabs>
@@ -161,56 +98,38 @@ Holos knows the `httpbin.yaml` file is part of the BuildPlan because of the
Register `httpbin` with the platform by adding the following file to the
platform directory.
```bash
cat <<EOF > platform/httpbin.cue
```
```cue showLineNumbers
package holos
import RegisterComponentHeader from '!!raw-loader!./_kustomize/script-02-kustomize/register-component-header.sh';
import RegisterComponentBody from '!!raw-loader!./_kustomize/script-02-kustomize/register-component-body.cue';
Platform: Components: {
httpbin: {
name: "httpbin"
path: "components/httpbin"
}
}
```
```bash
EOF
```
<CodeBlock language="bash">{RegisterComponentHeader}</CodeBlock>
<CodeBlock language="cue">{RegisterComponentBody}</CodeBlock>
<CodeBlock language="bash">{EofTrailer}</CodeBlock>
Render the platform.
import RenderCommand from '!!raw-loader!./_kustomize/script-02-kustomize/render.sh';
import RegisterComponentOutput from '!!raw-loader!./_kustomize/script-02-kustomize/register-component-output.txt';
<Tabs groupId="B120D5D1-0EAB-41E0-AD21-15526EBDD53D">
<TabItem value="command" label="Command">
```bash
holos render platform
```
<CodeBlock language="bash">{RenderCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
```txt
rendered httpbin in 707.554666ms
rendered platform in 707.9845ms
```
<CodeBlock language="txt">{RegisterComponentOutput}</CodeBlock>
</TabItem>
</Tabs>
Commit the results.
import GitCommitComponent from '!!raw-loader!./_kustomize/script-02-kustomize/git-commit-component.sh';
import GitCommitComponentOutput from '!!raw-loader!./_kustomize/script-02-kustomize/git-commit-component-output.txt';
<Tabs groupId="446CC550-A634-45C0-BEC7-992E5C56D4FA">
<TabItem value="command" label="Command">
```bash
git add . && git commit -m 'add httpbin'
```
<CodeBlock language="bash">{GitCommitComponent}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
```txt
[main c05f9ef] add httpbin
4 files changed, 118 insertions(+)
create mode 100644 components/httpbin/httpbin.cue
create mode 100644 components/httpbin/httpbin.yaml
create mode 100644 deploy/components/httpbin/httpbin.gen.yaml
create mode 100644 platform/httpbin.cue
```
<CodeBlock language="txt">{GitCommitComponentOutput}</CodeBlock>
</TabItem>
</Tabs>
@@ -220,55 +139,15 @@ We can see the [BuildPlan] exported to `holos` by the `holos:
Kustomize.BuildPlan` line in `httpbin.cue`. Holos processes this build plan to
produce the fully rendered manifests.
import CueExport from '!!raw-loader!./_kustomize/script-02-kustomize/cue-export.sh';
import BuildplanOutput from '!!raw-loader!./_kustomize/script-02-kustomize/buildplan-output.cue';
<Tabs groupId="DD697D65-5BEC-4B92-BB33-59BE4FEC112F">
<TabItem value="command" label="Command">
```bash
holos cue export --expression holos --out=yaml ./components/httpbin
```
<CodeBlock language="bash">{CueExport}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
```yaml showLineNumbers
kind: BuildPlan
apiVersion: v1alpha5
metadata:
name: no-name
spec:
artifacts:
- artifact: components/no-name/no-name.gen.yaml
generators:
- kind: Resources
output: resources.gen.yaml
resources: {}
- kind: File
output: httpbin.yaml
file:
source: httpbin.yaml
transformers:
- kind: Kustomize
inputs:
- resources.gen.yaml
- httpbin.yaml
output: components/no-name/no-name.gen.yaml
kustomize:
kustomization:
labels:
- includeSelectors: false
pairs:
app.kubernetes.io/name: httpbin
patches: []
images:
- name: mccutchen/go-httpbin
resources:
- resources.gen.yaml
- httpbin.yaml
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
source:
component:
name: no-name
path: no-path
parameters: {}
```
<CodeBlock language="yaml">{BuildplanOutput}</CodeBlock>
</TabItem>
</Tabs>
@@ -291,30 +170,12 @@ need to edit any YAML files manually.
Add a new `patches.cue` file to the `httpbin` component with the following
content.
```bash
cat <<EOF > components/httpbin/patches.cue
```
```cue showLineNumbers
package holos
import HttpbinPatchHeader from '!!raw-loader!./_kustomize/script-02-kustomize/httpbin-patch-header.sh';
import HttpbinPatchBody from '!!raw-loader!./_kustomize/script-02-kustomize/httpbin-patch-body.cue';
import "encoding/yaml"
// Mix in a Kustomize patch to the configuration.
Kustomize: KustomizeConfig: Kustomization: _patches: {
probe: {
target: kind: "Service"
target: name: "httpbin"
patch: yaml.Marshal([{
op: "add"
path: "/metadata/annotations/prometheus.io~1probe"
value: "true"
}])
}
}
```
```bash
EOF
```
<CodeBlock language="bash">{HttpbinPatchHeader}</CodeBlock>
<CodeBlock language="bash" showLineNumbers>{HttpbinPatchBody}</CodeBlock>
<CodeBlock language="bash">{EofTrailer}</CodeBlock>
:::note
We use a hidden `_patches` field to easily unify data into a struct, then
@@ -325,62 +186,43 @@ convert the struct into a list for export.
Render the platform to see the result of the kustomization patch.
import KustomizePatchRenderOutput from '!!raw-loader!./_kustomize/script-02-kustomize/kustomize-patch-render-output.txt';
<Tabs groupId="5D1812DD-8E7B-4F97-B349-275214F38B6E">
<TabItem value="command" label="Command">
```bash
holos render platform
```
<CodeBlock language="bash">{RenderCommand}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
```txt
rendered httpbin in 197.030208ms
rendered platform in 197.416416ms
```
<CodeBlock language="txt">{KustomizePatchRenderOutput}</CodeBlock>
</TabItem>
</Tabs>
Holos is configuring Kustomize to patch the plain `httpbin.yaml` file with the
annotation.
import GitDiff from '!!raw-loader!./_kustomize/script-02-kustomize/git-diff.sh';
import GitDiffOutput from '!!raw-loader!./_kustomize/script-02-kustomize/git.diff';
<Tabs groupId="3D80279E-8EDE-4B3E-9269-50F5D1C1CA42">
<TabItem value="command" label="Command">
```bash
git diff
```
<CodeBlock language="bash">{GitDiff}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
```diff
diff --git a/deploy/components/httpbin/httpbin.gen.yaml b/deploy/components/httpbin/httpbin.gen.yaml
index 298b9a8..a16bd1a 100644
--- a/deploy/components/httpbin/httpbin.gen.yaml
+++ b/deploy/components/httpbin/httpbin.gen.yaml
@@ -1,6 +1,8 @@
apiVersion: v1
kind: Service
metadata:
+ annotations:
+ prometheus.io/probe: "true"
labels:
app.kubernetes.io/name: httpbin
name: httpbin
```
<CodeBlock language="diff">{GitDiffOutput}</CodeBlock>
</TabItem>
</Tabs>
Add and commit the final changes.
import GitCommitFinal from '!!raw-loader!./_kustomize/script-02-kustomize/git-commit-final.sh';
import GitCommitFinalOutput from '!!raw-loader!./_kustomize/script-02-kustomize/git-commit-final-output.txt';
<Tabs groupId="54C335C8-B382-4277-AE87-0D6556921955">
<TabItem value="command" label="Command">
```bash
git add . && git commit -m 'annotate httpbin for prometheus probes'
```
<CodeBlock language="bash">{GitCommitFinal}</CodeBlock>
</TabItem>
<TabItem value="output" label="Output">
```txt
[main 6eeeadb] annotate httpbin for prometheus probes
2 files changed, 3 insertions(+), 1 deletion(-)
```
<CodeBlock language="txt">{GitCommitFinalOutput}</CodeBlock>
</TabItem>
</Tabs>

View File

@@ -0,0 +1,19 @@
package main
import (
"path/filepath"
"testing"
)
// Run these with go test -v to see the verbose names
func TestKustomize(t *testing.T) {
t.Run("TestKustomize", func(t *testing.T) {
// Get an ordered list of test script files.
dir := "_kustomize"
for _, file := range sortedTestScripts(t, filepath.Join(dir, "examples")) {
t.Run("examples", func(t *testing.T) {
runOneScript(t, dir, file)
})
}
})
}

View File

@@ -18,3 +18,7 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Auto-generated doc examples
multi-sources-example/
kargo-demo/

Some files were not shown because too many files have changed in this diff Show More