Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 81016b83cf | |||
| 84b6302d87 | |||
| f53021b8fb | |||
| ca6c56945c | |||
| 485e0e6540 | |||
| ea1c37bfd0 | |||
| 84317acc1e | |||
| 7fb81e9829 | |||
| 5acf96919c | |||
| 7a8a4f678a | |||
| 4ff6e706ca | |||
| f52bdf8ecc | |||
| 827b6f4211 | |||
| 1b77b8b6cf | |||
| 8098a86dae | |||
| ec5c2972c3 | |||
| 3d416169e3 | |||
| 5a0651106d | |||
| 9f9b1849eb | |||
| 7ad4bf0b5d | |||
| 3ca23c0645 | |||
| 8596fde233 | |||
| 8487b3c43d | |||
| 16eb38ca06 | |||
| cb3d135d6c | |||
| c79db0b3de | |||
| 4ef9bb399f | |||
| 1ef92e5975 | |||
| ab70717458 | |||
| c36aead379 | |||
| 80ae0b79e7 | |||
| f31c12a7b9 | |||
| 30b04e62c0 | |||
| 2738dd614c | |||
| f6fa0e22d2 | |||
| c66de05c57 | |||
| 5b90f637e3 | |||
| 93e2d809cf | |||
| 7d5931045d | |||
| 0b362983a3 | |||
| fb5aed882f | |||
| 5825c89a23 | |||
| f868400b7a |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1 +1,3 @@
|
||||
opencloud/Chart.lock
|
||||
opencloud/Chart.lock
|
||||
deployed_config
|
||||
kind-logs
|
||||
209
README.md
209
README.md
@@ -6,28 +6,211 @@ or to ease opencloud dependencies (dex, mongo, mongo-express, ...) deployment.
|
||||
Kind (https://kind.sigs.k8s.io/) is used here as a lightweight kubernetes deployment. Obviously, any kubenetes compliant
|
||||
environment is a legitimate target.
|
||||
|
||||
HOW TO:
|
||||
# Requirements
|
||||
|
||||
1. Install kind
|
||||
- go
|
||||
- docker
|
||||
- docker buildx
|
||||
- make
|
||||
|
||||
Follow instructions here https://kind.sigs.k8s.io/
|
||||
- Rajouter dans le bashrc > export KUBECONFIG=$HOME/.kube/config
|
||||
|
||||
2. Install helm
|
||||
# Locally built microservices deployment procedure
|
||||
|
||||
Download suitable helm client here https://helm.sh/docs/intro/install/
|
||||
|
||||
3. Fire up a kind cluster
|
||||
|
||||
Execute following script
|
||||
## Install OC-K8S
|
||||
|
||||
```
|
||||
create_kind_cluster.sh
|
||||
git clone https://cloud.o-forge.io/plm/oc-k8s.git
|
||||
sudo cp oc-k8s.sh /usr/bin/oc-k8s
|
||||
sudo chmod +x /usr/bin/oc-k8s
|
||||
```
|
||||
|
||||
It will create a *opencloud* docker container running kubernetes services.
|
||||
# Generate values (optionnal)
|
||||
|
||||
4. Deploy the opencloud chart
|
||||
Go on ./cmd or `cp ./cmd/oc-k8s /usr/local/bin`
|
||||
|
||||
Use command :
|
||||
`oc-k8s create values -r [release] -n [namespace] -c [env_file (optionnal)]`
|
||||
or
|
||||
`./oc-k8s create values -r [release] -n [namespace] -c [env_file (optionnal)]`
|
||||
|
||||
Map in a env file, any Variable you wish to override and give the path.
|
||||
|
||||
## Resume for a first start
|
||||
|
||||
### Do Forget on first run on Terminal
|
||||
sudo sysctl fs.inotify.max_user_watches=524288
|
||||
sudo sysctl fs.inotify.max_user_instances=512
|
||||
|
||||
### RUN
|
||||
|
||||
Look after `oc-k8s help` for details on oc-k8s command.
|
||||
|
||||
Use command :
|
||||
`oc-k8s start -n [namespace] -r [release] -f [folder] -b [branch] -t [target] -p [port] -P [portTLS] -build [true|false]`
|
||||
or
|
||||
`./oc-k8s start -n [namespace] -r [release] -f [folder] -b [branch] -t [target] -p [port] -P [portTLS] -build [true|false]`
|
||||
|
||||
### COMMAND LOOKUP
|
||||
|
||||
```
|
||||
install_development.sh
|
||||
Main commands: oc-k8s <action>
|
||||
install - Install opencloud dependancies [arch] [version]
|
||||
start - Start opencloud k8s
|
||||
stop - Stop opencloud k8s
|
||||
Usage:
|
||||
oc-k8s install -a [arch] -v [version]
|
||||
arch - Arch of OS (required)
|
||||
kind_version - version of kind (required)
|
||||
oc-k8s start -n [namespace] -r [release] -f [folder] -b [branch] -t [target] -p [port] -P [portTLS] -build [true|false]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
branch - Git branch to build (default: main)
|
||||
target - make target (default: all)
|
||||
build - build mode (default: true)
|
||||
oc-k8s stop -n [namespace] -r [release] -f [folder]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
|
||||
Cluster commands: oc-k8s <action> cluster [options]
|
||||
create - Create a new kind cluster
|
||||
delete - Delete the kind cluster
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create cluster -f [env_folder] -r [release]
|
||||
env_folder - Helm config folder (default: .)
|
||||
release - Release values name (default: dev)
|
||||
oc-k8s delete cluster -f [env_folder] -r [release]
|
||||
env_folder - Helm config folder (default: .)
|
||||
release - Release values name (default: dev)
|
||||
oc-k8s help cluster
|
||||
|
||||
Service commands: oc-k8s <action> services
|
||||
create - Build all opencloud services
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create services -f [env_folder] -r [release] -b [branch] -t [target] -build [true|false]
|
||||
env_folder - Helm config folder (required, default: .)
|
||||
release - Release values name (required, default: dev)
|
||||
branch - Git branch to build (default: main)
|
||||
target - make target (default: all)
|
||||
build - build mode (default: true)
|
||||
oc-k8s help services
|
||||
|
||||
Helm commands: oc-k8s <action> helm
|
||||
install - Install Helm
|
||||
create - Install a helm release for the given environment (default: dev)
|
||||
delete - Uninstall a helm release for the given environment (default: dev)
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s install helm
|
||||
oc-k8s create helm -n [namespace] -r [release] -f [folder]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
oc-k8s upgrade helm -n [namespace] -r [release] -f [folder]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
oc-k8s delete helm -n [namespace] -r [release] -f [folder]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
oc-k8sh help helm
|
||||
|
||||
Values commands: oc-k8s <action> values
|
||||
create - Create a new values release yaml
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create values -r [release] -f [env_folder] -c [env_file]
|
||||
release - Release values name (required)
|
||||
env_folder - Helm config folder (optionnal, default: .)
|
||||
env_file - env to map (optionnal)
|
||||
oc-k8s help values
|
||||
|
||||
K3S commands: oc-k8s <action> k3s
|
||||
install - Install k3s
|
||||
create - Create a new cluster
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s install k3s
|
||||
oc-k8s create k3s
|
||||
oc-k8s help values
|
||||
|
||||
Kind commands: oc-k8s <action> kind
|
||||
install - Install kind
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s install kind -a [arch] -v [version]
|
||||
arch - Arch of OS (required, default: amd64)
|
||||
kind_version - version of kind (optionnal)
|
||||
oc-k8s help values
|
||||
|
||||
DB commands: oc-k8s <action> db [options]
|
||||
create - Add datas in db
|
||||
replace - Replace datas in db
|
||||
delete - Delete datas in db
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create db --d [db_name] -r [release] -n [namespace] -f [folder]
|
||||
folder - Datas folder files path (required)
|
||||
release - Release values name (default: dev)
|
||||
namespace - Namespace values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
folder - Helm config folder (required, default: .)
|
||||
oc-k8s upgrade db -d [db_name] -r [release] -n [namespace] -f [folder]
|
||||
folder - Datas folder files path (required)
|
||||
release - Release values name (default: dev)
|
||||
namespace - Namespace values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
oc-k8s delete db -d [db_name] -r [release] -n [namespace] -f [folder]
|
||||
release - Release values name (default: dev)
|
||||
namespace - Namespace values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
folder - Helm config folder (required, default: .)
|
||||
oc-k8s help db
|
||||
```
|
||||
|
||||
## Hostname settings
|
||||
|
||||
Edit your /etc/hosts file, and add following line:
|
||||
|
||||
```
|
||||
127.0.0.1 beta.opencloud.com
|
||||
```
|
||||
|
||||
## Done
|
||||
|
||||
Everything should be operational now, go to http://beta.opencloud.com and enjoy the ride
|
||||
|
||||
|
||||
# First steps
|
||||
|
||||
Go to http://beta.opencloud.com/users
|
||||
|
||||
Log in using default user/password combo ldapadmin/ldapadmin
|
||||
|
||||
Create a new user, or change the default one
|
||||
|
||||
Go to http://beta.opencloud.com
|
||||
|
||||
Log in using your fresh credentials
|
||||
|
||||
Do stuff
|
||||
|
||||
You can go to http://beta.opencloud.com/mongoexpress
|
||||
|
||||
... for mongo express web client access (default login/password is test/testme)
|
||||
|
||||
You can go to http://localhost/dashboard/
|
||||
|
||||
... for access to Traefik reverse proxy front-end
|
||||
178
cmd/main.go
Normal file
178
cmd/main.go
Normal file
@@ -0,0 +1,178 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"oc-k8s/internal"
|
||||
"os"
|
||||
"slices"
|
||||
)
|
||||
|
||||
func main() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
|
||||
}
|
||||
}()
|
||||
if len(os.Args) < 2 {
|
||||
internal.Help_Func()
|
||||
fmt.Println("Error: Not enough arguments")
|
||||
return
|
||||
}
|
||||
|
||||
if err := action(); err != nil {
|
||||
if len(os.Args) > 2 && slices.Contains([]string{"start", "help", "stop"}, os.Args[1]) {
|
||||
internal.Help_Func()
|
||||
} else {
|
||||
what := ""
|
||||
if len(os.Args) > 2 {
|
||||
what = os.Args[2]
|
||||
}
|
||||
switch what {
|
||||
case "helm":
|
||||
internal.Help_Helm()
|
||||
case "k3s":
|
||||
internal.Help_K3S()
|
||||
case "kind":
|
||||
internal.Help_Kind()
|
||||
case "cluster":
|
||||
internal.Help_Cluster()
|
||||
case "db":
|
||||
internal.Help_DB()
|
||||
case "services":
|
||||
internal.Help_Service()
|
||||
case "values":
|
||||
internal.Help_Values()
|
||||
default:
|
||||
internal.Help_Func()
|
||||
}
|
||||
flag.CommandLine.Parse(os.Args[3:])
|
||||
}
|
||||
fmt.Println("ERROR", err)
|
||||
}
|
||||
}
|
||||
|
||||
func action() error {
|
||||
folder := flag.String("f", ".", "Folder to reach config/datas")
|
||||
release := flag.String("r", "dev", "Release name in run")
|
||||
namespace := flag.String("n", "dev", "Namespace in run")
|
||||
branch := flag.String("b", "main", "Git branch/version of a OC build")
|
||||
target := flag.String("t", "all", "Makefile build up mode")
|
||||
dbName := flag.String("d", "opencloud", "DBName in use")
|
||||
arch := flag.String("a", "amd64", "Arch expected")
|
||||
version := flag.String("v", "v0.31.0", "version of arch")
|
||||
confFile := flag.String("c", "", "Configuration files to map")
|
||||
mUsr := flag.String("m", "admin", "Mongo user")
|
||||
mPwd := flag.String("M", "admin", "Mongo password")
|
||||
|
||||
build := flag.Bool("build", false, "build mode")
|
||||
|
||||
if len(os.Args) > 2 && slices.Contains([]string{"start", "help", "stop"}, os.Args[1]) {
|
||||
flag.CommandLine.Parse(os.Args[2:])
|
||||
} else if len(os.Args) > 3 {
|
||||
flag.CommandLine.Parse(os.Args[3:])
|
||||
} else {
|
||||
flag.Parse()
|
||||
}
|
||||
|
||||
action := os.Args[1]
|
||||
switch action {
|
||||
case "start":
|
||||
internal.Start(*folder, *release, *namespace, *branch, *target, *build)
|
||||
case "stop":
|
||||
internal.Stop(*folder, *release, *namespace)
|
||||
case "extract":
|
||||
what := os.Args[2]
|
||||
switch what {
|
||||
case "charts":
|
||||
return internal.ExtractTrees("assets", "./opencloud-chart")
|
||||
}
|
||||
case "help":
|
||||
what := ""
|
||||
if len(os.Args) > 2 {
|
||||
what = os.Args[2]
|
||||
}
|
||||
switch what {
|
||||
case "helm":
|
||||
internal.Help_Helm()
|
||||
case "k3s":
|
||||
internal.Help_K3S()
|
||||
case "kind":
|
||||
internal.Help_Kind()
|
||||
case "cluster":
|
||||
internal.Help_Cluster()
|
||||
case "db":
|
||||
internal.Help_DB()
|
||||
case "services":
|
||||
internal.Help_Service()
|
||||
case "values":
|
||||
internal.Help_Values()
|
||||
default:
|
||||
internal.Help_Func()
|
||||
}
|
||||
case "install":
|
||||
what := ""
|
||||
if len(os.Args) > 2 {
|
||||
what = os.Args[2]
|
||||
}
|
||||
switch what {
|
||||
case "helm":
|
||||
return internal.Install_Helm()
|
||||
case "k3s":
|
||||
return internal.Install_K3S()
|
||||
case "kind":
|
||||
return internal.Install_Kind(*arch, *version)
|
||||
default:
|
||||
internal.Install_Func(*arch, *version)
|
||||
}
|
||||
case "create":
|
||||
what := os.Args[2]
|
||||
|
||||
switch what {
|
||||
case "helm":
|
||||
|
||||
return internal.Create_Helm(*folder, *release, *namespace)
|
||||
case "cluster":
|
||||
return internal.Create_Cluster(*folder, *release)
|
||||
case "db":
|
||||
return internal.Create_DB(folder, *release, *namespace, *dbName, *mUsr, *mPwd)
|
||||
case "services":
|
||||
return internal.Create_Service(*folder, *release, *branch, *target, *build)
|
||||
case "values":
|
||||
return internal.Create_Values(folder, release, confFile)
|
||||
default:
|
||||
internal.Help_Func()
|
||||
}
|
||||
case "delete":
|
||||
what := ""
|
||||
if len(os.Args) > 2 {
|
||||
what = os.Args[2]
|
||||
}
|
||||
switch what {
|
||||
case "helm":
|
||||
return internal.Delete_Helm(*release, *namespace)
|
||||
case "cluster":
|
||||
return internal.Delete_Cluster(*folder, *release)
|
||||
case "db":
|
||||
return internal.Delete_DB(*release, *namespace, *dbName, *mUsr, *mPwd)
|
||||
default:
|
||||
internal.Help_Func()
|
||||
}
|
||||
case "upgrade":
|
||||
what := ""
|
||||
if len(os.Args) > 2 {
|
||||
what = os.Args[2]
|
||||
}
|
||||
switch what {
|
||||
case "helm":
|
||||
return internal.Upgrade_Helm(*folder, *release, *namespace)
|
||||
case "db":
|
||||
return internal.Upgrade_DB(folder, *release, *namespace, *dbName, *mUsr, *mPwd)
|
||||
default:
|
||||
internal.Help_Func()
|
||||
}
|
||||
default:
|
||||
internal.Help_Func()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
BIN
cmd/oc-k8s
Executable file
BIN
cmd/oc-k8s
Executable file
Binary file not shown.
656
cmd/test-values.yaml
Normal file
656
cmd/test-values.yaml
Normal file
@@ -0,0 +1,656 @@
|
||||
env: test # For storage class provisioning
|
||||
clusterName: opencloud
|
||||
hostNetwork: true
|
||||
host: beta.opencloud.com
|
||||
hostPort: 9500
|
||||
registryHost: oc
|
||||
scheme: http
|
||||
|
||||
secrets:
|
||||
keys:
|
||||
enabled: true
|
||||
name: libp2p-keys
|
||||
mountPath: ./pem
|
||||
psk:
|
||||
enabled: true
|
||||
name: libp2p-psk
|
||||
mountPath: ./psk
|
||||
|
||||
mongo-express:
|
||||
enabled: true
|
||||
mongodbServer: "test-mongodb.test" # TO LOOK AFTER
|
||||
mongodbPort: 27017
|
||||
mongodbEnableAdmin: true
|
||||
mongodbAdminUsername: admin
|
||||
mongodbAdminPassword: admin
|
||||
siteBaseUrl: /mongoexpress
|
||||
basicAuthUsername: admin
|
||||
basicAuthPassword: admin
|
||||
mongodb:
|
||||
enabled: false
|
||||
|
||||
mongodb:
|
||||
enabled: true
|
||||
global:
|
||||
defaultStorageClass: "standard"
|
||||
storageClass: "standard"
|
||||
architecture: standalone
|
||||
useStatefulSet: false
|
||||
auth:
|
||||
enabled: true
|
||||
rootUser: admin
|
||||
rootPassword: admin
|
||||
databases: [ opencloud ]
|
||||
usernames: [ admin ]
|
||||
passwords: [ admin ]
|
||||
resourcesPreset: "small"
|
||||
replicaCount: 1
|
||||
persistence:
|
||||
enabled: true
|
||||
create: false # do not auto-create
|
||||
existingClaim: mongo-pvc
|
||||
storageClassName: "standard"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
size: 5Gi
|
||||
persistentVolumeClaimRetentionPolicy:
|
||||
enabled: true
|
||||
whenDeleted: Retain
|
||||
whenScaled: Retain
|
||||
arbiter:
|
||||
enabled: false
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
|
||||
nats:
|
||||
enabled: true
|
||||
extraEnv:
|
||||
- name: NATS_MAX_FILE_DESCRIPTORS
|
||||
value: "65536"
|
||||
extraVolumeMounts:
|
||||
- name: nats-config
|
||||
mountPath: /etc/nats
|
||||
config:
|
||||
jetstream:
|
||||
enabled: true
|
||||
fileStore:
|
||||
enabled: true
|
||||
dir: /data/jetstream # mountPath used by template
|
||||
# pvc block must live here
|
||||
pvc:
|
||||
enabled: true
|
||||
# if you already created the claim, set existingClaim:
|
||||
existingClaim: nats-pvc
|
||||
# storageClassName: local-path or standard (use the SC in your cluster)
|
||||
storageClassName: standard
|
||||
size: 50Gi
|
||||
# name is the volume name used in volumeMounts; keep it simple
|
||||
name: nats-jetstream
|
||||
|
||||
openldap:
|
||||
enabled: true
|
||||
test:
|
||||
enabled: false
|
||||
ltb-passwd:
|
||||
enabled: false
|
||||
replicaCount: 1
|
||||
image:
|
||||
repository: osixia/openldap
|
||||
tls:
|
||||
enabled: false
|
||||
env:
|
||||
LDAP_ORGANISATION: Opencloud
|
||||
LDAP_DOMAIN: opencloud.com
|
||||
LDAP_BACKEND: "mdb"
|
||||
LDAP_TLS: "false"
|
||||
LDAP_TLS_ENFORCE: "false"
|
||||
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
|
||||
adminPassword: admin
|
||||
configPassword: configadmin
|
||||
phpldapadmin:
|
||||
enabled: false
|
||||
persistence:
|
||||
enabled: true
|
||||
create: false # do not auto-create
|
||||
existingClaim: openldap-pvc
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Mi
|
||||
storageClassName: ""
|
||||
replication:
|
||||
enabled: false
|
||||
externalLDAP:
|
||||
enabled: false
|
||||
url: 389
|
||||
bindDN: uid=admin,dc=opencloud,dc=com
|
||||
bindPassword: admin
|
||||
customLdifFiles:
|
||||
01-schema.ldif: |-
|
||||
dn: ou=groups,dc=opencloud,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: groups
|
||||
|
||||
dn: ou=users,dc=opencloud,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: users
|
||||
|
||||
dn: cn=lastGID,dc=opencloud,dc=com
|
||||
objectClass: device
|
||||
objectClass: top
|
||||
description: Records the last GID used to create a Posix group. This prevents the re-use of a GID from a deleted group.
|
||||
cn: lastGID
|
||||
serialNumber: 2001
|
||||
|
||||
dn: cn=lastUID,dc=opencloud,dc=com
|
||||
objectClass: device
|
||||
objectClass: top
|
||||
serialNumber: 2001
|
||||
description: Records the last UID used to create a Posix account. This prevents the re-use of a UID from a deleted account.
|
||||
cn: lastUID
|
||||
|
||||
dn: cn=everybody,ou=groups,dc=opencloud,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: everybody
|
||||
memberUid: admin
|
||||
gidNumber: 2003
|
||||
|
||||
02-ldapadmin.ldif : |-
|
||||
dn: cn=ldapadmin,ou=groups,dc=opencloud,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: ldapadmin
|
||||
memberUid: ldapadmin
|
||||
gidNumber: 2001
|
||||
|
||||
dn: uid=ldapadmin,ou=users,dc=opencloud,dc=com
|
||||
givenName: ldap
|
||||
sn: admin
|
||||
uid: ldapadmin
|
||||
cn: ldapadmin
|
||||
mail: ldapadmin@example.com
|
||||
objectClass: person
|
||||
objectClass: inetOrgPerson
|
||||
objectClass: posixAccount
|
||||
userPassword: sai1yeiT
|
||||
uidNumber: 2001
|
||||
gidNumber: 2001
|
||||
loginShell: /bin/bash
|
||||
homeDirectory: /home/ldapadmin
|
||||
|
||||
03-opencloudadmin.ldif : |-
|
||||
dn: uid=admin,ou=users,dc=opencloud,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Admin
|
||||
sn: Istrator
|
||||
uid: admin
|
||||
userPassword: {SSHA}HMWJO7XCw80he2lqMf0PHzvvF14p6aLE
|
||||
mail: morgane.roques@irt-saintexupery.com
|
||||
ou: users
|
||||
|
||||
dn: ou=AppRoles,dc=opencloud,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: AppRoles
|
||||
description: AppRoles
|
||||
|
||||
dn: ou=Opencloud,ou=AppRoles,dc=opencloud,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: Opencloud
|
||||
description: Opencloud
|
||||
|
||||
prometheus:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
server:
|
||||
persistentVolume:
|
||||
enabled: true
|
||||
size: 5Gi
|
||||
service:
|
||||
type: ClusterIP
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
|
||||
# ldap user manager configuration
|
||||
ldapUserManager:
|
||||
enabled: true
|
||||
env:
|
||||
SERVER_HOSTNAME: ldap.opencloud.com
|
||||
LDAP_BASE_DN: dc=opencloud,dc=com
|
||||
LDAP_REQUIRE_STARTTLS: "false"
|
||||
LDAP_ADMINS_GROUP: ldapadmin
|
||||
LDAP_ADMIN_BIND_DN: cn=admin,dc=opencloud,dc=com
|
||||
LDAP_ADMIN_BIND_PWD: "{SSHA}HMWJO7XCw80he2lqMf0PHzvvF14p6aLE"
|
||||
LDAP_IGNORE_CERT_ERRORS: "true"
|
||||
EMAIL_DOMAIN: ""
|
||||
NO_HTTPS: "true"
|
||||
SERVER_PATH: "/users"
|
||||
ORGANISATION_NAME: Opencloud
|
||||
LDAP_USER_OU: users
|
||||
LDAP_GROUP_OU: groups
|
||||
ACCEPT_WEAK_PASSWORDS: "true"
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
|
||||
traefik:
|
||||
enabled: true
|
||||
service:
|
||||
type: NodePort
|
||||
ports:
|
||||
web:
|
||||
port: 80
|
||||
nodePort: 30950
|
||||
websecure:
|
||||
port: 443
|
||||
nodePort: 30951
|
||||
ingressRoute:
|
||||
dashboard:
|
||||
enabled: true
|
||||
matchRule: Host(`localhost`) && PathPrefix(`/api`) || PathPrefix(`/dashboard`)
|
||||
entryPoints: [web]
|
||||
ports:
|
||||
web:
|
||||
port: 80
|
||||
nodePort: 30950
|
||||
websecure:
|
||||
port: 443
|
||||
nodePort: 30951
|
||||
|
||||
hydra:
|
||||
enabled: true
|
||||
maester:
|
||||
enabled: true
|
||||
secret:
|
||||
enabled: false
|
||||
nameOverride: hydra-secret
|
||||
hashSumEnabled: false
|
||||
hydra:
|
||||
dev: true
|
||||
existingSecret: hydra-secret
|
||||
config:
|
||||
dsn: memory
|
||||
urls:
|
||||
login: https://localhost-login/authentication/login
|
||||
consent: https://localhost-consent/consent/consent
|
||||
logout: https://localhost-logout/authentication/logout
|
||||
self:
|
||||
issuer: "http://test-hydra-public.test:4444/"
|
||||
|
||||
keto:
|
||||
enabled: true
|
||||
keto:
|
||||
config:
|
||||
serve:
|
||||
read:
|
||||
port: 4466
|
||||
write:
|
||||
port: 4467
|
||||
metrics:
|
||||
port: 4468
|
||||
namespaces:
|
||||
- id: 0
|
||||
name: open-cloud
|
||||
dsn: memory
|
||||
|
||||
|
||||
loki:
|
||||
enabled: true
|
||||
loki:
|
||||
auth_enabled: false
|
||||
commonConfig:
|
||||
replication_factor: 1
|
||||
storage:
|
||||
storageClassName: standard
|
||||
type: filesystem
|
||||
filesystem:
|
||||
chunks_directory: /var/loki/chunks
|
||||
rules_directory: /var/loki/rules
|
||||
admin_api_directory: /var/loki/admin
|
||||
storage_config:
|
||||
boltdb_shipper:
|
||||
active_index_directory: /var/loki/index
|
||||
filesystem:
|
||||
directory: /var/loki/chunks
|
||||
limits_config:
|
||||
allow_structured_metadata: false
|
||||
schemaConfig:
|
||||
configs:
|
||||
- from: "2020-01-01"
|
||||
store: boltdb-shipper
|
||||
object_store: filesystem
|
||||
schema: v11
|
||||
index:
|
||||
prefix: index_
|
||||
period: 24h
|
||||
ingester:
|
||||
chunk_encoding: snappy
|
||||
tracing:
|
||||
enabled: true
|
||||
querier:
|
||||
max_concurrent: 2
|
||||
|
||||
deploymentMode: SingleBinary
|
||||
singleBinary:
|
||||
extraVolumes:
|
||||
- name: loki-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: loki-pvc
|
||||
persistence:
|
||||
enabled: false # Deactivate loki auto provisioning, rely on existing PVC
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
storageClassName: standard
|
||||
create: false
|
||||
claimName: loki-pvc
|
||||
|
||||
extraVolumeMounts:
|
||||
- name: loki-storage
|
||||
mountPath: /var/loki
|
||||
replicas: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 3
|
||||
memory: 4Gi
|
||||
requests:
|
||||
cpu: 1
|
||||
memory: 0.5Gi
|
||||
extraEnv:
|
||||
- name: GOMEMLIMIT
|
||||
value: 3750MiB
|
||||
|
||||
chunksCache:
|
||||
# default is 500MB, with limited memory keep this smaller
|
||||
writebackSizeLimit: 10MB
|
||||
|
||||
# Enable minio for storage
|
||||
minio:
|
||||
enabled: false
|
||||
# Zero out replica counts of other deployment modes
|
||||
backend:
|
||||
replicas: 0
|
||||
read:
|
||||
replicas: 0
|
||||
write:
|
||||
replicas: 0
|
||||
ingester:
|
||||
replicas: 0
|
||||
querier:
|
||||
replicas: 0
|
||||
queryFrontend:
|
||||
replicas: 0
|
||||
queryScheduler:
|
||||
replicas: 0
|
||||
distributor:
|
||||
replicas: 0
|
||||
compactor:
|
||||
replicas: 0
|
||||
indexGateway:
|
||||
replicas: 0
|
||||
bloomCompactor:
|
||||
replicas: 0
|
||||
bloomGateway:
|
||||
replicas: 0
|
||||
|
||||
grafana:
|
||||
enabled: true
|
||||
adminUser: admin
|
||||
adminPassword: admin
|
||||
persistence:
|
||||
enabled: true
|
||||
size: 1Gi
|
||||
service:
|
||||
type: ClusterIP
|
||||
|
||||
argo-workflows:
|
||||
enabled: false
|
||||
workflow:
|
||||
serviceAccount:
|
||||
create: false
|
||||
name: argo-workflow
|
||||
rbac:
|
||||
create: false # Manual provisioning
|
||||
controller:
|
||||
workflowNamespaces: [] #All of them
|
||||
controller:
|
||||
workflowDefaults:
|
||||
spec:
|
||||
serviceAccountName: argo-workflow
|
||||
|
||||
ocAuth:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-auth:0.0.1
|
||||
authType: hydra
|
||||
keto:
|
||||
adminRole: admin
|
||||
hydra:
|
||||
openCloudOauth2ClientSecretName: opencloud-oauth2-client-secret
|
||||
ldap:
|
||||
bindDn: cn=admin,dc=opencloud,dc=com
|
||||
binPwd: admin
|
||||
baseDn: dc=opencloud,dc=com
|
||||
userBaseDn: ou=users,dc=opencloud,dc=com
|
||||
roleBaseDn: ou=AppRoles,dc=opencloud,dc=com
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocFront:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-front:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocWorkspace:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-workspace:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
|
||||
ocShared:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-shared:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocWorkflow:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-workflow:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocCatalog:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-catalog:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocPeer:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-peer:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocDatacenter:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-datacenter:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocDiscovery:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-schedulerd:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocSchedulerd:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-schedulerd:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocScheduler:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: oc/oc-scheduler:0.0.1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
docker-registry-ui:
|
||||
enabled: true
|
||||
ui:
|
||||
title: "opencloud docker registry"
|
||||
proxy: true
|
||||
dockerRegistryUrl: "http://test-docker-registry-ui-registry-server.test.svc.cluster.local:5000"
|
||||
registry:
|
||||
secretName: regcred
|
||||
enabled: true
|
||||
dataVolume:
|
||||
persistentVolumeClaim:
|
||||
claimName: docker-registry-pvc
|
||||
persistence:
|
||||
create: false
|
||||
existingClaim: docker-registry-pvc
|
||||
accessMode: ReadWriteOnce
|
||||
storage: 5Gi
|
||||
storageClassName: "standard"
|
||||
@@ -1,30 +0,0 @@
|
||||
cat <<EOF | kind create cluster --name opencloud --config=-
|
||||
kind: Cluster
|
||||
apiVersion: kind.x-k8s.io/v1alpha4
|
||||
nodes:
|
||||
- role: control-plane
|
||||
kubeadmConfigPatches:
|
||||
- |
|
||||
kind: InitConfiguration
|
||||
nodeRegistration:
|
||||
kubeletExtraArgs:
|
||||
node-labels: "ingress-ready=true"
|
||||
extraPortMappings:
|
||||
- containerPort: 30950
|
||||
hostPort: 80
|
||||
protocol: TCP
|
||||
- containerPort: 30951
|
||||
hostPort: 443
|
||||
protocol: TCP
|
||||
containerdConfigPatches:
|
||||
- |-
|
||||
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."locahost:5000"]
|
||||
endpoint = ["http://dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000"]
|
||||
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000"]
|
||||
endpoint = ["http://dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000"]
|
||||
[plugins."io.containerd.grpc.v1.cri".registry.configs."dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000".tls]
|
||||
insecure_skip_verify = true
|
||||
cert_file = ""
|
||||
key_file = ""
|
||||
ca_file = ""
|
||||
EOF
|
||||
40
go.mod
Normal file
40
go.mod
Normal file
@@ -0,0 +1,40 @@
|
||||
module oc-k8s
|
||||
|
||||
go 1.24.9
|
||||
|
||||
toolchain go1.24.11
|
||||
|
||||
require (
|
||||
github.com/prometheus/client_golang v1.23.2
|
||||
github.com/prometheus/common v0.67.5
|
||||
github.com/prometheus/prometheus v0.309.0
|
||||
github.com/stretchr/testify v1.11.1
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 // indirect
|
||||
github.com/jpillora/backoff v1.0.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
github.com/prometheus/client_model v0.6.2 // indirect
|
||||
github.com/prometheus/procfs v0.16.1 // indirect
|
||||
go.yaml.in/yaml/v2 v2.4.3 // indirect
|
||||
golang.org/x/net v0.48.0 // indirect
|
||||
golang.org/x/oauth2 v0.34.0 // indirect
|
||||
golang.org/x/sys v0.39.0 // indirect
|
||||
golang.org/x/text v0.32.0 // indirect
|
||||
google.golang.org/protobuf v1.36.11 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
206
go.sum
Normal file
206
go.sum
Normal file
@@ -0,0 +1,206 @@
|
||||
cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4=
|
||||
cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
|
||||
cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
|
||||
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 h1:JXg2dwJUmPB9JmtVmdEB16APJ7jurfbY5jnfXpJoRMc=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0/go.mod h1:YD5h/ldMsG0XiIw7PdyNhLxaM317eFh5yNLccNfGdyw=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 h1:Hk5QBxZQC1jb2Fwj6mpzme37xbCDdNTxU7O9eb5+LB4=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1/go.mod h1:IYus9qsFobWIc2YVwe/WPjcnyCkPKtnHAqUYeebc8z0=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI=
|
||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs=
|
||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk=
|
||||
github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0=
|
||||
github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs=
|
||||
github.com/aws/aws-sdk-go-v2 v1.41.0 h1:tNvqh1s+v0vFYdA1xq0aOJH+Y5cRyZ5upu6roPgPKd4=
|
||||
github.com/aws/aws-sdk-go-v2 v1.41.0/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.6 h1:hFLBGUKjmLAekvi1evLi5hVvFQtSo3GYwi+Bx4lpJf8=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.32.6/go.mod h1:lcUL/gcd8WyjCrMnxez5OXkO3/rwcNmvfno62tnXNcI=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.6 h1:F9vWao2TwjV2MyiyVS+duza0NIRtAslgLUM0vTA1ZaE=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.19.6/go.mod h1:SgHzKjEVsdQr6Opor0ihgWtkWdfRAIwxYzSJ8O85VHY=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.16 h1:80+uETIWS1BqjnN9uJ0dBUaETh+P1XwFy5vwHwK5r9k=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.16/go.mod h1:wOOsYuxYuB/7FlnVtzeBYRcjSRtQpAW0hCP7tIULMwo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16 h1:rgGwPzb82iBYSvHMHXc8h9mRoOUBZIGFgKb9qniaZZc=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16/go.mod h1:L/UxsGeKpGoIj6DxfhOWHWQ/kGKcd4I1VncE4++IyKA=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16 h1:1jtGzuV7c82xnqOVfx2F0xmJcOw5374L7N6juGW6x6U=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16/go.mod h1:M2E5OQf+XLe+SZGmmpaI2yy+J326aFf6/+54PoxSANc=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16 h1:oHjJHeUy0ImIV0bsrX0X91GkV5nJAyv1l1CC9lnO0TI=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16/go.mod h1:iRSNGgOYmiYwSCXxXaKb9HfOEj40+oTKn8pTxMlYkRM=
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.4 h1:HpI7aMmJ+mm1wkSHIA2t5EaFFv5EFYXePW30p1EIrbQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/signin v1.0.4/go.mod h1:C5RdGMYGlfM0gYq/tifqgn4EbyX99V15P2V3R+VHbQU=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.8 h1:aM/Q24rIlS3bRAhTyFurowU8A0SMyGDtEOY/l/s/1Uw=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.8/go.mod h1:+fWt2UHSb4kS7Pu8y+BMBvJF0EWx+4H0hzNwtDNRTrg=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.12 h1:AHDr0DaHIAo8c9t1emrzAlVDFp+iMMKnPdYy6XO4MCE=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.12/go.mod h1:GQ73XawFFiWxyWXMHWfhiomvP3tXtdNar/fi8z18sx0=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.5 h1:SciGFVNZ4mHdm7gpD1dgZYnCuVdX1s+lFTg4+4DOy70=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.41.5/go.mod h1:iW40X4QBmUxdP+fZNOpfmkdMZqsovezbAeO+Ubiv2pk=
|
||||
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
|
||||
github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
|
||||
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
|
||||
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
|
||||
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAVrGgAa0f2/R35S4DJwfFaUPFQ=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
|
||||
github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
|
||||
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
|
||||
github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853 h1:cLN4IBkmkYZNnk7EAJ0BHIethd+J6LqxFNw5mSiI2bM=
|
||||
github.com/grafana/regexp v0.0.0-20250905093917-f7b3be9d1853/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk=
|
||||
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
|
||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk=
|
||||
github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
|
||||
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
|
||||
github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
|
||||
github.com/prometheus/client_golang/exp v0.0.0-20251212205219-7ba246a648ca h1:BOxmsLoL2ymn8lXJtorca7N/m+2vDQUDoEtPjf0iAxA=
|
||||
github.com/prometheus/client_golang/exp v0.0.0-20251212205219-7ba246a648ca/go.mod h1:gndBHh3ZdjBozGcGrjUYjN3UJLRS3l2drALtu4lUt+k=
|
||||
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
|
||||
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
|
||||
github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4=
|
||||
github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw=
|
||||
github.com/prometheus/otlptranslator v1.0.0 h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEoIwkU+A6qos=
|
||||
github.com/prometheus/otlptranslator v1.0.0/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM=
|
||||
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
|
||||
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
|
||||
github.com/prometheus/prometheus v0.309.0 h1:e5ftKJSkjDE4LKWWN9qtYtbVq627BabwGzlKWqX7t2Y=
|
||||
github.com/prometheus/prometheus v0.309.0/go.mod h1:d+dOGiVhuNDa4MaFXHVdnUBy/CzqlcNTooR8oM1wdTU=
|
||||
github.com/prometheus/sigv4 v0.3.0 h1:QIG7nTbu0JTnNidGI1Uwl5AGVIChWUACxn2B/BQ1kms=
|
||||
github.com/prometheus/sigv4 v0.3.0/go.mod h1:fKtFYDus2M43CWKMNtGvFNHGXnAJJEGZbiYCmVp/F8I=
|
||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
|
||||
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0 h1:ssfIgGNANqpVFCndZvcuyKbl0g+UAVcbBcqGkG28H0Y=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0/go.mod h1:GQ/474YrbE4Jx8gZ4q5I4hrhUzM6UPzyrqJYV2AqPoQ=
|
||||
go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=
|
||||
go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8=
|
||||
go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=
|
||||
go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs=
|
||||
go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=
|
||||
go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
|
||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
|
||||
go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
|
||||
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
|
||||
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
|
||||
golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
|
||||
golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
|
||||
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
|
||||
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
|
||||
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
|
||||
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/api v0.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA=
|
||||
google.golang.org/api v0.257.0/go.mod h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
|
||||
google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM=
|
||||
google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig=
|
||||
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
||||
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
k8s.io/apimachinery v0.34.3 h1:/TB+SFEiQvN9HPldtlWOTp0hWbJ+fjU+wkxysf/aQnE=
|
||||
k8s.io/apimachinery v0.34.3/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
|
||||
k8s.io/client-go v0.34.3 h1:wtYtpzy/OPNYf7WyNBTj3iUA0XaBHVqhv4Iv3tbrF5A=
|
||||
k8s.io/client-go v0.34.3/go.mod h1:OxxeYagaP9Kdf78UrKLa3YZixMCfP6bgPwPwNBQBzpM=
|
||||
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
|
||||
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
|
||||
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
||||
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
|
||||
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
RELEASE_NAME=dev
|
||||
RELEASE_NAMESPACE=dev
|
||||
|
||||
helm install ${RELEASE_NAME} opencloud -n ${RELEASE_NAMESPACE} --create-namespace -f opencloud/dev-values.yaml
|
||||
113
internal/cluster.go
Normal file
113
internal/cluster.go
Normal file
@@ -0,0 +1,113 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"oc-k8s/utils"
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func Help_Cluster() {
|
||||
fmt.Println(`
|
||||
Cluster commands: oc-k8s <action> cluster [options]
|
||||
create - Create a new kind cluster
|
||||
delete - Delete the kind cluster
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create cluster -f [env_folder] -r [release]
|
||||
env_folder - Helm config folder (default: .)
|
||||
release - Release values name (default: dev)
|
||||
oc-k8s delete cluster -f [env_folder] -r [release]
|
||||
env_folder - Helm config folder (default: .)
|
||||
release - Release values name (default: dev)
|
||||
oc-k8s help cluster `)
|
||||
}
|
||||
|
||||
func Delete_Cluster(folder string, release string) error {
|
||||
clusterName := "opencloud"
|
||||
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
|
||||
clusterName, _ = utils.Extract(string(b), "clusterName")
|
||||
}
|
||||
utils.Exec("export KUBECONFIG=~/.kube/config")
|
||||
return utils.Exec("kind delete cluster --name " + clusterName)
|
||||
}
|
||||
|
||||
func Install_Cluster() error {
|
||||
utils.Exec("sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config")
|
||||
return utils.Exec("chmod 600 ~/.kube/config")
|
||||
}
|
||||
|
||||
func Create_Cluster(folder string, release string) error {
|
||||
clusterName := "opencloud"
|
||||
scheme := "http"
|
||||
port := "80"
|
||||
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
|
||||
clusterName, _ = utils.Extract(string(b), "clusterName")
|
||||
scheme, _ = utils.Extract(string(b), "scheme")
|
||||
port, _ = utils.Extract(string(b), "hostPort")
|
||||
}
|
||||
utils.Exec("sudo fuser -k -TERM " + port + "/tcp")
|
||||
containerPort := "30950"
|
||||
if scheme == "https" {
|
||||
containerPort = "30951"
|
||||
}
|
||||
kindConfig := `kind: Cluster
|
||||
apiVersion: kind.x-k8s.io/v1alpha4
|
||||
name: ` + clusterName + `
|
||||
nodes:
|
||||
- role: control-plane
|
||||
image: kindest/node:v1.35.0
|
||||
kubeadmConfigPatches:
|
||||
- |
|
||||
kind: InitConfiguration
|
||||
nodeRegistration:
|
||||
kubeletExtraArgs:
|
||||
node-labels: "ingress-ready=true"
|
||||
extraPortMappings:
|
||||
- containerPort: ` + containerPort + `
|
||||
hostPort: ` + port + `
|
||||
protocol: TCP
|
||||
`
|
||||
cmd := exec.Command("kind", "create", "cluster", "--name", clusterName, "--wait", "0", "--config=-")
|
||||
cmd.Stdin = bytes.NewBufferString(kindConfig)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
if err := cmd.Run(); err != nil {
|
||||
fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
utils.Exec(`docker exec -it oc-control-plane bash -c 'mkdir -p /etc/containerd && cat <<EOF >/etc/containerd/config.toml
|
||||
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
|
||||
endpoint = ["http://dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000"]
|
||||
EOF
|
||||
containerd config restart'`)
|
||||
|
||||
fmt.Println("[WARNING] New cluster should be merged into your current config !")
|
||||
|
||||
if err := utils.Exec("KUBECONFIG=~/.kube/config:/tmp/kind-" + clusterName + ".kubeconfig kubectl config view --flatten --merge --minify > /tmp/merged-kubeconfig.yaml"); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := utils.Exec("cp -f /tmp/merged-kubeconfig.yaml ~/.kube/config"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := utils.Exec("export KUBECONFIG=~/.kube/config"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := utils.Exec("kubectl config get-contexts"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := utils.Exec("kubectl config use-context kind-" + clusterName); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := utils.Exec("docker start " + clusterName + "-control-plane"); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
98
internal/db.go
Normal file
98
internal/db.go
Normal file
@@ -0,0 +1,98 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"oc-k8s/utils"
|
||||
"os"
|
||||
"strings"
|
||||
"bytes"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func Help_DB() {
|
||||
fmt.Println(`
|
||||
DB commands: oc-k8s <action> db [options]
|
||||
create - Add datas in db
|
||||
replace - Replace datas in db
|
||||
delete - Delete datas in db
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create db --d [db_name] -r [release] -n [namespace] -f [folder]
|
||||
folder - Datas folder files path (required)
|
||||
release - Release values name (default: dev)
|
||||
namespace - Namespace values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
folder - Helm config folder (required, default: .)
|
||||
oc-k8s upgrade db -d [db_name] -r [release] -n [namespace] -f [folder]
|
||||
folder - Datas folder files path (required)
|
||||
release - Release values name (default: dev)
|
||||
namespace - Namespace values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
oc-k8s delete db -d [db_name] -r [release] -n [namespace] -f [folder]
|
||||
release - Release values name (default: dev)
|
||||
namespace - Namespace values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
folder - Helm config folder (required, default: .)
|
||||
oc-k8s help db `)
|
||||
}
|
||||
|
||||
func Delete_DB(release string, namespace string, dbName string, adminUsr string, adminPsw string) error {
|
||||
podName, err := getMongoPod(namespace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return utils.Exec("kubectl exec " + podName + " -- mongosh --eval \"db.getSiblingDB('" + dbName + "').dropDatabase()\" -u " + adminUsr + " -p " + adminPsw +" --authenticationDatabase admin")
|
||||
}
|
||||
|
||||
func getFileNames(folderPath string) []string {
|
||||
fileNames := []string{}
|
||||
entries, err := os.ReadDir(folderPath)
|
||||
if err != nil {
|
||||
return fileNames
|
||||
}
|
||||
for _, entry := range entries {
|
||||
if entry.IsDir() {
|
||||
continue
|
||||
}
|
||||
fileNames = append(fileNames, entry.Name())
|
||||
}
|
||||
return fileNames
|
||||
}
|
||||
|
||||
func Create_DB(filePath *string, release string, namespace string, dbName string, adminUsr string, adminPsw string) error {
|
||||
if filePath == nil {
|
||||
return errors.New("missing db datas file path")
|
||||
}
|
||||
podName, err := getMongoPod(namespace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, fileName := range getFileNames(*filePath) {
|
||||
fmt.Println("ADD file " + fileName + " in collection")
|
||||
if err := utils.Exec("kubectl cp -n " + namespace + " " + *filePath + "/" + fileName + " \"" + podName + ":/tmp/" + fileName + "\""); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := utils.Exec("kubectl exec -n " + namespace + " " + podName + " -- mongoimport --db " + dbName + " --collection " + strings.ReplaceAll(fileName, ".json", "") + " --file /tmp/" + fileName + " --jsonArray -u " + adminUsr + " -p " + adminPsw +" --authenticationDatabase admin"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getMongoPod(namespace string) (string, error) {
|
||||
cmd := exec.Command("bash", "-c", "kubectl get pods -n "+namespace+" --no-headers -o custom-columns=\":metadata.name\" | grep mongodb | head -n 1")
|
||||
var out bytes.Buffer
|
||||
cmd.Stdout = &out
|
||||
if err := cmd.Run(); err != nil {
|
||||
return "", err
|
||||
}
|
||||
podName := strings.TrimSpace(out.String()) // remove newline
|
||||
return podName, nil
|
||||
}
|
||||
|
||||
func Upgrade_DB(filePath *string, release string, namespace string, dbName string, adminUsr string, adminPsw string) error {
|
||||
Delete_DB(release, namespace, dbName, adminUsr, adminPsw)
|
||||
return Create_DB(filePath, release, namespace, dbName, adminUsr, adminPsw)
|
||||
}
|
||||
132
internal/func.go
Normal file
132
internal/func.go
Normal file
@@ -0,0 +1,132 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"oc-k8s/utils"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func Help_Func() {
|
||||
fmt.Println(`
|
||||
Main commands: oc-k8s <action>
|
||||
install - Install opencloud dependancies [arch] [version]
|
||||
start - Start opencloud k8s
|
||||
stop - Stop opencloud k8s
|
||||
Usage:
|
||||
oc-k8s install -a [arch] -v [version]
|
||||
arch - Arch of OS (required)
|
||||
kind_version - version of kind (required)
|
||||
oc-k8s start -n [namespace] -r [release] -f [folder] -b [branch] -t [target] -p [port] -P [portTLS] -build [true|false]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
branch - Git branch to build (default: main)
|
||||
target - make target (default: all)
|
||||
build - build mode (default: true)
|
||||
oc-k8s stop -n [namespace] -r [release] -f [folder]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)`)
|
||||
Help_Cluster()
|
||||
Help_Service()
|
||||
Help_Helm()
|
||||
Help_Values()
|
||||
Help_K3S()
|
||||
Help_Kind()
|
||||
Help_DB()
|
||||
}
|
||||
|
||||
func Start(folder string, release string, namespace string, branch string, target string, build bool) error {
|
||||
Stop(folder, release, namespace)
|
||||
if err := Create_K3S(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Create_Cluster(folder, release); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Create_Service(folder, release, branch, target, build); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := Create_Helm(folder, release, namespace); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func Stop(folder string, release string, namespace string) error {
|
||||
Delete_Helm(release, namespace)
|
||||
Delete_Cluster(folder, release)
|
||||
return nil
|
||||
}
|
||||
|
||||
func Install_Func(arch string, version string) error {
|
||||
Install_K3S()
|
||||
Install_Kind(arch, version)
|
||||
Install_Helm()
|
||||
return nil
|
||||
}
|
||||
|
||||
func ExtractTrees(src, dst string) error {
|
||||
for i, fs := range utils.FSS {
|
||||
fmt.Printf("\rExtract temporary Charts: %d/11", i)
|
||||
if err := ExtractTree(fs, "assets", dst); err != nil {
|
||||
continue
|
||||
}
|
||||
}
|
||||
fmt.Print("\n")
|
||||
return nil
|
||||
}
|
||||
|
||||
func ExtractTree(FS embed.FS, src, dst string) error {
|
||||
seen := map[string]bool{}
|
||||
if err := os.MkdirAll(dst, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
entries, err := fs.ReadDir(FS, src)
|
||||
if err != nil {
|
||||
return err // src may not exist in this FS
|
||||
}
|
||||
|
||||
for _, e := range entries {
|
||||
srcPath := path.Join(src, e.Name())
|
||||
dstPath := filepath.Join(dst, e.Name())
|
||||
|
||||
if seen[dstPath] {
|
||||
continue // already copied
|
||||
}
|
||||
|
||||
if e.IsDir() {
|
||||
if err := ExtractTree(FS, srcPath, dstPath); err != nil {
|
||||
continue
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
in, err := FS.Open(srcPath)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
out, err := os.Create(dstPath)
|
||||
if err != nil {
|
||||
in.Close()
|
||||
continue
|
||||
}
|
||||
|
||||
if _, err := io.Copy(out, in); err != nil {
|
||||
in.Close()
|
||||
out.Close()
|
||||
continue
|
||||
}
|
||||
in.Close()
|
||||
out.Close()
|
||||
|
||||
seen[dstPath] = true
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
105
internal/helm.go
Normal file
105
internal/helm.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"oc-k8s/utils"
|
||||
"os"
|
||||
)
|
||||
|
||||
func Help_Helm() {
|
||||
fmt.Println(`
|
||||
Helm commands: oc-k8s <action> helm
|
||||
install - Install Helm
|
||||
create - Install a helm release for the given environment (default: dev)
|
||||
delete - Uninstall a helm release for the given environment (default: dev)
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s install helm
|
||||
oc-k8s create helm -n [namespace] -r [release] -f [folder]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
oc-k8s upgrade helm -n [namespace] -r [release] -f [folder]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
oc-k8s delete helm -n [namespace] -r [release] -f [folder]
|
||||
folder - Helm config folder (required, default: .)
|
||||
release - environnement selected (default: dev)
|
||||
namespace - namespace selected (default: dev)
|
||||
oc-k8sh help helm`)
|
||||
}
|
||||
|
||||
func Install_Helm() error {
|
||||
utils.Exec("curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash")
|
||||
utils.Exec("helm version")
|
||||
return nil
|
||||
}
|
||||
|
||||
func Delete_Helm(release string, namespace string) error {
|
||||
utils.Exec("helm uninstall " + release + " -n " + namespace)
|
||||
utils.Exec("kubectl delete namespace " + namespace + " &")
|
||||
return nil
|
||||
}
|
||||
|
||||
func Create_Helm(folder string, release string, namespace string) error {
|
||||
tmp := "./opencloud-chart"
|
||||
utils.Exec("sudo rm -rf " + tmp)
|
||||
if err := os.MkdirAll(tmp, os.ModePerm); err != nil {
|
||||
fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
ExtractTrees("assets", tmp)
|
||||
defer os.RemoveAll(tmp)
|
||||
|
||||
host := "beta.opencloud.com"
|
||||
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
|
||||
host, _ = utils.Extract(string(b), "host")
|
||||
}
|
||||
|
||||
fmt.Println("set up helm")
|
||||
if err := utils.Exec("helm dependency update " + tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("set up deps")
|
||||
for name, repo := range utils.ExtractRepo() {
|
||||
utils.Exec("helm repo add " + name + " " + repo)
|
||||
}
|
||||
if err := utils.Exec("helm dependency build " + tmp); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
utils.Exec("kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.crds.yaml")
|
||||
|
||||
utils.Exec("helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.14.0")
|
||||
utils.Exec("helm install admiralty oci://public.ecr.aws/admiralty/admiralty --namespace admiralty --create-namespace --version 0.17.0 --wait")
|
||||
utils.Exec("helm install argo-workflows argo/argo-workflows --namespace argo --create-namespace")
|
||||
|
||||
utils.Exec("helm repo add jetstack https://charts.jetstack.io")
|
||||
utils.Exec("helm repo add argo https://argoproj.github.io/argo-helm")
|
||||
|
||||
utils.Exec("helm repo update")
|
||||
|
||||
if err := utils.Exec("helm upgrade --install " + release + " " + tmp + " -n " + namespace + " --create-namespace -f " + folder + "/" + release + "-values.yaml --debug"); err != nil {
|
||||
return err
|
||||
}
|
||||
utils.Exec("sudo sed -i.bak \"\n/[[:space:]]" + host + "$/d\" /etc/hosts")
|
||||
utils.Exec("echo \"\n127.0.0.1 " + host + "\" | sudo tee -a /etc/hosts > /dev/null")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Upgrade_Helm(folder string, release string, namespace string) error {
|
||||
tmp := "./opencloud-chart"
|
||||
if err := os.MkdirAll(tmp, os.ModePerm); err != nil {
|
||||
fmt.Println(err)
|
||||
return err
|
||||
}
|
||||
ExtractTrees("assets", tmp)
|
||||
defer os.RemoveAll(tmp)
|
||||
|
||||
Delete_Cluster(folder, release)
|
||||
|
||||
return utils.Exec("helm upgrade " + release + " " + tmp + " -n " + namespace + " --create-namespace -f " + folder + "/" + release + "-values.yaml")
|
||||
}
|
||||
40
internal/k3s.go
Normal file
40
internal/k3s.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"oc-k8s/utils"
|
||||
)
|
||||
|
||||
func Help_K3S() {
|
||||
fmt.Println(`
|
||||
K3S commands: oc-k8s <action> k3s
|
||||
install - Install k3s
|
||||
create - Create a new cluster
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s install k3s
|
||||
oc-k8s create k3s
|
||||
oc-k8s help values `)
|
||||
}
|
||||
|
||||
func Install_K3S() error {
|
||||
utils.Exec("sudo /usr/local/bin/k3s-uninstall.sh")
|
||||
utils.Exec("sudo rm -rf /etc/rancher /var/lib/rancher")
|
||||
utils.Exec("sudo chown $USER:$USER /home/$USER/.kube/config")
|
||||
if err := utils.Exec("curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644"); err != nil {
|
||||
return err
|
||||
}
|
||||
Create_K3S()
|
||||
|
||||
if err := utils.Exec("sudo systemctl status k3s"); err != nil {
|
||||
return err
|
||||
}
|
||||
return utils.Exec("chmod 600 ~/.kube/config")
|
||||
}
|
||||
|
||||
func Create_K3S() error {
|
||||
utils.Exec("sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config")
|
||||
utils.Exec("chmod 700 /home/mr/.kube")
|
||||
return utils.Exec("chmod 600 ~/.kube/config")
|
||||
}
|
||||
31
internal/kind.go
Normal file
31
internal/kind.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"oc-k8s/utils"
|
||||
)
|
||||
|
||||
func Help_Kind() {
|
||||
fmt.Println(`
|
||||
Kind commands: oc-k8s <action> kind
|
||||
install - Install kind
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s install kind -a [arch] -v [version]
|
||||
arch - Arch of OS (required, default: amd64)
|
||||
kind_version - version of kind (optionnal)
|
||||
oc-k8s help values `)
|
||||
}
|
||||
|
||||
func Install_Kind(arch string, version string) error {
|
||||
if version == "" {
|
||||
utils.Exec("GOARCH=" + arch +" GOOS=linux go install sigs.k8s.io/kind@latest")
|
||||
|
||||
} else {
|
||||
utils.Exec("curl -Lo kind-linux-amd64 https://kind.sigs.k8s.io/dl/" + version + "/kind-linux-" + arch)
|
||||
utils.Exec("sudo chmod +x ./kind-linux-" + arch)
|
||||
utils.Exec("sudo mv ./kind-linux-" + arch + " /usr/local/bin/kind")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
87
internal/services.go
Normal file
87
internal/services.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"oc-k8s/utils"
|
||||
"os"
|
||||
)
|
||||
|
||||
var REPOS = []string{
|
||||
"oc-auth",
|
||||
"oc-catalog",
|
||||
"oc-datacenter",
|
||||
"oc-front",
|
||||
"oc-monitord",
|
||||
"oc-peer",
|
||||
"oc-shared",
|
||||
"oc-scheduler",
|
||||
"oc-schedulerd",
|
||||
"oc-workflow",
|
||||
"oc-workspace",
|
||||
"oc-discovery",
|
||||
}
|
||||
|
||||
var officialRegistry = "opencloudregistry"
|
||||
|
||||
func Help_Service() {
|
||||
fmt.Println(`
|
||||
Service commands: oc-k8s <action> services
|
||||
create - Build all opencloud services
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create services -f [env_folder] -r [release] -b [branch] -t [target] -build [true|false]
|
||||
env_folder - Helm config folder (required, default: .)
|
||||
release - Release values name (required, default: dev)
|
||||
branch - Git branch to build (default: main)
|
||||
target - make target (default: all)
|
||||
build - build mode (default: true)
|
||||
oc-k8s help services `)
|
||||
}
|
||||
|
||||
func Create_Service(folder string, release string, branch string, target string, build bool) error {
|
||||
if build {
|
||||
return buildService(folder, release, branch, target)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func buildService(folder string, release string, branch string, target string) error {
|
||||
scheme := "http"
|
||||
hostname := "beta.opencloud.com"
|
||||
clusterName := "opencloud"
|
||||
pport := "80"
|
||||
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
|
||||
hostname, _ = utils.Extract(string(b), "host")
|
||||
scheme, _ = utils.Extract(string(b), "scheme")
|
||||
clusterName, _ = utils.Extract(string(b), "clusterName")
|
||||
pport, _ = utils.Extract(string(b), "hostPort")
|
||||
}
|
||||
|
||||
for _, repo := range REPOS {
|
||||
repo_url := "https://cloud.o-forge.io/core/" + repo + ".git"
|
||||
host := "$(ip -4 addr show $(ip route | awk '/default/ {print $5}') | awk '/inet / {print $2}' | cut -d/ -f1)"
|
||||
port := "6443"
|
||||
ca := "$(kubectl config view --raw --minify -o jsonpath='{.clusters[0].cluster.certificate-authority-data}')"
|
||||
cert := "$(kubectl config view --raw --minify -o jsonpath='{.users[0].user.client-certificate-data}')"
|
||||
key := "$(kubectl config view --raw --minify -o jsonpath='{.users[0].user.client-key-data}')"
|
||||
|
||||
if inf, err := os.Stat("./" + repo); err != nil || !inf.IsDir() {
|
||||
fmt.Println("Cloning repository: " + repo)
|
||||
if err := utils.Exec("git clone " + repo_url); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
fmt.Println("Repository '" + repo + "' now exists. Pulling latest changes...")
|
||||
utils.Exec("cd " + repo + " && git pull") // " && git checkout " + branch +
|
||||
fmt.Println("Build '" + repo + "'...")
|
||||
if err := utils.Exec("cd " + repo + " && export CLUSTER_NAME=" + clusterName + " && export HOST=" + scheme + "://" + hostname + ":" + pport + " && export KUBERNETES_SERVICE_HOST=" + host + " && export KUBERNETES_SERVICE_PORT=" + port + " && export KUBE_CA=" + ca + " && export KUBE_CERT=" + cert + " && export KUBE_DATA=" + key + " && make " + target); err != nil {
|
||||
fmt.Println("ERR", err)
|
||||
return err
|
||||
}
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// opencloudregistry.hub.docker.com
|
||||
104
internal/values.go
Normal file
104
internal/values.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"oc-k8s/utils"
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Help_Values() {
|
||||
fmt.Println(`
|
||||
Values commands: oc-k8s <action> values
|
||||
create - Create a new values release yaml
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create values -r [release] -f [env_folder] -c [env_file]
|
||||
release - Release values name (required)
|
||||
env_folder - Helm config folder (optionnal, default: .)
|
||||
env_file - env to map (optionnal)
|
||||
oc-k8s help values `)
|
||||
}
|
||||
|
||||
var varPattern = regexp.MustCompile(`\$\{([A-Za-z_][A-Za-z0-9_]*)[:-]([^}]+)\}`)
|
||||
|
||||
func Create_Values(output_folder *string, release *string, confFile *string) error {
|
||||
return generateConfig(confFile, release, output_folder)
|
||||
}
|
||||
|
||||
func generateConfig(confFile *string, release *string, output_folder *string) error {
|
||||
// Load env file if provided
|
||||
var err error
|
||||
confs := map[string]string{}
|
||||
if confFile != nil && *confFile != "" {
|
||||
if confs, err = loadEnvFile(*confFile); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
// Read template
|
||||
content, err := utils.ReadFS("assets/values.yaml.template")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
confs["RELEASE"] = *release
|
||||
|
||||
rendered := renderTemplate(string(content), confs)
|
||||
|
||||
// Ensure output directory exists
|
||||
if err := os.MkdirAll(*output_folder, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Write output
|
||||
if err := os.WriteFile(*output_folder+"/"+*release+"-values.yaml", []byte(rendered), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("Rendered %s from %s using %s\n", *output_folder+"/"+*release+"-values.yaml", "assets/values.yaml.template", *confFile)
|
||||
return nil
|
||||
}
|
||||
|
||||
func loadEnvFile(path string) (map[string]string, error) {
|
||||
envs := map[string]string{}
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return envs, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
|
||||
if line == "" || strings.HasPrefix(line, "#") {
|
||||
continue
|
||||
}
|
||||
|
||||
parts := strings.SplitN(line, "=", 2)
|
||||
if len(parts) != 2 {
|
||||
continue
|
||||
}
|
||||
|
||||
key := strings.TrimSpace(parts[0])
|
||||
val := strings.Trim(strings.TrimSpace(parts[1]), `"'`)
|
||||
|
||||
envs[key] = val
|
||||
}
|
||||
return envs, scanner.Err()
|
||||
}
|
||||
|
||||
func renderTemplate(input string, envs map[string]string) string {
|
||||
s := varPattern.ReplaceAllStringFunc(input, func(match string) string {
|
||||
sub := varPattern.FindStringSubmatch(match)
|
||||
varName := sub[1]
|
||||
defaultVal := sub[2][1:]
|
||||
|
||||
if val, ok := envs[varName]; ok && val != "" {
|
||||
return val
|
||||
}
|
||||
return defaultVal
|
||||
})
|
||||
return s
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: oci://registry-1.docker.io/bitnamicharts
|
||||
version: 2.27.0
|
||||
digest: sha256:b711ab5874abf868a0c64353a790f17771758cee6f802acb9819be004c8460af
|
||||
generated: "2024-11-14T11:36:35.060517594+01:00"
|
||||
@@ -1,41 +0,0 @@
|
||||
annotations:
|
||||
category: Database
|
||||
images: |
|
||||
- name: kubectl
|
||||
image: docker.io/bitnami/kubectl:1.31.2-debian-12-r3
|
||||
- name: mongodb
|
||||
image: docker.io/bitnami/mongodb:8.0.3-debian-12-r0
|
||||
- name: mongodb-exporter
|
||||
image: docker.io/bitnami/mongodb-exporter:0.41.2-debian-12-r1
|
||||
- name: nginx
|
||||
image: docker.io/bitnami/nginx:1.27.2-debian-12-r2
|
||||
- name: os-shell
|
||||
image: docker.io/bitnami/os-shell:12-debian-12-r32
|
||||
licenses: Apache-2.0
|
||||
apiVersion: v2
|
||||
appVersion: 8.0.3
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: oci://registry-1.docker.io/bitnamicharts
|
||||
tags:
|
||||
- bitnami-common
|
||||
version: 2.x.x
|
||||
description: MongoDB(R) is a relational open source NoSQL database. Easy to use, it
|
||||
stores data in JSON-like documents. Automated scalability and high-performance.
|
||||
Ideal for developing cloud native applications.
|
||||
home: https://bitnami.com
|
||||
icon: https://bitnami.com/assets/stacks/mongodb/img/mongodb-stack-220x234.png
|
||||
keywords:
|
||||
- mongodb
|
||||
- database
|
||||
- nosql
|
||||
- cluster
|
||||
- replicaset
|
||||
- replication
|
||||
maintainers:
|
||||
- name: Broadcom, Inc. All Rights Reserved.
|
||||
url: https://github.com/bitnami/charts
|
||||
name: mongodb
|
||||
sources:
|
||||
- https://github.com/bitnami/charts/tree/main/bitnami/mongodb
|
||||
version: 16.3.1
|
||||
@@ -1,235 +0,0 @@
|
||||
# Bitnami Common Library Chart
|
||||
|
||||
A [Helm Library Chart](https://helm.sh/docs/topics/library_charts/#helm) for grouping common logic between Bitnami charts.
|
||||
|
||||
## TL;DR
|
||||
|
||||
```yaml
|
||||
dependencies:
|
||||
- name: common
|
||||
version: 2.x.x
|
||||
repository: oci://registry-1.docker.io/bitnamicharts
|
||||
```
|
||||
|
||||
```console
|
||||
helm dependency update
|
||||
```
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "common.names.fullname" . }}
|
||||
data:
|
||||
myvalue: "Hello World"
|
||||
```
|
||||
|
||||
Looking to use our applications in production? Try [VMware Tanzu Application Catalog](https://bitnami.com/enterprise), the commercial edition of the Bitnami catalog.
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart provides a common template helpers which can be used to develop new charts using [Helm](https://helm.sh) package manager.
|
||||
|
||||
Bitnami charts can be used with [Kubeapps](https://kubeapps.dev/) for deployment and management of Helm Charts in clusters.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.23+
|
||||
- Helm 3.8.0+
|
||||
|
||||
## Parameters
|
||||
|
||||
## Special input schemas
|
||||
|
||||
### ImageRoot
|
||||
|
||||
```yaml
|
||||
registry:
|
||||
type: string
|
||||
description: Docker registry where the image is located
|
||||
example: docker.io
|
||||
|
||||
repository:
|
||||
type: string
|
||||
description: Repository and image name
|
||||
example: bitnami/nginx
|
||||
|
||||
tag:
|
||||
type: string
|
||||
description: image tag
|
||||
example: 1.16.1-debian-10-r63
|
||||
|
||||
pullPolicy:
|
||||
type: string
|
||||
description: Specify a imagePullPolicy.'
|
||||
|
||||
pullSecrets:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: Optionally specify an array of imagePullSecrets (evaluated as templates).
|
||||
|
||||
debug:
|
||||
type: boolean
|
||||
description: Set to true if you would like to see extra information on logs
|
||||
example: false
|
||||
|
||||
## An instance would be:
|
||||
# registry: docker.io
|
||||
# repository: bitnami/nginx
|
||||
# tag: 1.16.1-debian-10-r63
|
||||
# pullPolicy: IfNotPresent
|
||||
# debug: false
|
||||
```
|
||||
|
||||
### Persistence
|
||||
|
||||
```yaml
|
||||
enabled:
|
||||
type: boolean
|
||||
description: Whether enable persistence.
|
||||
example: true
|
||||
|
||||
storageClass:
|
||||
type: string
|
||||
description: Ghost data Persistent Volume Storage Class, If set to "-", storageClassName: "" which disables dynamic provisioning.
|
||||
example: "-"
|
||||
|
||||
accessMode:
|
||||
type: string
|
||||
description: Access mode for the Persistent Volume Storage.
|
||||
example: ReadWriteOnce
|
||||
|
||||
size:
|
||||
type: string
|
||||
description: Size the Persistent Volume Storage.
|
||||
example: 8Gi
|
||||
|
||||
path:
|
||||
type: string
|
||||
description: Path to be persisted.
|
||||
example: /bitnami
|
||||
|
||||
## An instance would be:
|
||||
# enabled: true
|
||||
# storageClass: "-"
|
||||
# accessMode: ReadWriteOnce
|
||||
# size: 8Gi
|
||||
# path: /bitnami
|
||||
```
|
||||
|
||||
### ExistingSecret
|
||||
|
||||
```yaml
|
||||
name:
|
||||
type: string
|
||||
description: Name of the existing secret.
|
||||
example: mySecret
|
||||
keyMapping:
|
||||
description: Mapping between the expected key name and the name of the key in the existing secret.
|
||||
type: object
|
||||
|
||||
## An instance would be:
|
||||
# name: mySecret
|
||||
# keyMapping:
|
||||
# password: myPasswordKey
|
||||
```
|
||||
|
||||
#### Example of use
|
||||
|
||||
When we store sensitive data for a deployment in a secret, some times we want to give to users the possibility of using theirs existing secrets.
|
||||
|
||||
```yaml
|
||||
# templates/secret.yaml
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "common.names.fullname" . }}
|
||||
labels:
|
||||
app: {{ include "common.names.fullname" . }}
|
||||
type: Opaque
|
||||
data:
|
||||
password: {{ .Values.password | b64enc | quote }}
|
||||
|
||||
# templates/dpl.yaml
|
||||
---
|
||||
...
|
||||
env:
|
||||
- name: PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ include "common.secrets.name" (dict "existingSecret" .Values.existingSecret "context" $) }}
|
||||
key: {{ include "common.secrets.key" (dict "existingSecret" .Values.existingSecret "key" "password") }}
|
||||
...
|
||||
|
||||
# values.yaml
|
||||
---
|
||||
name: mySecret
|
||||
keyMapping:
|
||||
password: myPasswordKey
|
||||
```
|
||||
|
||||
### ValidateValue
|
||||
|
||||
#### NOTES.txt
|
||||
|
||||
```console
|
||||
{{- $validateValueConf00 := (dict "valueKey" "path.to.value00" "secret" "secretName" "field" "password-00") -}}
|
||||
{{- $validateValueConf01 := (dict "valueKey" "path.to.value01" "secret" "secretName" "field" "password-01") -}}
|
||||
|
||||
{{ include "common.validations.values.multiple.empty" (dict "required" (list $validateValueConf00 $validateValueConf01) "context" $) }}
|
||||
```
|
||||
|
||||
If we force those values to be empty we will see some alerts
|
||||
|
||||
```console
|
||||
helm install test mychart --set path.to.value00="",path.to.value01=""
|
||||
'path.to.value00' must not be empty, please add '--set path.to.value00=$PASSWORD_00' to the command. To get the current value:
|
||||
|
||||
export PASSWORD_00=$(kubectl get secret --namespace default secretName -o jsonpath="{.data.password-00}" | base64 -d)
|
||||
|
||||
'path.to.value01' must not be empty, please add '--set path.to.value01=$PASSWORD_01' to the command. To get the current value:
|
||||
|
||||
export PASSWORD_01=$(kubectl get secret --namespace default secretName -o jsonpath="{.data.password-01}" | base64 -d)
|
||||
```
|
||||
|
||||
## Upgrading
|
||||
|
||||
### To 1.0.0
|
||||
|
||||
[On November 13, 2020, Helm v2 support was formally finished](https://github.com/helm/charts#status-of-the-project), this major version is the result of the required changes applied to the Helm Chart to be able to incorporate the different features added in Helm v3 and to be consistent with the Helm project itself regarding the Helm v2 EOL.
|
||||
|
||||
#### What changes were introduced in this major version?
|
||||
|
||||
- Previous versions of this Helm Chart use `apiVersion: v1` (installable by both Helm 2 and 3), this Helm Chart was updated to `apiVersion: v2` (installable by Helm 3 only). [Here](https://helm.sh/docs/topics/charts/#the-apiversion-field) you can find more information about the `apiVersion` field.
|
||||
- Use `type: library`. [Here](https://v3.helm.sh/docs/faq/#library-chart-support) you can find more information.
|
||||
- The different fields present in the *Chart.yaml* file has been ordered alphabetically in a homogeneous way for all the Bitnami Helm Charts
|
||||
|
||||
#### Considerations when upgrading to this version
|
||||
|
||||
- If you want to upgrade to this version from a previous one installed with Helm v3, you shouldn't face any issues
|
||||
- If you want to upgrade to this version using Helm v2, this scenario is not supported as this version doesn't support Helm v2 anymore
|
||||
- If you installed the previous version with Helm v2 and wants to upgrade to this version with Helm v3, please refer to the [official Helm documentation](https://helm.sh/docs/topics/v2_v3_migration/#migration-use-cases) about migrating from Helm v2 to v3
|
||||
|
||||
#### Useful links
|
||||
|
||||
- <https://techdocs.broadcom.com/us/en/vmware-tanzu/application-catalog/tanzu-application-catalog/services/tac-doc/apps-tutorials-resolve-helm2-helm3-post-migration-issues-index.html>
|
||||
- <https://helm.sh/docs/topics/v2_v3_migration/>
|
||||
- <https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/>
|
||||
|
||||
## License
|
||||
|
||||
Copyright © 2024 Broadcom. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
<http://www.apache.org/licenses/LICENSE-2.0>
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -1,28 +0,0 @@
|
||||
{{/*
|
||||
Copyright Broadcom, Inc. All Rights Reserved.
|
||||
SPDX-License-Identifier: APACHE-2.0
|
||||
*/}}
|
||||
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Through error when upgrading using empty passwords values that must not be empty.
|
||||
|
||||
Usage:
|
||||
{{- $validationError00 := include "common.validations.values.single.empty" (dict "valueKey" "path.to.password00" "secret" "secretName" "field" "password-00") -}}
|
||||
{{- $validationError01 := include "common.validations.values.single.empty" (dict "valueKey" "path.to.password01" "secret" "secretName" "field" "password-01") -}}
|
||||
{{ include "common.errors.upgrade.passwords.empty" (dict "validationErrors" (list $validationError00 $validationError01) "context" $) }}
|
||||
|
||||
Required password params:
|
||||
- validationErrors - String - Required. List of validation strings to be return, if it is empty it won't throw error.
|
||||
- context - Context - Required. Parent context.
|
||||
*/}}
|
||||
{{- define "common.errors.upgrade.passwords.empty" -}}
|
||||
{{- $validationErrors := join "" .validationErrors -}}
|
||||
{{- if and $validationErrors .context.Release.IsUpgrade -}}
|
||||
{{- $errorString := "\nPASSWORDS ERROR: You must provide your current passwords when upgrading the release." -}}
|
||||
{{- $errorString = print $errorString "\n Note that even after reinstallation, old credentials may be needed as they may be kept in persistent volume claims." -}}
|
||||
{{- $errorString = print $errorString "\n Further information can be obtained at https://docs.bitnami.com/general/how-to/troubleshoot-helm-chart-issues/#credential-errors-while-upgrading-chart-releases" -}}
|
||||
{{- $errorString = print $errorString "\n%s" -}}
|
||||
{{- printf $errorString $validationErrors | fail -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
@@ -1,265 +0,0 @@
|
||||
env: dev # For storage class provisioning
|
||||
host: localhost # For reverse proxy rule
|
||||
|
||||
mongo-express:
|
||||
enabled: true
|
||||
mongodbServer: dev-mongodb.dev
|
||||
mongodbPort: 27017
|
||||
mongodbEnableAdmin: true
|
||||
mongodbAdminUsername: root
|
||||
mongodbAdminPassword: rootpwd
|
||||
siteBaseUrl: /mongoexpress
|
||||
basicAuthUsername: test
|
||||
basicAuthPassword: testme
|
||||
mongodb:
|
||||
enabled: false
|
||||
|
||||
mongodb:
|
||||
enabled: true
|
||||
global:
|
||||
defaultStorageClass: kind-sc
|
||||
storageClass: kind-sc
|
||||
architecture: standalone
|
||||
useStatefulSet: false
|
||||
auth:
|
||||
enabled: true
|
||||
rootUser: root
|
||||
rootPassword: rootpwd
|
||||
databases: ["DC_myDC"]
|
||||
usernames: ["opencloud"]
|
||||
passwords: ["opencloud"]
|
||||
resourcesPreset: "small"
|
||||
replicaCount: 1
|
||||
persistence:
|
||||
enabled: true
|
||||
storageClass: kind-sc
|
||||
existingClaim: mongo-pvc
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
size: 100Mi
|
||||
persistentVolumeClaimRetentionPolicy:
|
||||
enabled: true
|
||||
whenDeleted: Retain
|
||||
whenScaled: Retain
|
||||
arbiter:
|
||||
enabled: false
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
|
||||
nats:
|
||||
enabled: true
|
||||
jetstream:
|
||||
enabled: true
|
||||
fileStore:
|
||||
size: 20Mi
|
||||
storageClassName: kind-sc
|
||||
|
||||
|
||||
openldap:
|
||||
enabled: true
|
||||
test:
|
||||
enabled: false
|
||||
ltb-passwd:
|
||||
enabled: false
|
||||
replicaCount: 1
|
||||
image:
|
||||
repository: osixia/openldap
|
||||
tag: 1.5.0
|
||||
tls:
|
||||
enabled: false
|
||||
env:
|
||||
LDAP_ORGANISATION: "Example opencloud"
|
||||
LDAP_DOMAIN: "example.com"
|
||||
LDAP_BACKEND: "mdb"
|
||||
LDAP_TLS: "false"
|
||||
LDAP_TLS_ENFORCE: "false"
|
||||
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
|
||||
adminPassword: "admin@password"
|
||||
configPassword: "config@password"
|
||||
phpldapadmin:
|
||||
enabled: false
|
||||
persistence:
|
||||
enabled: true
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Mi
|
||||
storageClass: kind-sc
|
||||
replication:
|
||||
enabled: false
|
||||
customLdifFiles:
|
||||
|
||||
01-schema.ldif: |-
|
||||
dn: ou=groups,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: groups
|
||||
|
||||
dn: ou=users,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: users
|
||||
|
||||
dn: cn=lastGID,dc=example,dc=com
|
||||
objectClass: device
|
||||
objectClass: top
|
||||
description: Records the last GID used to create a Posix group. This prevents the re-use of a GID from a deleted group.
|
||||
cn: lastGID
|
||||
serialNumber: 2001
|
||||
|
||||
dn: cn=lastUID,dc=example,dc=com
|
||||
objectClass: device
|
||||
objectClass: top
|
||||
serialNumber: 2001
|
||||
description: Records the last UID used to create a Posix account. This prevents the re-use of a UID from a deleted account.
|
||||
cn: lastUID
|
||||
|
||||
dn: cn=everybody,ou=groups,dc=example,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: everybody
|
||||
memberUid: admin
|
||||
gidNumber: 2003
|
||||
|
||||
02-ldapadmin.ldif : |-
|
||||
dn: cn=ldapadmin,ou=groups,dc=example,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: ldapadmin
|
||||
memberUid: ldapadmin
|
||||
gidNumber: 2001
|
||||
|
||||
dn: uid=ldapadmin,ou=users,dc=example,dc=com
|
||||
givenName: ldap
|
||||
sn: admin
|
||||
uid: ldapadmin
|
||||
cn: ldapadmin
|
||||
mail: ldapadmin@example.com
|
||||
objectClass: person
|
||||
objectClass: inetOrgPerson
|
||||
objectClass: posixAccount
|
||||
userPassword: ldapadmin
|
||||
uidNumber: 2001
|
||||
gidNumber: 2001
|
||||
loginShell: /bin/bash
|
||||
homeDirectory: /home/ldapadmin
|
||||
|
||||
03-opencloudadmin.ldif : |-
|
||||
dn: cn=admin,ou=groups,dc=example,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: admin
|
||||
memberUid: admin
|
||||
gidNumber: 2002
|
||||
|
||||
dn: uid=admin,ou=users,dc=example,dc=com
|
||||
givenName: John
|
||||
sn: Doe
|
||||
uid: admin
|
||||
mail: john.doe@example.com
|
||||
cn: JohnDoe
|
||||
objectClass: person
|
||||
objectClass: inetOrgPerson
|
||||
objectClass: posixAccount
|
||||
userPassword:: e0NSWVBUfSQ2JDdTZ0daU1FXJGw1ZWRTTHVDaDV6a0NvUlllZzFLd3MwUHRKQ
|
||||
jJQL09CQWdoc0RkbWhzTXJPcEpCbzR3b01yNWJQcjlubi8udWdzM25LcHlKQmt2eHVJWFM0eUQ1
|
||||
cnox
|
||||
uidNumber: 2002
|
||||
gidNumber: 2002
|
||||
loginShell: /bin/bash
|
||||
homeDirectory: /home/admin
|
||||
|
||||
# ldap user manager configuration
|
||||
ldapUserManager:
|
||||
enabled: true
|
||||
env:
|
||||
SERVER_HOSTNAME: "users.example.com"
|
||||
LDAP_BASE_DN: "dc=example,dc=com"
|
||||
LDAP_REQUIRE_STARTTLS: "false"
|
||||
LDAP_ADMINS_GROUP: "ldapadmin"
|
||||
LDAP_ADMIN_BIND_DN: "cn=admin,dc=example,dc=com"
|
||||
LDAP_ADMIN_BIND_PWD: "admin@password"
|
||||
LDAP_IGNORE_CERT_ERRORS: "true"
|
||||
EMAIL_DOMAIN: ""
|
||||
NO_HTTPS: "true"
|
||||
SERVER_PATH: "/users"
|
||||
ORGANISATION_NAME: "Example"
|
||||
LDAP_USER_OU: "users"
|
||||
LDAP_GROUP_OU: "groups"
|
||||
ACCEPT_WEAK_PASSWORDS: "true"
|
||||
resources:
|
||||
limits:
|
||||
cpu: "128m"
|
||||
memory: "256Mi"
|
||||
requests:
|
||||
cpu: "128m"
|
||||
memory: "256Mi"
|
||||
|
||||
traefik:
|
||||
enabled: true
|
||||
service:
|
||||
type: NodePort
|
||||
ingressRoute:
|
||||
dashboard:
|
||||
enabled: true
|
||||
matchRule: Host(`localhost`) && PathPrefix(`/api`) || PathPrefix(`/dashboard`)
|
||||
entryPoints: [web]
|
||||
ports:
|
||||
web:
|
||||
nodePort: 30950
|
||||
|
||||
hydra:
|
||||
enabled: true
|
||||
maester:
|
||||
enabled: true
|
||||
hydra:
|
||||
dev: true
|
||||
config:
|
||||
dsn: memory
|
||||
urls:
|
||||
login: http://localhost/authentication/login
|
||||
consent: http://localhost/consent/consent
|
||||
logout: http://localhost/authentication/logout
|
||||
self:
|
||||
issuer: http://localhost/idp
|
||||
|
||||
keto:
|
||||
enabled: true
|
||||
keto:
|
||||
config:
|
||||
serve:
|
||||
read:
|
||||
port: 4466
|
||||
write:
|
||||
port: 4467
|
||||
metrics:
|
||||
port: 4468
|
||||
namespaces:
|
||||
- id: 0
|
||||
name: open-cloud
|
||||
dsn: memory
|
||||
|
||||
ocAuth:
|
||||
enabled: true
|
||||
image: oc/oc-auth:0.0.1
|
||||
authType: hydra
|
||||
keto:
|
||||
adminRole: admin
|
||||
hydra:
|
||||
openCloudOauth2ClientSecretName: oc-auth-got-secret
|
||||
ldap:
|
||||
bindDn: "cn=admin,dc=example,dc=com"
|
||||
binPwd: "admin@password"
|
||||
baseDn: "dc=example,dc=com"
|
||||
roleBaseDn: "ou=AppRoles,dc=example,dc=com"
|
||||
resources:
|
||||
limits:
|
||||
cpu: "128m"
|
||||
memory: "128Mi"
|
||||
requests:
|
||||
cpu: "128m"
|
||||
memory: "256Mi"
|
||||
|
||||
loki:
|
||||
enabled: false
|
||||
|
||||
grafana:
|
||||
enabled: false
|
||||
@@ -1,18 +0,0 @@
|
||||
{{- if index .Values "mongo-express" "enabled" }}
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: hydra-ingress
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- kind: Rule
|
||||
match: Host(`{{ .Values.host }}`) && PathPrefix(`/auth`)
|
||||
priority: 10
|
||||
services:
|
||||
- kind: Service
|
||||
name: {{ .Release.Name }}-mongo-express
|
||||
passHostHeader: true
|
||||
port: 8081
|
||||
{{- end }}
|
||||
@@ -1,20 +0,0 @@
|
||||
{{- if index .Values.ocAuth.enabled }}
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: oc-auth-ingress
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- kind: Rule
|
||||
match: Host(`{{ .Values.host }}`) && PathPrefix(`/auth`)
|
||||
priority: 10
|
||||
services:
|
||||
- kind: Service
|
||||
name: oc-auth-svc
|
||||
passHostHeader: true
|
||||
port: 8094
|
||||
middlewares:
|
||||
- name: forwardauth
|
||||
{{- end }}
|
||||
@@ -1,17 +0,0 @@
|
||||
{{- if index .Values.ocAuth.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: oc-auth-svc
|
||||
labels:
|
||||
app: oc-auth-svc
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8094
|
||||
protocol: TCP
|
||||
targetPort: 8080
|
||||
selector:
|
||||
app: oc-auth
|
||||
type: ClusterIP
|
||||
{{- end }}
|
||||
@@ -1,25 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: opencloud-config
|
||||
data:
|
||||
OCAUTH_ADMIN_ROLE: "{{ .Values.ocAuth.keto.adminRole }}"
|
||||
OCAUTH_PUBLIC_KEY_PATH: "/keys/public/public.pem"
|
||||
OCAUTH_PRIVATE_KEY_PATH: "/keys/private/private.pem"
|
||||
OCAUTH_CLIENT_SECRET: "{{ .Values.ocAuth.hydra.openCloudOauth2ClientSecretName }}"
|
||||
OCAUTH_AUTH: "{{ .Values.ocAuth.authType }}"
|
||||
OCAUTH_AUTH_CONNECTOR_HOST: "{{ .Release.Name }}-hydra-admin.{{ .Release.Namespace }}"
|
||||
OCAUTH_AUTH_CONNECTOR_PORT: "4444"
|
||||
OCAUTH_AUTH_CONNECTOR_ADMIN_PORT: "4445"
|
||||
OCAUTH_PERMISSION_CONNECTOR_HOST: "{{ .Release.Name }}-keto-write.{{ .Release.Namespace }}"
|
||||
OCAUTH_PERMISSION_CONNECTOR_PORT: "80"
|
||||
OCAUTH_PERMISSION_CONNECTOR_ADMIN_PORT: "80"
|
||||
OCAUTH_LDAP_ENDPOINTS: "{{ .Release.Name }}-openldap.{{ .Release.Namespace }}.svc.cluster.local:389"
|
||||
OCAUTH_LDAP_BINDDN: "{{ index .Values.ocAuth.ldap.bindDn }}"
|
||||
OCAUTH_LDAP_BINDPW: "{{ index .Values.ocAuth.ldap.binPwd }}"
|
||||
OCAUTH_LDAP_BASEDN: "{{ index .Values.ocAuth.ldap.baseDn }}"
|
||||
OCAUTH_LDAP_ROLE_BASEDN: "{{ index .Values.ocAuth.ldap.roleBaseDn }}"
|
||||
OCAUTH_MONGO_URL: "mongodb://{{ index .Values.mongodb.auth.usernames 0 }}:{{ index .Values.mongodb.auth.passwords 0 }}@{{ .Release.Name }}-mongodb.{{ .Release.Namespace }}:27017/{{ index .Values.mongodb.auth.databases 0 }}"
|
||||
OCAUTH_MONGO_DATABASE: "{{ index .Values.mongodb.auth.databases 0 }}"
|
||||
OCAUTH_NATS_URL: "nats://dev-nats.{{ .Release.Namespace }}.svc.cluster.local:4222"
|
||||
OCAUTH_LOKI_URL: "{{ .Values.SERVER_PATH }}"
|
||||
@@ -1,8 +0,0 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: forward-auth
|
||||
spec:
|
||||
forwardAuth:
|
||||
address: "http://oc-auth-svc.{{ .Release.Namespace }}:8080/oc/forward"
|
||||
trustForwardHeader: true
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
RELEASE_NAME=dev
|
||||
RELEASE_NAMESPACE=dev
|
||||
|
||||
helm uninstall ${RELEASE_NAME} -n ${RELEASE_NAMESPACE}
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/bin/bash
|
||||
RELEASE_NAME=dev
|
||||
RELEASE_NAMESPACE=dev
|
||||
|
||||
helm upgrade ${RELEASE_NAME} opencloud -n ${RELEASE_NAMESPACE} --create-namespace -f opencloud/dev-values.yaml
|
||||
26
utils/assets/.helmignore
Normal file
26
utils/assets/.helmignore
Normal file
@@ -0,0 +1,26 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
|
||||
#custom
|
||||
templates/registry/dockerconfigjson
|
||||
@@ -5,7 +5,6 @@ type: application
|
||||
version: 0.0.1
|
||||
appVersion: "0.0.1"
|
||||
|
||||
# TODO: grafana, loki
|
||||
dependencies:
|
||||
- name: openldap
|
||||
repository: https://jp-gouin.github.io/helm-openldap/
|
||||
@@ -28,7 +27,7 @@ dependencies:
|
||||
repository: "https://cowboysysop.github.io/charts/"
|
||||
condition: mongo-express.enabled
|
||||
- name: hydra
|
||||
version: "0.50.2"
|
||||
version: "0.50.6"
|
||||
repository: "https://k8s.ory.sh/helm/charts"
|
||||
condition: hydra.enabled
|
||||
- name: keto
|
||||
@@ -43,3 +42,15 @@ dependencies:
|
||||
version: "8.6.4"
|
||||
repository: "https://grafana.github.io/helm-charts"
|
||||
condition: grafana.enabled
|
||||
- name: argo-workflows
|
||||
version: "0.45.4"
|
||||
repository: "https://argoproj.github.io/argo-helm"
|
||||
condition: argo-workflows.enabled
|
||||
- name: docker-registry-ui
|
||||
version: 1.1.3
|
||||
repository: "https://helm.joxit.dev/"
|
||||
condition: docker-registry-ui.enabled
|
||||
- name: prometheus
|
||||
version: "27.45.0"
|
||||
repository: "https://prometheus-community.github.io/helm-charts"
|
||||
condition: prometheus.enabled
|
||||
129
utils/assets/README.md
Normal file
129
utils/assets/README.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# HOW TO MAKE YOUR PROPER VALUES.YAML
|
||||
|
||||
Use command :
|
||||
```
|
||||
oc-k8s create values [release] [env_file (optionnal)]
|
||||
```
|
||||
or
|
||||
```
|
||||
./oc-k8s.sh create values [release] [env_file (optionnal)]
|
||||
```
|
||||
|
||||
Map in a env file, any Variable you wish to override and give the path.
|
||||
|
||||
## ENV VARIABLE
|
||||
|
||||
| Variable | Default | Purpose / Explanation |
|
||||
| -------------- | ---------------------- | --------------------------------------------------------------------------------- |
|
||||
| `HOST` | `exemple.com` | Domain for reverse proxy rules (Traefik). |
|
||||
| `REGISTRY_HOST` | `registry.exemple.com` | Docker registry URL for reverse proxy and pull secrets. |
|
||||
|
||||
## MONGO VARIABLE
|
||||
|
||||
| Variable | Default | Purpose / Explanation |
|
||||
| ------------------- | ----------- | ------------------------------------------ |
|
||||
| `OC_MONGO_ENABLED` | `true` | Enable/disable MongoDB deployment. |
|
||||
| `OC_MONGO_ADMIN` | `admin` | Root username for MongoDB. |
|
||||
| `OC_MONGO_PWD` | `admin` | Root password. |
|
||||
| `OC_MONGO_DATABASE` | `opencloud` | Default database to create. |
|
||||
| `OC_MONGO_SIZE` | `5000Mi` | Persistent storage size for MongoDB. |
|
||||
|
||||
## MONGO EXPRESS VARIABLE
|
||||
|
||||
| Variable | Default | Purpose / Explanation |
|
||||
| ----------------------------------------- | -------------------------------------------------------- | ------------------------------------------- |
|
||||
| `OC_MONGOEXPRESS_ENABLED` | `true` | Enable mongo-express UI. |
|
||||
| `OC_MONGOEXPRESS_ADMIN` | `${OC_MONGO_ADMIN:-admin}` | Admin username to connect to MongoDB. |
|
||||
| `OC_MONGOEXPRESS_PWD` | `${OC_MONGO_PWD:-admin}` | Admin password. |
|
||||
|
||||
## NATS VARIABLE
|
||||
|
||||
| Variable | Default | Explanation |
|
||||
| ----------------- | ------- | -------------------------------------- |
|
||||
| `OC_NATS_ENABLED` | `true` | Deploy NATS cluster. |
|
||||
| `OC_NATS_SIZE` | `20Mi` | Storage size for JetStream file store. |
|
||||
|
||||
## OpenLDAP VARIABLE
|
||||
|
||||
| Variable | Default | Explanation |
|
||||
| --------------------------- | ---------------------------- | -------------------------------------------------------- |
|
||||
| `OC_LDAP_ENABLED` | `true` | Deploy OpenLDAP server. |
|
||||
| `OC_LDAP_IMAGE` | `osixia/openldap` | Docker image for OpenLDAP. |
|
||||
| `OC_LDAP_ORGANISATION` | `Opencloud` | LDAP organization name. |
|
||||
| `OC_LDAP_DOMAIN` | `opencloud.com` | LDAP domain. |
|
||||
| `OC_LDAP_TLS` | `false` | Enable TLS for LDAP. |
|
||||
| `OC_LDAP_ADMIN_PWD` | `admin` | LDAP admin password. |
|
||||
| `OC_LDAP_CONFIG_PWD` | `config` | Password for configuration account. |
|
||||
| `OC_LDAP_EXTERNAL` | `false` | Connect to external LDAP instead of internal deployment. |
|
||||
| `OC_LDAP_EXTERNAL_ENDPOINT` | (none) | LDAP server URL. |
|
||||
| `OC_LDAP_EXTERNAL_DN` | `cn=admin,dc=example,dc=com` | Bind DN for external LDAP. |
|
||||
| `OC_LDAP_EXTERNAL_PWD` | `admin` | Bind password for external LDAP. |
|
||||
|
||||
## Prometheus VARIABLE
|
||||
|
||||
| Variable | Default | Explanation |
|
||||
| ------------------------------- | ------- | ------------------------- |
|
||||
| `OC_PROMETHEUS_ENABLED` | `true` | Enable Prometheus server. |
|
||||
| `OC_PROMETHEUS_SIZE` | `5Gi` | Persistent volume size. |
|
||||
| `OC_PROMETHEUS_LIMITS_CPU` | `500m` | CPU limit. |
|
||||
| `OC_PROMETHEUS_LIMITS_MEMORY` | `512Mi` | Memory limit. |
|
||||
| `OC_PROMETHEUS_REQUESTS_CPU` | `128m` | CPU request. |
|
||||
| `OC_PROMETHEUS_REQUESTS_MEMORY` | `256Mi` | Memory request. |
|
||||
|
||||
## Grafana VARIABLE
|
||||
|
||||
| VARIABLE | DEFAULT | DESCRIPTION |
|
||||
| -------------------------------------- | ----------- | ------------------------------------------------------------------------------------ |
|
||||
| `OC_GRAFANA_ENABLED` | `true` | Enable or disable Grafana deployment. |
|
||||
| `OC_GRAFANA_ADMIN_USER` | `admin` | Username for the Grafana admin account. |
|
||||
| `OC_GRAFANA_ADMIN_PWD` | `admin` | Password for the Grafana admin account. |
|
||||
| `OC_GRAFANA_SIZE` | `1Gi` | Size of the persistent volume for Grafana. |
|
||||
|
||||
## Traefik VARIABLE
|
||||
|
||||
| Variable | Default | Explanation |
|
||||
| ------------------------------- | ------- | ------------------------- |
|
||||
| `OC_TRAEFIK_ENABLED` | `true` | Enable Traefik server. |
|
||||
|
||||
## Hydra VARIABLE
|
||||
|
||||
| Variable | Default | Explanation |
|
||||
| ------------------ | ------------------------------------------------------------------------ | ------------------------------------------- |
|
||||
| `OC_HYDRA_ENABLED` | `true` | Deploy Hydra (OAuth2). |
|
||||
|
||||
## Keto VARIABLE
|
||||
|
||||
| VARIABLE | DEFAULT | DESCRIPTION |
|
||||
| ---------------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `OC_KETO_ENABLED` | `true` | Enable or disable Keto deployment. |
|
||||
|
||||
## Loki VARIABLE
|
||||
|
||||
| VARIABLE | DEFAULT | DESCRIPTION |
|
||||
| ---------------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `OC_LOKI_ENABLED` | `true` | Enable or disable Loki deployment. |
|
||||
| `OC_LOKI_SIZE` | `1Gi` | Resource allowed. |
|
||||
|
||||
## Minio VARIABLE
|
||||
|
||||
| VARIABLE | DEFAULT | DESCRIPTION |
|
||||
| ---------------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `OC_MINIO_ENABLED` | `true` | Enable or disable Minio deployment. |
|
||||
|
||||
## Argo VARIABLE
|
||||
|
||||
| VARIABLE | DEFAULT | DESCRIPTION |
|
||||
| ------------------------------------------ | --------------- | ---------------------------------------------- |
|
||||
| `OC_ARGO_ENABLED` | `false` | Enable or disable Argo Workflows deployment. |
|
||||
|
||||
## OC API VARIABLE
|
||||
|
||||
| Variable | Default | Explanation |
|
||||
| ------------------------------------ | ------------ | --------------------------------- |
|
||||
| `OC_<APP>_ENABLED` | true | Deploy the service. |
|
||||
| `OC_<APP>_IMAGE` | registry URL | Docker image. |
|
||||
| `OC_<APP>_LIMITS_CPU/MEMORY` | 128m / 256Mi | Resource limits. |
|
||||
| `OC_<APP>_REQUESTS_CPU/MEMORY` | 128m / 256Mi | Resource requests. |
|
||||
| `OC_<APP>_REPLICAS_ENABLED` | true | Enable Horizontal Pod Autoscaler. |
|
||||
| `OC_<APP>_REPLICAS_MAX` | 5 | Max replicas. |
|
||||
| `OC_<APP>_REPLICAS_USAGE` | 80 | HPA target CPU usage (%). |
|
||||
23
utils/assets/charts/argo-workflows/.helmignore
Normal file
23
utils/assets/charts/argo-workflows/.helmignore
Normal file
@@ -0,0 +1,23 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
ci/
|
||||
*.gotmpl
|
||||
20
utils/assets/charts/argo-workflows/Chart.yaml
Normal file
20
utils/assets/charts/argo-workflows/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
annotations:
|
||||
artifacthub.io/changes: |
|
||||
- kind: added
|
||||
description: Support configuring workflow events in the controller
|
||||
artifacthub.io/signKey: |
|
||||
fingerprint: 2B8F22F57260EFA67BE1C5824B11F800CD9D2252
|
||||
url: https://argoproj.github.io/argo-helm/pgp_keys.asc
|
||||
apiVersion: v2
|
||||
appVersion: v3.6.2
|
||||
description: A Helm chart for Argo Workflows
|
||||
home: https://github.com/argoproj/argo-helm
|
||||
icon: https://argo-workflows.readthedocs.io/en/stable/assets/logo.png
|
||||
maintainers:
|
||||
- name: argoproj
|
||||
url: https://argoproj.github.io/
|
||||
name: argo-workflows
|
||||
sources:
|
||||
- https://github.com/argoproj/argo-workflows
|
||||
type: application
|
||||
version: 0.45.4
|
||||
410
utils/assets/charts/argo-workflows/README.md
Normal file
410
utils/assets/charts/argo-workflows/README.md
Normal file
@@ -0,0 +1,410 @@
|
||||
# Argo Workflows Chart
|
||||
|
||||
This is a **community maintained** chart. It is used to set up argo and its needed dependencies through one command. This is used in conjunction with [helm](https://github.com/kubernetes/helm).
|
||||
|
||||
If you want your deployment of this helm chart to most closely match the [argo CLI](https://github.com/argoproj/argo-workflows), you should deploy it in the `kube-system` namespace.
|
||||
|
||||
## Pre-Requisites
|
||||
|
||||
### Custom resource definitions
|
||||
|
||||
Some users would prefer to install the CRDs _outside_ of the chart. You can disable the CRD installation of this chart by using `--set crds.install=false` when installing the chart.
|
||||
|
||||
Helm cannot upgrade custom resource definitions in the `<chart>/crds` folder [by design](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations). Starting with 3.4.0 (chart version 0.19.0), the CRDs have been moved to `<chart>/templates` to address this design decision.
|
||||
|
||||
If you are using Argo Workflows chart version prior to 3.4.0 (chart version 0.19.0) or have elected to manage the Argo Workflows CRDs outside of the chart, please use `kubectl` to upgrade CRDs manually from [templates/crds](templates/crds/) folder or via the manifests from the upstream project repo:
|
||||
|
||||
```bash
|
||||
kubectl apply -k "https://github.com/argoproj/argo-workflows/manifests/base/crds/full?ref=<appVersion>"
|
||||
|
||||
# Eg. version v3.3.9
|
||||
kubectl apply -k "https://github.com/argoproj/argo-workflows/manifests/base/crds/full?ref=v3.3.9"
|
||||
```
|
||||
|
||||
### ServiceAccount for Workflow Spec
|
||||
In order for each Workflow run, you create ServiceAccount via `values.yaml` like below.
|
||||
|
||||
```yaml
|
||||
workflow:
|
||||
serviceAccount:
|
||||
create: true
|
||||
name: "argo-workflow"
|
||||
rbac:
|
||||
create: true
|
||||
controller:
|
||||
workflowNamespaces:
|
||||
- default
|
||||
- foo
|
||||
- bar
|
||||
```
|
||||
|
||||
Set ServiceAccount on Workflow.
|
||||
|
||||
```yaml
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Workflow
|
||||
metadata:
|
||||
generateName: hello-world-
|
||||
spec:
|
||||
entrypoint: whalesay
|
||||
serviceAccountName: argo-workflow # Set ServiceAccount
|
||||
templates:
|
||||
- name: whalesay
|
||||
container:
|
||||
image: docker/whalesay
|
||||
command: [ cowsay ]
|
||||
args: [ "hello world" ]
|
||||
```
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
$ helm repo add argo https://argoproj.github.io/argo-helm
|
||||
"argo" has been added to your repositories
|
||||
|
||||
$ helm install my-release argo/argo-workflows
|
||||
NAME: my-release
|
||||
...
|
||||
```
|
||||
|
||||
## Changelog
|
||||
|
||||
For full list of changes, please check ArtifactHub [changelog].
|
||||
|
||||
## Usage Notes
|
||||
|
||||
### High Availability
|
||||
|
||||
This chart installs the non-HA version of Argo Workflows by default. If you want to run in HA mode, you can use [these example values](ci/ha-values.yaml) as a starting point.
|
||||
Please see the upstream [Operator Manual's High Availability page](https://argo-workflows.readthedocs.io/en/stable/high-availability/) to understand how to scale Argo Workflows in depth.
|
||||
|
||||
### Workflow controller
|
||||
|
||||
This chart defaults to setting the `controller.instanceID.enabled` to `false` now, which means the deployed controller will act upon any workflow deployed to the cluster. If you would like to limit the behavior and deploy multiple workflow controllers, please use the `controller.instanceID.enabled` attribute along with one of its configuration options to set the `instanceID` of the workflow controller to be properly scoped for your needs.
|
||||
|
||||
### Argo Workflows server authentication
|
||||
|
||||
Argo Workflows server provides some choices for authentication mechanism and you can configure `.Values.server.authModes`. By default, authentication mode is `[server]`, for local development purposes or cases where your gateway authentication is covered by some other means.
|
||||
Please refer to [Argo Server Auth Mode] for more details.
|
||||
|
||||
Argo Workflows server also supports SSO and you can enable it to configure `.Values.server.sso` and `.Values.server.authModes`. In order to manage access levels, you can optionally add RBAC to SSO. Please refer to [SSO RBAC] for more details.
|
||||
|
||||
## Values
|
||||
|
||||
The `values.yaml` contains items used to tweak a deployment of this chart.
|
||||
Fields to note:
|
||||
|
||||
- `controller.instanceID.enabled`: If set to true, the Argo Controller will **ONLY** monitor Workflow submissions with a `--instanceid` attribute
|
||||
- `controller.instanceID.useReleaseName`: If set to true then chart set controller instance id to release name
|
||||
- `controller.instanceID.explicitID`: Allows customization of an instance id for the workflow controller to monitor
|
||||
- `singleNamespace`: When true, restricts the workflow controller to operate
|
||||
in just the single namespace (that one of the Helm release).
|
||||
- `controller.workflowNamespaces`: This is a list of namespaces where the
|
||||
workflow controller will manage workflows. Only valid when `singleNamespace`
|
||||
is false.
|
||||
|
||||
### General parameters
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| apiVersionOverrides.autoscaling | string | `""` | String to override apiVersion of autoscaling rendered by this helm chart |
|
||||
| apiVersionOverrides.cloudgoogle | string | `""` | String to override apiVersion of GKE resources rendered by this helm chart |
|
||||
| apiVersionOverrides.monitoring | string | `""` | String to override apiVersion of monitoring CRDs (ServiceMonitor) rendered by this helm chart |
|
||||
| commonLabels | object | `{}` | Labels to set on all resources |
|
||||
| crds.annotations | object | `{}` | Annotations to be added to all CRDs |
|
||||
| crds.install | bool | `true` | Install and upgrade CRDs |
|
||||
| crds.keep | bool | `true` | Keep CRDs on chart uninstall |
|
||||
| createAggregateRoles | bool | `true` | Create clusterroles that extend existing clusterroles to interact with argo-cd crds |
|
||||
| emissary.images | list | `[]` | The command/args for each image on workflow, needed when the command is not specified and the emissary executor is used. |
|
||||
| extraObjects | list | `[]` | Array of extra K8s manifests to deploy |
|
||||
| fullnameOverride | string | `nil` | String to fully override "argo-workflows.fullname" template |
|
||||
| images.pullPolicy | string | `"Always"` | imagePullPolicy to apply to all containers |
|
||||
| images.pullSecrets | list | `[]` | Secrets with credentials to pull images from a private registry |
|
||||
| images.tag | string | `""` | Common tag for Argo Workflows images. Defaults to `.Chart.AppVersion`. |
|
||||
| kubeVersionOverride | string | `""` | Override the Kubernetes version, which is used to evaluate certain manifests |
|
||||
| nameOverride | string | `nil` | String to partially override "argo-workflows.fullname" template |
|
||||
| namespaceOverride | string | `.Release.Namespace` | Override the namespace |
|
||||
| singleNamespace | bool | `false` | Restrict Argo to operate only in a single namespace (the namespace of the Helm release) by apply Roles and RoleBindings instead of the Cluster equivalents, and start workflow-controller with the --namespaced flag. Use it in clusters with strict access policy. |
|
||||
|
||||
### Workflow
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| workflow.namespace | string | `nil` | Deprecated; use controller.workflowNamespaces instead. |
|
||||
| workflow.rbac.agentPermissions | bool | `false` | Allows permissions for the Argo Agent. Only required if using http/plugin templates |
|
||||
| workflow.rbac.artifactGC | bool | `false` | Allows permissions for the Argo Artifact GC pod. Only required if using artifact gc |
|
||||
| workflow.rbac.create | bool | `true` | Adds Role and RoleBinding for the above specified service account to be able to run workflows. A Role and Rolebinding pair is also created for each namespace in controller.workflowNamespaces (see below) |
|
||||
| workflow.rbac.serviceAccounts | list | `[]` | Extra service accounts to be added to the RoleBinding |
|
||||
| workflow.serviceAccount.annotations | object | `{}` | Annotations applied to created service account |
|
||||
| workflow.serviceAccount.create | bool | `false` | Specifies whether a service account should be created |
|
||||
| workflow.serviceAccount.labels | object | `{}` | Labels applied to created service account |
|
||||
| workflow.serviceAccount.name | string | `"argo-workflow"` | Service account which is used to run workflows |
|
||||
| workflow.serviceAccount.pullSecrets | list | `[]` | Secrets with credentials to pull images from a private registry. Same format as `.Values.images.pullSecrets` |
|
||||
|
||||
### Workflow Controller
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| controller.affinity | object | `{}` | Assign custom [affinity] rules |
|
||||
| controller.clusterWorkflowTemplates.enabled | bool | `true` | Create a ClusterRole and CRB for the controller to access ClusterWorkflowTemplates. |
|
||||
| controller.clusterWorkflowTemplates.serviceAccounts | list | `[]` | Extra service accounts to be added to the ClusterRoleBinding |
|
||||
| controller.columns | list | `[]` | Configure Argo Server to show custom [columns] |
|
||||
| controller.configMap.annotations | object | `{}` | ConfigMap annotations |
|
||||
| controller.configMap.create | bool | `true` | Create a ConfigMap for the controller |
|
||||
| controller.configMap.name | string | `""` | ConfigMap name |
|
||||
| controller.cronWorkflowWorkers | string | `nil` | Number of cron workflow workers Only valid for 3.5+ |
|
||||
| controller.deploymentAnnotations | object | `{}` | deploymentAnnotations is an optional map of annotations to be applied to the controller Deployment |
|
||||
| controller.extraArgs | list | `[]` | Extra arguments to be added to the controller |
|
||||
| controller.extraContainers | list | `[]` | Extra containers to be added to the controller deployment |
|
||||
| controller.extraEnv | list | `[]` | Extra environment variables to provide to the controller container |
|
||||
| controller.extraInitContainers | list | `[]` | Enables init containers to be added to the controller deployment |
|
||||
| controller.image.registry | string | `"quay.io"` | Registry to use for the controller |
|
||||
| controller.image.repository | string | `"argoproj/workflow-controller"` | Registry to use for the controller |
|
||||
| controller.image.tag | string | `""` | Image tag for the workflow controller. Defaults to `.Values.images.tag`. |
|
||||
| controller.initialDelay | string | `nil` | Resolves ongoing, uncommon AWS EKS bug: https://github.com/argoproj/argo-workflows/pull/4224 |
|
||||
| controller.instanceID.enabled | bool | `false` | Configures the controller to filter workflow submissions to only those which have a matching instanceID attribute. |
|
||||
| controller.instanceID.explicitID | string | `""` | Use a custom instanceID |
|
||||
| controller.instanceID.useReleaseName | bool | `false` | Use ReleaseName as instanceID |
|
||||
| controller.kubeConfig | object | `{}` (See [values.yaml]) | Configure when workflow controller runs in a different k8s cluster with the workflow workloads, or needs to communicate with the k8s apiserver using an out-of-cluster kubeconfig secret. |
|
||||
| controller.links | list | `[]` | Configure Argo Server to show custom [links] |
|
||||
| controller.livenessProbe | object | See [values.yaml] | Configure liveness [probe] for the controller |
|
||||
| controller.loadBalancerClass | string | `""` | The class of the load balancer implementation |
|
||||
| controller.loadBalancerSourceRanges | list | `[]` | Source ranges to allow access to service from. Only applies to service type `LoadBalancer` |
|
||||
| controller.logging.format | string | `"text"` | Set the logging format (one of: `text`, `json`) |
|
||||
| controller.logging.globallevel | string | `"0"` | Set the glog logging level |
|
||||
| controller.logging.level | string | `"info"` | Set the logging level (one of: `debug`, `info`, `warn`, `error`) |
|
||||
| controller.metricsConfig.enabled | bool | `false` | Enables prometheus metrics server |
|
||||
| controller.metricsConfig.headlessService | bool | `false` | Flag to enable headless service |
|
||||
| controller.metricsConfig.honorLabels | bool | `false` | When true, honorLabels preserves the metric’s labels when they collide with the target’s labels. |
|
||||
| controller.metricsConfig.ignoreErrors | bool | `false` | Flag that instructs prometheus to ignore metric emission errors. |
|
||||
| controller.metricsConfig.interval | string | `"30s"` | Frequency at which prometheus scrapes metrics |
|
||||
| controller.metricsConfig.metricRelabelings | list | `[]` | ServiceMonitor metric relabel configs to apply to samples before ingestion |
|
||||
| controller.metricsConfig.metricsTTL | string | `""` | How often custom metrics are cleared from memory |
|
||||
| controller.metricsConfig.path | string | `"/metrics"` | Path is the path where metrics are emitted. Must start with a "/". |
|
||||
| controller.metricsConfig.port | int | `9090` | Port is the port where metrics are emitted |
|
||||
| controller.metricsConfig.portName | string | `"metrics"` | Container metrics port name |
|
||||
| controller.metricsConfig.relabelings | list | `[]` | ServiceMonitor relabel configs to apply to samples before scraping |
|
||||
| controller.metricsConfig.secure | bool | `false` | Flag that use a self-signed cert for TLS |
|
||||
| controller.metricsConfig.servicePort | int | `8080` | Service metrics port |
|
||||
| controller.metricsConfig.servicePortName | string | `"metrics"` | Service metrics port name |
|
||||
| controller.metricsConfig.targetLabels | list | `[]` | ServiceMonitor will add labels from the service to the Prometheus metric |
|
||||
| controller.name | string | `"workflow-controller"` | Workflow controller name string |
|
||||
| controller.namespaceParallelism | string | `nil` | Limits the maximum number of incomplete workflows in a namespace |
|
||||
| controller.navColor | string | `""` | Set ui navigation bar background color |
|
||||
| controller.nodeEvents.enabled | bool | `true` | Enable to emit events on node completion. |
|
||||
| controller.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | [Node selector] |
|
||||
| controller.parallelism | string | `nil` | parallelism dictates how many workflows can be running at the same time |
|
||||
| controller.pdb.enabled | bool | `false` | Configure [Pod Disruption Budget] for the controller pods |
|
||||
| controller.persistence | object | `{}` | enable Workflow Archive to store the status of workflows. Postgres and MySQL (>= 5.7.8) are available. |
|
||||
| controller.podAnnotations | object | `{}` | podAnnotations is an optional map of annotations to be applied to the controller Pods |
|
||||
| controller.podCleanupWorkers | string | `nil` | Number of pod cleanup workers |
|
||||
| controller.podGCDeleteDelayDuration | string | `5s` (Argo Workflows default) | The duration in seconds before the pods in the GC queue get deleted. A zero value indicates that the pods will be deleted immediately. |
|
||||
| controller.podGCGracePeriodSeconds | string | `30` seconds (Kubernetes default) | Specifies the duration in seconds before a terminating pod is forcefully killed. A zero value indicates that the pod will be forcefully terminated immediately. |
|
||||
| controller.podLabels | object | `{}` | Optional labels to add to the controller pods |
|
||||
| controller.podSecurityContext | object | `{}` | SecurityContext to set on the controller pods |
|
||||
| controller.priorityClassName | string | `""` | Leverage a PriorityClass to ensure your pods survive resource shortages. |
|
||||
| controller.rbac.accessAllSecrets | bool | `false` | Allows controller to get, list and watch all k8s secrets. Can only be used if secretWhitelist is empty. |
|
||||
| controller.rbac.create | bool | `true` | Adds Role and RoleBinding for the controller. |
|
||||
| controller.rbac.secretWhitelist | list | `[]` | Allows controller to get, list, and watch certain k8s secrets |
|
||||
| controller.rbac.writeConfigMaps | bool | `false` | Allows controller to create and update ConfigMaps. Enables memoization feature |
|
||||
| controller.replicas | int | `1` | The number of controller pods to run |
|
||||
| controller.resourceRateLimit | object | `{}` | Globally limits the rate at which pods are created. This is intended to mitigate flooding of the Kubernetes API server by workflows with a large amount of parallel nodes. |
|
||||
| controller.resources | object | `{}` | Resource limits and requests for the controller |
|
||||
| controller.retentionPolicy | object | `{}` | Workflow retention by number of workflows |
|
||||
| controller.revisionHistoryLimit | int | `10` | The number of revisions to keep. |
|
||||
| controller.securityContext | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true}` | the controller container's securityContext |
|
||||
| controller.serviceAccount.annotations | object | `{}` | Annotations applied to created service account |
|
||||
| controller.serviceAccount.create | bool | `true` | Create a service account for the controller |
|
||||
| controller.serviceAccount.labels | object | `{}` | Labels applied to created service account |
|
||||
| controller.serviceAccount.name | string | `""` | Service account name |
|
||||
| controller.serviceAnnotations | object | `{}` | Annotations to be applied to the controller Service |
|
||||
| controller.serviceLabels | object | `{}` | Optional labels to add to the controller Service |
|
||||
| controller.serviceMonitor.additionalLabels | object | `{}` | Prometheus ServiceMonitor labels |
|
||||
| controller.serviceMonitor.enabled | bool | `false` | Enable a prometheus ServiceMonitor |
|
||||
| controller.serviceMonitor.namespace | string | `""` | Prometheus ServiceMonitor namespace |
|
||||
| controller.serviceType | string | `"ClusterIP"` | Service type of the controller Service |
|
||||
| controller.telemetryConfig.enabled | bool | `false` | Enables prometheus telemetry server |
|
||||
| controller.telemetryConfig.ignoreErrors | bool | `false` | Flag that instructs prometheus to ignore metric emission errors. |
|
||||
| controller.telemetryConfig.interval | string | `"30s"` | Frequency at which prometheus scrapes telemetry data |
|
||||
| controller.telemetryConfig.metricsTTL | string | `""` | How often custom metrics are cleared from memory |
|
||||
| controller.telemetryConfig.path | string | `"/telemetry"` | telemetry path |
|
||||
| controller.telemetryConfig.port | int | `8081` | telemetry container port |
|
||||
| controller.telemetryConfig.secure | bool | `false` | Flag that use a self-signed cert for TLS |
|
||||
| controller.telemetryConfig.servicePort | int | `8081` | telemetry service port |
|
||||
| controller.telemetryConfig.servicePortName | string | `"telemetry"` | telemetry service port name |
|
||||
| controller.tolerations | list | `[]` | [Tolerations] for use with node taints |
|
||||
| controller.topologySpreadConstraints | list | `[]` | Assign custom [TopologySpreadConstraints] rules to the workflow controller |
|
||||
| controller.volumeMounts | list | `[]` | Additional volume mounts to the controller main container |
|
||||
| controller.volumes | list | `[]` | Additional volumes to the controller pod |
|
||||
| controller.workflowDefaults | object | `{}` | Default values that will apply to all Workflows from this controller, unless overridden on the Workflow-level. Only valid for 2.7+ |
|
||||
| controller.workflowEvents.enabled | bool | `true` | Enable to emit events on workflow status changes. |
|
||||
| controller.workflowNamespaces | list | `["default"]` | Specify all namespaces where this workflow controller instance will manage workflows. This controls where the service account and RBAC resources will be created. Only valid when singleNamespace is false. |
|
||||
| controller.workflowRestrictions | object | `{}` | Restricts the Workflows that the controller will process. Only valid for 2.9+ |
|
||||
| controller.workflowTTLWorkers | string | `nil` | Number of workflow TTL workers |
|
||||
| controller.workflowWorkers | string | `nil` | Number of workflow workers |
|
||||
|
||||
### Workflow Main Container
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| mainContainer.env | list | `[]` | Adds environment variables for the Workflow main container |
|
||||
| mainContainer.envFrom | list | `[]` | Adds reference environment variables for the Workflow main container |
|
||||
| mainContainer.imagePullPolicy | string | `""` | imagePullPolicy to apply to Workflow main container. Defaults to `.Values.images.pullPolicy`. |
|
||||
| mainContainer.resources | object | `{}` | Resource limits and requests for the Workflow main container |
|
||||
| mainContainer.securityContext | object | `{}` | sets security context for the Workflow main container |
|
||||
|
||||
### Workflow Executor
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| executor.args | list | `[]` | Passes arguments to the executor processes |
|
||||
| executor.env | list | `[]` | Adds environment variables for the executor. |
|
||||
| executor.image.pullPolicy | string | `""` | Image PullPolicy to use for the Workflow Executors. Defaults to `.Values.images.pullPolicy`. |
|
||||
| executor.image.registry | string | `"quay.io"` | Registry to use for the Workflow Executors |
|
||||
| executor.image.repository | string | `"argoproj/argoexec"` | Repository to use for the Workflow Executors |
|
||||
| executor.image.tag | string | `""` | Image tag for the workflow executor. Defaults to `.Values.images.tag`. |
|
||||
| executor.resources | object | `{}` | Resource limits and requests for the Workflow Executors |
|
||||
| executor.securityContext | object | `{}` | sets security context for the executor container |
|
||||
|
||||
### Workflow Server
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| server.GKEbackendConfig.enabled | bool | `false` | Enable BackendConfig custom resource for Google Kubernetes Engine |
|
||||
| server.GKEbackendConfig.spec | object | `{}` | [BackendConfigSpec] |
|
||||
| server.GKEfrontendConfig.enabled | bool | `false` | Enable FrontConfig custom resource for Google Kubernetes Engine |
|
||||
| server.GKEfrontendConfig.spec | object | `{}` | [FrontendConfigSpec] |
|
||||
| server.GKEmanagedCertificate.domains | list | `["argoworkflows.example.com"]` | Domains for the Google Managed Certificate |
|
||||
| server.GKEmanagedCertificate.enabled | bool | `false` | Enable ManagedCertificate custom resource for Google Kubernetes Engine. |
|
||||
| server.affinity | object | `{}` | Assign custom [affinity] rules |
|
||||
| server.authMode | string | `""` | Deprecated; use server.authModes instead. |
|
||||
| server.authModes | list | `[]` | A list of supported authentication modes. Available values are `server`, `client`, or `sso`. If you provide sso, please configure `.Values.server.sso` as well. |
|
||||
| server.autoscaling.behavior | object | `{}` | Configures the scaling behavior of the target in both Up and Down directions. This is only available on HPA apiVersion `autoscaling/v2beta2` and newer |
|
||||
| server.autoscaling.enabled | bool | `false` | Enable Horizontal Pod Autoscaler ([HPA]) for the Argo Server |
|
||||
| server.autoscaling.maxReplicas | int | `5` | Maximum number of replicas for the Argo Server [HPA] |
|
||||
| server.autoscaling.minReplicas | int | `1` | Minimum number of replicas for the Argo Server [HPA] |
|
||||
| server.autoscaling.targetCPUUtilizationPercentage | int | `50` | Average CPU utilization percentage for the Argo Server [HPA] |
|
||||
| server.autoscaling.targetMemoryUtilizationPercentage | int | `50` | Average memory utilization percentage for the Argo Server [HPA] |
|
||||
| server.baseHref | string | `"/"` | Value for base href in index.html. Used if the server is running behind reverse proxy under subpath different from /. |
|
||||
| server.clusterWorkflowTemplates.enableEditing | bool | `true` | Give the server permissions to edit ClusterWorkflowTemplates. |
|
||||
| server.clusterWorkflowTemplates.enabled | bool | `true` | Create a ClusterRole and CRB for the server to access ClusterWorkflowTemplates. |
|
||||
| server.deploymentAnnotations | object | `{}` | optional map of annotations to be applied to the ui Deployment |
|
||||
| server.enabled | bool | `true` | Deploy the Argo Server |
|
||||
| server.extraArgs | list | `[]` | Extra arguments to provide to the Argo server binary. |
|
||||
| server.extraContainers | list | `[]` | Extra containers to be added to the server deployment |
|
||||
| server.extraEnv | list | `[]` | Extra environment variables to provide to the argo-server container |
|
||||
| server.extraInitContainers | list | `[]` | Enables init containers to be added to the server deployment |
|
||||
| server.hostAliases | list | `[]` | Mapping between IP and hostnames that will be injected as entries in the pod's hosts files |
|
||||
| server.image.registry | string | `"quay.io"` | Registry to use for the server |
|
||||
| server.image.repository | string | `"argoproj/argocli"` | Repository to use for the server |
|
||||
| server.image.tag | string | `""` | Image tag for the Argo Workflows server. Defaults to `.Values.images.tag`. |
|
||||
| server.ingress.annotations | object | `{}` | Additional ingress annotations |
|
||||
| server.ingress.enabled | bool | `false` | Enable an ingress resource |
|
||||
| server.ingress.extraPaths | list | `[]` | Additional ingress paths |
|
||||
| server.ingress.hosts | list | `[]` | List of ingress hosts |
|
||||
| server.ingress.ingressClassName | string | `""` | Defines which ingress controller will implement the resource |
|
||||
| server.ingress.labels | object | `{}` | Additional ingress labels |
|
||||
| server.ingress.pathType | string | `"Prefix"` | Ingress path type. One of `Exact`, `Prefix` or `ImplementationSpecific` |
|
||||
| server.ingress.paths | list | `["/"]` | List of ingress paths |
|
||||
| server.ingress.tls | list | `[]` | Ingress TLS configuration |
|
||||
| server.lifecycle | object | `{}` | Specify postStart and preStop lifecycle hooks for server container |
|
||||
| server.loadBalancerClass | string | `""` | The class of the load balancer implementation |
|
||||
| server.loadBalancerIP | string | `""` | Static IP address to assign to loadBalancer service type `LoadBalancer` |
|
||||
| server.loadBalancerSourceRanges | list | `[]` | Source ranges to allow access to service from. Only applies to service type `LoadBalancer` |
|
||||
| server.logging.format | string | `"text"` | Set the logging format (one of: `text`, `json`) |
|
||||
| server.logging.globallevel | string | `"0"` | Set the glog logging level |
|
||||
| server.logging.level | string | `"info"` | Set the logging level (one of: `debug`, `info`, `warn`, `error`) |
|
||||
| server.name | string | `"server"` | Server name string |
|
||||
| server.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | [Node selector] |
|
||||
| server.pdb.enabled | bool | `false` | Configure [Pod Disruption Budget] for the server pods |
|
||||
| server.podAnnotations | object | `{}` | optional map of annotations to be applied to the ui Pods |
|
||||
| server.podLabels | object | `{}` | Optional labels to add to the UI pods |
|
||||
| server.podSecurityContext | object | `{}` | SecurityContext to set on the server pods |
|
||||
| server.priorityClassName | string | `""` | Leverage a PriorityClass to ensure your pods survive resource shortages |
|
||||
| server.rbac.create | bool | `true` | Adds Role and RoleBinding for the server. |
|
||||
| server.replicas | int | `1` | The number of server pods to run |
|
||||
| server.resources | object | `{}` | Resource limits and requests for the server |
|
||||
| server.revisionHistoryLimit | int | `10` | The number of revisions to keep. |
|
||||
| server.secure | bool | `false` | Run the argo server in "secure" mode. Configure this value instead of `--secure` in extraArgs. |
|
||||
| server.securityContext | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":false,"runAsNonRoot":true}` | Servers container-level security context |
|
||||
| server.serviceAccount.annotations | object | `{}` | Annotations applied to created service account |
|
||||
| server.serviceAccount.create | bool | `true` | Create a service account for the server |
|
||||
| server.serviceAccount.labels | object | `{}` | Labels applied to created service account |
|
||||
| server.serviceAccount.name | string | `""` | Service account name |
|
||||
| server.serviceAnnotations | object | `{}` | Annotations to be applied to the UI Service |
|
||||
| server.serviceLabels | object | `{}` | Optional labels to add to the UI Service |
|
||||
| server.serviceNodePort | string | `nil` | Service node port |
|
||||
| server.servicePort | int | `2746` | Service port for server |
|
||||
| server.servicePortName | string | `""` | Service port name |
|
||||
| server.serviceType | string | `"ClusterIP"` | Service type for server pods |
|
||||
| server.sso.clientId.key | string | `"client-id"` | Key of secret to retrieve the app OIDC client ID |
|
||||
| server.sso.clientId.name | string | `"argo-server-sso"` | Name of secret to retrieve the app OIDC client ID |
|
||||
| server.sso.clientSecret.key | string | `"client-secret"` | Key of a secret to retrieve the app OIDC client secret |
|
||||
| server.sso.clientSecret.name | string | `"argo-server-sso"` | Name of a secret to retrieve the app OIDC client secret |
|
||||
| server.sso.customGroupClaimName | string | `""` | Override claim name for OIDC groups |
|
||||
| server.sso.enabled | bool | `false` | Create SSO configuration. If you set `true` , please also set `.Values.server.authMode` as `sso`. |
|
||||
| server.sso.filterGroupsRegex | list | `[]` | Filter the groups returned by the OIDC provider |
|
||||
| server.sso.insecureSkipVerify | bool | `false` | Skip TLS verification for the HTTP client |
|
||||
| server.sso.issuer | string | `"https://accounts.google.com"` | The root URL of the OIDC identity provider |
|
||||
| server.sso.issuerAlias | string | `""` | Alternate root URLs that can be included for some OIDC providers |
|
||||
| server.sso.rbac.enabled | bool | `true` | Adds ServiceAccount Policy to server (Cluster)Role. |
|
||||
| server.sso.rbac.secretWhitelist | list | `[]` | Whitelist to allow server to fetch Secrets |
|
||||
| server.sso.redirectUrl | string | `""` | The OIDC redirect URL. Should be in the form <argo-root-url>/oauth2/callback. |
|
||||
| server.sso.scopes | list | `[]` | Scopes requested from the SSO ID provider |
|
||||
| server.sso.sessionExpiry | string | `""` | Define how long your login is valid for (in hours) |
|
||||
| server.sso.userInfoPath | string | `""` | Specify the user info endpoint that contains the groups claim |
|
||||
| server.terminationGracePeriodSeconds | int | `30` | terminationGracePeriodSeconds for container lifecycle hook |
|
||||
| server.tmpVolume | object | `{"emptyDir":{}}` | Volume to be mounted in Pods for temporary files. |
|
||||
| server.tolerations | list | `[]` | [Tolerations] for use with node taints |
|
||||
| server.topologySpreadConstraints | list | `[]` | Assign custom [TopologySpreadConstraints] rules to the argo server |
|
||||
| server.volumeMounts | list | `[]` | Additional volume mounts to the server main container. |
|
||||
| server.volumes | list | `[]` | Additional volumes to the server pod. |
|
||||
|
||||
### Artifact Repository
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| artifactRepository.archiveLogs | bool | `false` | Archive the main container logs as an artifact |
|
||||
| artifactRepository.azure | object | `{}` (See [values.yaml]) | Store artifact in Azure Blob Storage |
|
||||
| artifactRepository.gcs | object | `{}` (See [values.yaml]) | Store artifact in a GCS object store |
|
||||
| artifactRepository.s3 | object | See [values.yaml] | Store artifact in a S3-compliant object store |
|
||||
| artifactRepositoryRef | object | `{}` (See [values.yaml]) | The section of [artifact repository ref](https://argo-workflows.readthedocs.io/en/stable/artifact-repository-ref/). Each map key is the name of configmap |
|
||||
| customArtifactRepository | object | `{}` | The section of custom artifact repository. Utilize a custom artifact repository that is not one of the current base ones (s3, gcs, azure) |
|
||||
| useStaticCredentials | bool | `true` | Use static credentials for S3 (eg. when not using AWS IRSA) |
|
||||
|
||||
## Breaking changes from the deprecated `argo` chart
|
||||
|
||||
1. the `installCRD` value has been removed. CRDs are now only installed from the conventional crds/ directory
|
||||
1. the CRDs were updated to `apiextensions.k8s.io/v1`
|
||||
1. the container image registry/project/tag format was changed to be more in line with the more common
|
||||
|
||||
```yaml
|
||||
image:
|
||||
registry: quay.io
|
||||
repository: argoproj/argocli
|
||||
tag: v3.0.1
|
||||
```
|
||||
|
||||
this also makes it easier for automatic update tooling (eg. renovate bot) to detect and update images.
|
||||
|
||||
1. switched to quay.io as the default registry for all images
|
||||
1. removed any included usage of Minio
|
||||
1. aligned the configuration of serviceAccounts with the argo-cd chart, ie: what used to be `server.createServiceAccount` is now `server.serviceAccount.create`
|
||||
1. moved the field previously known as `telemetryServicePort` inside the `telemetryConfig` as `telemetryConfig.servicePort` - same for `metricsConfig`
|
||||
|
||||
[affinity]: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
|
||||
[BackendConfigSpec]: https://cloud.google.com/kubernetes-engine/docs/concepts/backendconfig#backendconfigspec_v1beta1_cloudgooglecom
|
||||
[FrontendConfigSpec]: https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-features#configuring_ingress_features_through_frontendconfig_parameters
|
||||
[links]: https://argo-workflows.readthedocs.io/en/stable/links/
|
||||
[columns]: https://github.com/argoproj/argo-workflows/pull/10693
|
||||
[Node selector]: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
[Pod Disruption Budget]: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
|
||||
[probe]: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
[Tolerations]: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
|
||||
[TopologySpreadConstraints]: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
|
||||
[values.yaml]: values.yaml
|
||||
[changelog]: https://artifacthub.io/packages/helm/argo/argo-workflows?modal=changelog
|
||||
[SSO RBAC]: https://argo-workflows.readthedocs.io/en/stable/argo-server-sso/
|
||||
[Argo Server Auth Mode]: https://argo-workflows.readthedocs.io/en/stable/argo-server-auth-mode/
|
||||
11
utils/assets/charts/argo-workflows/templates/NOTES.txt
Normal file
11
utils/assets/charts/argo-workflows/templates/NOTES.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
{{- if .Values.server.authMode }}
|
||||
DEPRECATED option server.authMode - Use server.authModes
|
||||
{{- end }}
|
||||
|
||||
1. Get Argo Server external IP/domain by running:
|
||||
|
||||
kubectl --namespace {{ .Release.Namespace }} get services -o wide | grep {{ template "argo-workflows.server.fullname" . }}
|
||||
|
||||
2. Submit the hello-world workflow by running:
|
||||
|
||||
argo submit https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/hello-world.yaml --watch
|
||||
211
utils/assets/charts/argo-workflows/templates/_helpers.tpl
Normal file
211
utils/assets/charts/argo-workflows/templates/_helpers.tpl
Normal file
@@ -0,0 +1,211 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
|
||||
{{/*
|
||||
Create argo workflows server name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "argo-workflows.server.fullname" -}}
|
||||
{{- printf "%s-%s" (include "argo-workflows.fullname" .) .Values.server.name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create controller name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "argo-workflows.controller.fullname" -}}
|
||||
{{- printf "%s-%s" (include "argo-workflows.fullname" .) .Values.controller.name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "argo-workflows.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
*/}}
|
||||
{{- define "argo-workflows.fullname" -}}
|
||||
{{- if .Values.fullnameOverride -}}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "argo-workflows.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create kubernetes friendly chart version label for the controller.
|
||||
Examples:
|
||||
image.tag = v3.4.4
|
||||
output = v3.4.4
|
||||
|
||||
image.tag = v3.4.4@sha256:d06860f1394a94ac3ff8401126ef32ba28915aa6c3c982c7e607ea0b4dadb696
|
||||
output = v3.4.4
|
||||
*/}}
|
||||
{{- define "argo-workflows.controller_chart_version_label" -}}
|
||||
{{- regexReplaceAll "[^a-zA-Z0-9-_.]+" (regexReplaceAll "@sha256:[a-f0-9]+" (default (include "argo-workflows.defaultTag" .) .Values.controller.image.tag) "") "" | trunc 63 | quote -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create kubernetes friendly chart version label for the server.
|
||||
Examples:
|
||||
image.tag = v3.4.4
|
||||
output = v3.4.4
|
||||
|
||||
image.tag = v3.4.4@sha256:d06860f1394a94ac3ff8401126ef32ba28915aa6c3c982c7e607ea0b4dadb696
|
||||
output = v3.4.4
|
||||
*/}}
|
||||
{{- define "argo-workflows.server_chart_version_label" -}}
|
||||
{{- regexReplaceAll "[^a-zA-Z0-9-_.]+" (regexReplaceAll "@sha256:[a-f0-9]+" (default (include "argo-workflows.defaultTag" .) .Values.server.image.tag) "") "" | trunc 63 | quote -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "argo-workflows.labels" -}}
|
||||
helm.sh/chart: {{ include "argo-workflows.chart" .context }}
|
||||
{{ include "argo-workflows.selectorLabels" (dict "context" .context "component" .component "name" .name) }}
|
||||
app.kubernetes.io/managed-by: {{ .context.Release.Service }}
|
||||
app.kubernetes.io/part-of: argo-workflows
|
||||
{{- with .context.Values.commonLabels }}
|
||||
{{ toYaml .}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "argo-workflows.selectorLabels" -}}
|
||||
{{- if .name -}}
|
||||
app.kubernetes.io/name: {{ include "argo-workflows.name" .context }}-{{ .name }}
|
||||
{{ end -}}
|
||||
app.kubernetes.io/instance: {{ .context.Release.Name }}
|
||||
{{- if .component }}
|
||||
app.kubernetes.io/component: {{ .component }}
|
||||
app: {{ .component }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create the name of the controller configMap
|
||||
*/}}
|
||||
{{- define "argo-workflows.controller.config-map.name" -}}
|
||||
{{- .Values.controller.configMap.name | default (printf "%s-%s" (include "argo-workflows.controller.fullname" .) "configmap") | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the server service account to use
|
||||
*/}}
|
||||
{{- define "argo-workflows.serverServiceAccountName" -}}
|
||||
{{- if .Values.server.serviceAccount.create -}}
|
||||
{{ default (include "argo-workflows.server.fullname" .) .Values.server.serviceAccount.name }}
|
||||
{{- else -}}
|
||||
{{ default "default" .Values.server.serviceAccount.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the controller service account to use
|
||||
*/}}
|
||||
{{- define "argo-workflows.controllerServiceAccountName" -}}
|
||||
{{- if .Values.controller.serviceAccount.create -}}
|
||||
{{ default (include "argo-workflows.controller.fullname" .) .Values.controller.serviceAccount.name }}
|
||||
{{- else -}}
|
||||
{{ default "default" .Values.controller.serviceAccount.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the appropriate apiVersion for ingress
|
||||
*/}}
|
||||
{{- define "argo-workflows.ingress.apiVersion" -}}
|
||||
{{- if semverCompare "<1.14-0" (include "argo-workflows.kubeVersion" $) -}}
|
||||
{{- print "extensions/v1beta1" -}}
|
||||
{{- else if semverCompare "<1.19-0" (include "argo-workflows.kubeVersion" $) -}}
|
||||
{{- print "networking.k8s.io/v1beta1" -}}
|
||||
{{- else -}}
|
||||
{{- print "networking.k8s.io/v1" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the target Kubernetes version
|
||||
*/}}
|
||||
{{- define "argo-workflows.kubeVersion" -}}
|
||||
{{- default .Capabilities.KubeVersion.Version .Values.kubeVersionOverride }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the default Argo Workflows app version
|
||||
*/}}
|
||||
{{- define "argo-workflows.defaultTag" -}}
|
||||
{{- default .Chart.AppVersion .Values.images.tag }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return full image name including or excluding registry based on existence
|
||||
*/}}
|
||||
{{- define "argo-workflows.image" -}}
|
||||
{{- if and .image.registry .image.repository -}}
|
||||
{{ .image.registry }}/{{ .image.repository }}
|
||||
{{- else -}}
|
||||
{{ .image.repository }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the appropriate apiVersion for autoscaling
|
||||
*/}}
|
||||
{{- define "argo-workflows.apiVersion.autoscaling" -}}
|
||||
{{- if .Values.apiVersionOverrides.autoscaling -}}
|
||||
{{- print .Values.apiVersionOverrides.autoscaling -}}
|
||||
{{- else if semverCompare "<1.23-0" (include "argo-workflows.kubeVersion" .) -}}
|
||||
{{- print "autoscaling/v2beta1" -}}
|
||||
{{- else -}}
|
||||
{{- print "autoscaling/v2" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the appropriate apiVersion for GKE resources
|
||||
*/}}
|
||||
{{- define "argo-workflows.apiVersions.cloudgoogle" -}}
|
||||
{{- if .Values.apiVersionOverrides.cloudgoogle -}}
|
||||
{{- print .Values.apiVersionOverrides.cloudgoogle -}}
|
||||
{{- else if .Capabilities.APIVersions.Has "cloud.google.com/v1" -}}
|
||||
{{- print "cloud.google.com/v1" -}}
|
||||
{{- else -}}
|
||||
{{- print "cloud.google.com/v1beta1" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the appropriate apiVersion for monitoring CRDs
|
||||
*/}}
|
||||
{{- define "argo-workflows.apiVersions.monitoring" -}}
|
||||
{{- if .Values.apiVersionOverrides.monitoring -}}
|
||||
{{- print .Values.apiVersionOverrides.monitoring -}}
|
||||
{{- else -}}
|
||||
{{- print "monitoring.coreos.com/v1" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Expand the namespace of the release.
|
||||
Allows overriding it for multi-namespace deployments in combined charts.
|
||||
*/}}
|
||||
{{- define "argo-workflows.namespace" -}}
|
||||
{{- default .Release.Namespace .Values.namespaceOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,29 @@
|
||||
{{- if .Values.workflow.rbac.agentPermissions -}}
|
||||
{{- range $namespace := or .Values.singleNamespace false | ternary (list "") (append .Values.controller.workflowNamespaces (coalesce .Values.workflow.namespace (include "argo-workflows.namespace" .)) | uniq) }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" $ }}-workflow-agent
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" $ "component" $.Values.controller.name "name" $.Values.controller.name) | nindent 4 }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: {{ template "argo-workflows.fullname" $ }}-workflow-agent
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ $.Values.workflow.serviceAccount.name }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
{{- range $.Values.workflow.rbac.serviceAccounts }}
|
||||
- kind: ServiceAccount
|
||||
name: {{ .name }}
|
||||
namespace: {{ .namespace | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,29 @@
|
||||
{{- if .Values.workflow.rbac.agentPermissions -}}
|
||||
{{- range $namespace := or .Values.singleNamespace false | ternary (list "") (append .Values.controller.workflowNamespaces (coalesce .Values.workflow.namespace (include "argo-workflows.namespace" .)) | uniq) }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" $ }}-workflow-agent
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" $ "component" $.Values.controller.name "name" $.Values.controller.name) | nindent 4 }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflowtasksets
|
||||
verbs:
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflowtasksets/status
|
||||
verbs:
|
||||
- patch
|
||||
{{- end }}
|
||||
|
||||
{{- end }}
|
||||
@@ -0,0 +1,29 @@
|
||||
{{- if .Values.workflow.rbac.artifactGC -}}
|
||||
{{- range $namespace := or .Values.singleNamespace false | ternary (list "") (append .Values.controller.workflowNamespaces (coalesce .Values.workflow.namespace (include "argo-workflows.namespace" .)) | uniq) }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" $ }}-wf-artifactgc
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" $ "component" $.Values.controller.name "name" $.Values.controller.name) | nindent 4 }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: {{ template "argo-workflows.fullname" $ }}-wf-artifactgc
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ $.Values.workflow.serviceAccount.name }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
{{- range $.Values.workflow.rbac.serviceAccounts }}
|
||||
- kind: ServiceAccount
|
||||
name: {{ .name }}
|
||||
namespace: {{ .namespace | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,29 @@
|
||||
{{- if .Values.workflow.rbac.artifactGC -}}
|
||||
{{- range $namespace := or .Values.singleNamespace false | ternary (list "") (append .Values.controller.workflowNamespaces (coalesce .Values.workflow.namespace (include "argo-workflows.namespace" .)) | uniq) }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" $ }}-wf-artifactgc
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" $ "component" $.Values.controller.name "name" $.Values.controller.name) | nindent 4 }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflowartifactgctasks
|
||||
verbs:
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflowartifactgctasks/status
|
||||
verbs:
|
||||
- patch
|
||||
{{- end }}
|
||||
|
||||
{{- end }}
|
||||
@@ -0,0 +1,19 @@
|
||||
{{- range $cm_name, $cm_val := .Values.artifactRepositoryRef }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ $cm_name }}
|
||||
namespace: {{ include "argo-workflows.namespace" $ | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" $ "component" $.Values.controller.name "name" $cm_name) | nindent 4 }}
|
||||
{{- with $cm_val.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
data:
|
||||
{{- range $data_key, $data_val := (omit $cm_val "annotations") }}
|
||||
{{- $data_key | nindent 2 }}: |
|
||||
{{- toYaml $data_val | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,107 @@
|
||||
{{- if .Values.createAggregateRoles }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" . }}-view
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
rbac.authorization.k8s.io/aggregate-to-view: "true"
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflows
|
||||
- workflows/finalizers
|
||||
- workfloweventbindings
|
||||
- workfloweventbindings/finalizers
|
||||
- workflowtemplates
|
||||
- workflowtemplates/finalizers
|
||||
- cronworkflows
|
||||
- cronworkflows/finalizers
|
||||
- clusterworkflowtemplates
|
||||
- clusterworkflowtemplates/finalizers
|
||||
- workflowtasksets
|
||||
- workflowtasksets/finalizers
|
||||
- workflowtaskresults
|
||||
- workflowtaskresults/finalizers
|
||||
- workflowartifactgctasks
|
||||
- workflowartifactgctasks/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" . }}-edit
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
rbac.authorization.k8s.io/aggregate-to-edit: "true"
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflows
|
||||
- workflows/finalizers
|
||||
- workfloweventbindings
|
||||
- workfloweventbindings/finalizers
|
||||
- workflowtemplates
|
||||
- workflowtemplates/finalizers
|
||||
- cronworkflows
|
||||
- cronworkflows/finalizers
|
||||
- clusterworkflowtemplates
|
||||
- clusterworkflowtemplates/finalizers
|
||||
- workflowtasksets
|
||||
- workflowtasksets/finalizers
|
||||
- workflowtaskresults
|
||||
- workflowtaskresults/finalizers
|
||||
- workflowartifactgctasks
|
||||
- workflowartifactgctasks/finalizers
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- deletecollection
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" . }}-admin
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
rbac.authorization.k8s.io/aggregate-to-admin: "true"
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflows
|
||||
- workflows/finalizers
|
||||
- workfloweventbindings
|
||||
- workfloweventbindings/finalizers
|
||||
- workflowtemplates
|
||||
- workflowtemplates/finalizers
|
||||
- cronworkflows
|
||||
- cronworkflows/finalizers
|
||||
- clusterworkflowtemplates
|
||||
- clusterworkflowtemplates/finalizers
|
||||
- workflowtasksets
|
||||
- workflowtasksets/finalizers
|
||||
- workflowtaskresults
|
||||
- workflowtaskresults/finalizers
|
||||
- workflowartifactgctasks
|
||||
- workflowartifactgctasks/finalizers
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- deletecollection
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
{{- end }}
|
||||
@@ -0,0 +1,220 @@
|
||||
{{- if .Values.controller.rbac.create }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
{{- if .Values.singleNamespace }}
|
||||
kind: Role
|
||||
{{- else }}
|
||||
kind: ClusterRole
|
||||
{{- end }}
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}
|
||||
{{- if .Values.singleNamespace }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods/exec
|
||||
verbs:
|
||||
- create
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
verbs:
|
||||
- get
|
||||
- watch
|
||||
- list
|
||||
{{- if .Values.controller.rbac.writeConfigMaps }}
|
||||
- create
|
||||
- update
|
||||
{{- end}}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- persistentvolumeclaims
|
||||
- persistentvolumeclaims/finalizers
|
||||
verbs:
|
||||
- create
|
||||
- update
|
||||
- delete
|
||||
- get
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflows
|
||||
- workflows/finalizers
|
||||
- workflowtasksets
|
||||
- workflowtasksets/finalizers
|
||||
- workflowartifactgctasks
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- create
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflowtemplates
|
||||
- workflowtemplates/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflowtaskresults
|
||||
- workflowtaskresults/finalizers
|
||||
verbs:
|
||||
- list
|
||||
- watch
|
||||
- deletecollection
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- cronworkflows
|
||||
- cronworkflows/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- events
|
||||
verbs:
|
||||
- create
|
||||
- patch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- serviceaccounts
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- apiGroups:
|
||||
- "policy"
|
||||
resources:
|
||||
- poddisruptionbudgets
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
- delete
|
||||
{{- if .Values.controller.persistence }}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
resourceNames:
|
||||
{{- if .Values.controller.persistence.postgresql }}
|
||||
- {{ .Values.controller.persistence.postgresql.userNameSecret.name }}
|
||||
- {{ .Values.controller.persistence.postgresql.passwordSecret.name }}
|
||||
{{- end}}
|
||||
{{- if .Values.controller.persistence.mysql }}
|
||||
- {{ .Values.controller.persistence.mysql.userNameSecret.name }}
|
||||
- {{ .Values.controller.persistence.mysql.passwordSecret.name }}
|
||||
{{- end}}
|
||||
verbs:
|
||||
- get
|
||||
{{- end}}
|
||||
- apiGroups:
|
||||
- coordination.k8s.io
|
||||
resources:
|
||||
- leases
|
||||
verbs:
|
||||
- create
|
||||
- apiGroups:
|
||||
- coordination.k8s.io
|
||||
resources:
|
||||
- leases
|
||||
resourceNames:
|
||||
{{- if .Values.controller.instanceID.enabled }}
|
||||
{{- if .Values.controller.instanceID.useReleaseName }}
|
||||
- workflow-controller-{{ .Release.Name }}
|
||||
- workflow-controller-lease-{{ .Release.Name }}
|
||||
{{- else }}
|
||||
- workflow-controller-{{ .Values.controller.instanceID.explicitID }}
|
||||
- workflow-controller-lease-{{ .Values.controller.instanceID.explicitID }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
- workflow-controller
|
||||
- workflow-controller-lease
|
||||
{{- end }}
|
||||
verbs:
|
||||
- get
|
||||
- watch
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- get
|
||||
resourceNames:
|
||||
{{/* for HTTP templates */}}
|
||||
- argo-workflows-agent-ca-certificates
|
||||
{{- with .Values.controller.rbac.secretWhitelist }}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
resourceNames: {{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if and (not .Values.controller.rbac.secretWhitelist) (.Values.controller.rbac.accessAllSecrets) }}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
{{- end }}
|
||||
|
||||
{{- if and .Values.controller.clusterWorkflowTemplates.enabled (not .Values.singleNamespace) }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}-cluster-template
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- clusterworkflowtemplates
|
||||
- clusterworkflowtemplates/finalizers
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,214 @@
|
||||
{{- if .Values.controller.configMap.create }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.config-map.name" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" "cm") | nindent 4 }}
|
||||
{{- with .Values.controller.configMap.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
data:
|
||||
config: |
|
||||
{{- if .Values.controller.instanceID.enabled }}
|
||||
{{- if .Values.controller.instanceID.useReleaseName }}
|
||||
instanceID: {{ .Release.Name }}
|
||||
{{- else }}
|
||||
instanceID: {{ .Values.controller.instanceID.explicitID }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.controller.parallelism }}
|
||||
parallelism: {{ .Values.controller.parallelism }}
|
||||
{{- end }}
|
||||
{{- if .Values.controller.resourceRateLimit }}
|
||||
resourceRateLimit: {{- toYaml .Values.controller.resourceRateLimit | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.namespaceParallelism }}
|
||||
namespaceParallelism: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.initialDelay }}
|
||||
initialDelay: {{ . }}
|
||||
{{- end }}
|
||||
{{- if or .Values.mainContainer.resources .Values.mainContainer.env .Values.mainContainer.envFrom .Values.mainContainer.securityContext}}
|
||||
mainContainer:
|
||||
imagePullPolicy: {{ default (.Values.images.pullPolicy) .Values.mainContainer.imagePullPolicy }}
|
||||
{{- with .Values.mainContainer.resources }}
|
||||
resources: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.mainContainer.env }}
|
||||
env: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.mainContainer.envFrom }}
|
||||
envFrom: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.mainContainer.securityContext }}
|
||||
securityContext: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if or .Values.executor.resources .Values.executor.env .Values.executor.args .Values.executor.securityContext}}
|
||||
executor:
|
||||
imagePullPolicy: {{ default (.Values.images.pullPolicy) .Values.executor.image.pullPolicy }}
|
||||
{{- with .Values.executor.resources }}
|
||||
resources: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.executor.args }}
|
||||
args: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.executor.env }}
|
||||
env: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.executor.securityContext }}
|
||||
securityContext: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if or .Values.artifactRepository.s3 .Values.artifactRepository.gcs .Values.artifactRepository.azure .Values.customArtifactRepository }}
|
||||
artifactRepository:
|
||||
{{- if .Values.artifactRepository.archiveLogs }}
|
||||
archiveLogs: {{ .Values.artifactRepository.archiveLogs }}
|
||||
{{- end }}
|
||||
{{- with .Values.artifactRepository.gcs }}
|
||||
gcs: {{- tpl (toYaml .) $ | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.artifactRepository.azure }}
|
||||
azure: {{- tpl (toYaml .) $ | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.artifactRepository.s3 }}
|
||||
s3:
|
||||
{{- if .Values.useStaticCredentials }}
|
||||
accessKeySecret:
|
||||
key: {{ tpl .Values.artifactRepository.s3.accessKeySecret.key . }}
|
||||
name: {{ tpl .Values.artifactRepository.s3.accessKeySecret.name . }}
|
||||
secretKeySecret:
|
||||
key: {{ tpl .Values.artifactRepository.s3.secretKeySecret.key . }}
|
||||
name: {{ tpl .Values.artifactRepository.s3.secretKeySecret.name . }}
|
||||
{{- if .Values.artifactRepository.s3.sessionTokenSecret }}
|
||||
sessionTokenSecret:
|
||||
key: {{ tpl .Values.artifactRepository.s3.sessionTokenSecret.key . }}
|
||||
name: {{ tpl .Values.artifactRepository.s3.sessionTokenSecret.name . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
bucket: {{ tpl (.Values.artifactRepository.s3.bucket | default "") . }}
|
||||
endpoint: {{ tpl (.Values.artifactRepository.s3.endpoint | default "") . }}
|
||||
insecure: {{ .Values.artifactRepository.s3.insecure }}
|
||||
{{- if .Values.artifactRepository.s3.caSecret }}
|
||||
caSecret:
|
||||
name: {{ tpl .Values.artifactRepository.s3.caSecret.name . }}
|
||||
key: {{ tpl .Values.artifactRepository.s3.caSecret.key . }}
|
||||
{{- end }}
|
||||
{{- if .Values.artifactRepository.s3.keyFormat }}
|
||||
keyFormat: {{ .Values.artifactRepository.s3.keyFormat | quote }}
|
||||
{{- end }}
|
||||
{{- if .Values.artifactRepository.s3.region }}
|
||||
region: {{ tpl .Values.artifactRepository.s3.region $ }}
|
||||
{{- end }}
|
||||
{{- if .Values.artifactRepository.s3.roleARN }}
|
||||
roleARN: {{ .Values.artifactRepository.s3.roleARN }}
|
||||
{{- end }}
|
||||
{{- if .Values.artifactRepository.s3.useSDKCreds }}
|
||||
useSDKCreds: {{ .Values.artifactRepository.s3.useSDKCreds }}
|
||||
{{- end }}
|
||||
{{- with .Values.artifactRepository.s3.encryptionOptions }}
|
||||
encryptionOptions:
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.customArtifactRepository }}
|
||||
{{- toYaml .Values.customArtifactRepository | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.controller.metricsConfig.enabled }}
|
||||
metricsConfig:
|
||||
enabled: {{ .Values.controller.metricsConfig.enabled }}
|
||||
path: {{ .Values.controller.metricsConfig.path }}
|
||||
port: {{ .Values.controller.metricsConfig.port }}
|
||||
{{- if .Values.controller.metricsConfig.metricsTTL }}
|
||||
metricsTTL: {{ .Values.controller.metricsConfig.metricsTTL }}
|
||||
{{- end }}
|
||||
ignoreErrors: {{ .Values.controller.metricsConfig.ignoreErrors }}
|
||||
secure: {{ .Values.controller.metricsConfig.secure }}
|
||||
{{- end }}
|
||||
{{- if .Values.controller.telemetryConfig.enabled }}
|
||||
telemetryConfig:
|
||||
enabled: {{ .Values.controller.telemetryConfig.enabled }}
|
||||
path: {{ .Values.controller.telemetryConfig.path }}
|
||||
port: {{ .Values.controller.telemetryConfig.port }}
|
||||
{{- if .Values.controller.telemetryConfig.metricsTTL }}
|
||||
metricsTTL: {{ .Values.controller.telemetryConfig.metricsTTL }}
|
||||
{{- end }}
|
||||
ignoreErrors: {{ .Values.controller.telemetryConfig.ignoreErrors }}
|
||||
secure: {{ .Values.controller.telemetryConfig.secure }}
|
||||
{{- end }}
|
||||
{{- if .Values.controller.persistence }}
|
||||
persistence:
|
||||
{{ toYaml .Values.controller.persistence | indent 6 }}{{- end }}
|
||||
{{- if .Values.controller.workflowDefaults }}
|
||||
workflowDefaults:
|
||||
{{ toYaml .Values.controller.workflowDefaults | indent 6 }}{{- end }}
|
||||
{{- if .Values.server.sso.enabled }}
|
||||
sso:
|
||||
issuer: {{ .Values.server.sso.issuer }}
|
||||
clientId:
|
||||
name: {{ .Values.server.sso.clientId.name }}
|
||||
key: {{ .Values.server.sso.clientId.key }}
|
||||
clientSecret:
|
||||
name: {{ .Values.server.sso.clientSecret.name }}
|
||||
key: {{ .Values.server.sso.clientSecret.key }}
|
||||
redirectUrl: {{ .Values.server.sso.redirectUrl | quote }}
|
||||
rbac:
|
||||
enabled: {{ .Values.server.sso.rbac.enabled }}
|
||||
{{- with .Values.server.sso.scopes }}
|
||||
scopes: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.sso.issuerAlias }}
|
||||
issuerAlias: {{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.sso.sessionExpiry }}
|
||||
sessionExpiry: {{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.sso.customGroupClaimName }}
|
||||
customGroupClaimName: {{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.sso.userInfoPath }}
|
||||
userInfoPath: {{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.sso.insecureSkipVerify }}
|
||||
insecureSkipVerify: {{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.sso.filterGroupsRegex }}
|
||||
filterGroupsRegex: {{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.workflowRestrictions }}
|
||||
workflowRestrictions: {{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.links }}
|
||||
links: {{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.columns }}
|
||||
columns: {{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.navColor }}
|
||||
navColor: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.retentionPolicy }}
|
||||
retentionPolicy: {{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.emissary.images }}
|
||||
images: {{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
nodeEvents:
|
||||
enabled: {{ .Values.controller.nodeEvents.enabled }}
|
||||
workflowEvents:
|
||||
enabled: {{ .Values.controller.workflowEvents.enabled }}
|
||||
{{- with .Values.controller.kubeConfig }}
|
||||
kubeConfig: {{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.podGCGracePeriodSeconds }}
|
||||
podGCGracePeriodSeconds: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.podGCDeleteDelayDuration }}
|
||||
podGCDeleteDelayDuration: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,50 @@
|
||||
{{- if .Values.controller.rbac.create }}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
{{- if .Values.singleNamespace }}
|
||||
kind: RoleBinding
|
||||
{{ else }}
|
||||
kind: ClusterRoleBinding
|
||||
{{- end }}
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}
|
||||
{{- if .Values.singleNamespace }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
{{- if .Values.singleNamespace }}
|
||||
kind: Role
|
||||
{{ else }}
|
||||
kind: ClusterRole
|
||||
{{- end }}
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ template "argo-workflows.controllerServiceAccountName" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
|
||||
{{- if .Values.controller.clusterWorkflowTemplates.enabled }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}-cluster-template
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}-cluster-template
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ template "argo-workflows.controllerServiceAccountName" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
{{- range .Values.controller.clusterWorkflowTemplates.serviceAccounts }}
|
||||
- kind: ServiceAccount
|
||||
name: {{ .name }}
|
||||
namespace: {{ .namespace | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,20 @@
|
||||
{{- if .Values.controller.pdb.enabled }}
|
||||
apiVersion: policy/v1
|
||||
kind: PodDisruptionBudget
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
spec:
|
||||
{{- if .Values.controller.pdb.minAvailable }}
|
||||
minAvailable: {{ .Values.controller.pdb.minAvailable }}
|
||||
{{- else if .Values.controller.pdb.maxUnavailable }}
|
||||
maxUnavailable: {{ .Values.controller.pdb.maxUnavailable }}
|
||||
{{- else }}
|
||||
minAvailable: 0
|
||||
{{- end }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" . "name" .Values.controller.name) | nindent 6 }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,146 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
app.kubernetes.io/version: {{ include "argo-workflows.controller_chart_version_label" . }}
|
||||
{{- with .Values.controller.deploymentAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
replicas: {{ .Values.controller.replicas }}
|
||||
revisionHistoryLimit: {{ .Values.controller.revisionHistoryLimit }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" . "name" .Values.controller.name) | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 8 }}
|
||||
app.kubernetes.io/version: {{ include "argo-workflows.controller_chart_version_label" . }}
|
||||
{{- with.Values.controller.podLabels }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.podAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
serviceAccountName: {{ template "argo-workflows.controllerServiceAccountName" . }}
|
||||
{{- with .Values.controller.podSecurityContext }}
|
||||
securityContext:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.extraInitContainers }}
|
||||
initContainers:
|
||||
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: controller
|
||||
image: "{{- include "argo-workflows.image" (dict "context" . "image" .Values.controller.image) }}:{{ default (include "argo-workflows.defaultTag" .) .Values.controller.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.images.pullPolicy }}
|
||||
command: [ "workflow-controller" ]
|
||||
args:
|
||||
- "--configmap"
|
||||
- "{{ template "argo-workflows.controller.config-map.name" . }}"
|
||||
- "--executor-image"
|
||||
- "{{- include "argo-workflows.image" (dict "context" . "image" .Values.executor.image) }}:{{ default (include "argo-workflows.defaultTag" .) .Values.executor.image.tag }}"
|
||||
- "--loglevel"
|
||||
- "{{ .Values.controller.logging.level }}"
|
||||
- "--gloglevel"
|
||||
- "{{ .Values.controller.logging.globallevel }}"
|
||||
- "--log-format"
|
||||
- "{{ .Values.controller.logging.format }}"
|
||||
{{- if .Values.singleNamespace }}
|
||||
- "--namespaced"
|
||||
{{- end }}
|
||||
{{- with .Values.controller.workflowWorkers }}
|
||||
- "--workflow-workers"
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.workflowTTLWorkers }}
|
||||
- "--workflow-ttl-workers"
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.podCleanupWorkers }}
|
||||
- "--pod-cleanup-workers"
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.cronWorkflowWorkers }}
|
||||
- "--cron-workflow-workers"
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.extraArgs }}
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{- end }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.controller.securityContext | nindent 12 }}
|
||||
env:
|
||||
- name: ARGO_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
apiVersion: v1
|
||||
fieldPath: metadata.namespace
|
||||
- name: LEADER_ELECTION_IDENTITY
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
apiVersion: v1
|
||||
fieldPath: metadata.name
|
||||
{{- if eq (int .Values.controller.replicas) 1 }}
|
||||
- name: LEADER_ELECTION_DISABLE
|
||||
value: "true"
|
||||
{{- end }}
|
||||
{{- with .Values.controller.extraEnv }}
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
resources:
|
||||
{{- toYaml .Values.controller.resources | nindent 12 }}
|
||||
{{- with .Values.controller.volumeMounts }}
|
||||
volumeMounts:
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: {{ .Values.controller.metricsConfig.portName }}
|
||||
containerPort: {{ .Values.controller.metricsConfig.port }}
|
||||
- containerPort: 6060
|
||||
livenessProbe: {{ .Values.controller.livenessProbe | toYaml | nindent 12 }}
|
||||
{{- with .Values.controller.extraContainers }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.images.pullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.volumes }}
|
||||
volumes:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.topologySpreadConstraints }}
|
||||
topologySpreadConstraints:
|
||||
{{- range $constraint := . }}
|
||||
- {{ toYaml $constraint | nindent 8 | trim }}
|
||||
{{- if not $constraint.labelSelector }}
|
||||
labelSelector:
|
||||
matchLabels:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" $ "name" $.Values.controller.name) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.priorityClassName }}
|
||||
priorityClassName: {{ . }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,16 @@
|
||||
{{- if .Values.controller.serviceAccount.create }}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controllerServiceAccountName" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
{{- with .Values.controller.serviceAccount.labels }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{ with .Values.controller.serviceAccount.annotations }}
|
||||
annotations:
|
||||
{{- toYaml .| nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,47 @@
|
||||
{{- if or .Values.controller.metricsConfig.enabled .Values.controller.telemetryConfig.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
app.kubernetes.io/version: {{ include "argo-workflows.controller_chart_version_label" . }}
|
||||
{{- with .Values.controller.serviceLabels }}
|
||||
{{ toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.serviceAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4}}
|
||||
{{- end }}
|
||||
spec:
|
||||
ports:
|
||||
{{- if .Values.controller.metricsConfig.enabled }}
|
||||
- name: {{ .Values.controller.metricsConfig.servicePortName }}
|
||||
port: {{ .Values.controller.metricsConfig.servicePort }}
|
||||
protocol: TCP
|
||||
targetPort: {{ .Values.controller.metricsConfig.port }}
|
||||
{{- end }}
|
||||
{{- if .Values.controller.telemetryConfig.enabled }}
|
||||
- name: {{ .Values.controller.telemetryConfig.servicePortName }}
|
||||
port: {{ .Values.controller.telemetryConfig.servicePort }}
|
||||
protocol: TCP
|
||||
targetPort: {{ .Values.controller.telemetryConfig.port }}
|
||||
{{- end }}
|
||||
selector:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" . "name" .Values.controller.name) | nindent 4 }}
|
||||
sessionAffinity: None
|
||||
type: {{ .Values.controller.serviceType }}
|
||||
{{- if and (eq .Values.controller.serviceType "ClusterIP") .Values.controller.metricsConfig.headlessService }}
|
||||
clusterIP: None
|
||||
{{- end }}
|
||||
{{- if eq .Values.controller.serviceType "LoadBalancer" }}
|
||||
{{- with .Values.controller.loadBalancerClass }}
|
||||
loadBalancerClass: {{ . }}
|
||||
{{- end }}
|
||||
{{- if .Values.controller.loadBalancerSourceRanges }}
|
||||
loadBalancerSourceRanges:
|
||||
{{- toYaml .Values.controller.loadBalancerSourceRanges | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,53 @@
|
||||
{{- $apiVersion := include "argo-workflows.apiVersions.monitoring" . }}
|
||||
{{- if and (.Capabilities.APIVersions.Has $apiVersion) (or .Values.controller.metricsConfig.enabled .Values.controller.telemetryConfig.enabled) .Values.controller.serviceMonitor.enabled }}
|
||||
apiVersion: {{ $apiVersion }}
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.controller.fullname" . }}
|
||||
namespace: {{ default (include "argo-workflows.namespace" .) .Values.controller.serviceMonitor.namespace | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.controller.name "name" .Values.controller.name) | nindent 4 }}
|
||||
{{- with .Values.controller.serviceMonitor.additionalLabels }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
endpoints:
|
||||
{{- if .Values.controller.metricsConfig.enabled }}
|
||||
- port: {{ .Values.controller.metricsConfig.servicePortName }}
|
||||
path: {{ .Values.controller.metricsConfig.path }}
|
||||
interval: {{ .Values.controller.metricsConfig.interval }}
|
||||
{{- with .Values.controller.metricsConfig.relabelings }}
|
||||
relabelings:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.metricsConfig.metricRelabelings }}
|
||||
metricRelabelings:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
honorLabels: {{ .Values.controller.metricsConfig.honorLabels }}
|
||||
{{- end }}
|
||||
{{- if .Values.controller.telemetryConfig.enabled }}
|
||||
- port: telemetry
|
||||
path: {{ .Values.controller.telemetryConfig.path }}
|
||||
interval: {{ .Values.controller.telemetryConfig.interval }}
|
||||
{{- with .Values.controller.metricsConfig.relabelings }}
|
||||
relabelings:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.metricsConfig.metricRelabelings }}
|
||||
metricRelabelings:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
honorLabels: {{ .Values.controller.metricsConfig.honorLabels }}
|
||||
{{- end }}
|
||||
{{- with .Values.controller.metricsConfig.targetLabels }}
|
||||
targetLabels:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
namespaceSelector:
|
||||
matchNames:
|
||||
- {{ include "argo-workflows.namespace" . | quote }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" . "name" .Values.controller.name) | nindent 6 }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,29 @@
|
||||
{{- if .Values.workflow.rbac.create -}}
|
||||
{{- range $namespace := or .Values.singleNamespace false | ternary (list "") (append .Values.controller.workflowNamespaces (coalesce .Values.workflow.namespace (include "argo-workflows.namespace" .)) | uniq) }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" $ }}-workflow
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" $ "component" $.Values.controller.name "name" $.Values.controller.name) | nindent 4 }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: {{ template "argo-workflows.fullname" $ }}-workflow
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ $.Values.workflow.serviceAccount.name }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
{{- range $.Values.workflow.rbac.serviceAccounts }}
|
||||
- kind: ServiceAccount
|
||||
name: {{ .name }}
|
||||
namespace: {{ .namespace | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,23 @@
|
||||
{{- if .Values.workflow.rbac.create -}}
|
||||
{{- range $namespace := or .Values.singleNamespace false | ternary (list "") (append .Values.controller.workflowNamespaces (coalesce .Values.workflow.namespace (include "argo-workflows.namespace" .)) | uniq) }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.fullname" $ }}-workflow
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" $ "component" $.Values.controller.name "name" $.Values.controller.name) | nindent 4 }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- workflowtaskresults
|
||||
verbs:
|
||||
- create
|
||||
- patch
|
||||
{{- end }}
|
||||
|
||||
{{- end }}
|
||||
@@ -0,0 +1,25 @@
|
||||
{{- if .Values.workflow.serviceAccount.create -}}
|
||||
{{- range $namespace := or .Values.singleNamespace false | ternary (list "") (append .Values.controller.workflowNamespaces (coalesce .Values.workflow.namespace (include "argo-workflows.namespace" .)) | uniq) }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ $.Values.workflow.serviceAccount.name }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" $ "component" $.Values.controller.name "name" $.Values.controller.name) | nindent 4 }}
|
||||
{{- with $.Values.workflow.serviceAccount.labels }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- with $namespace }}
|
||||
namespace: {{ . }}
|
||||
{{- end }}
|
||||
{{- with $.Values.workflow.serviceAccount.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- with $.Values.workflow.serviceAccount.pullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 2 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,47 @@
|
||||
{{- if .Values.crds.install }}
|
||||
{{- if or (.Values.server.clusterWorkflowTemplates.enabled) (.Values.controller.clusterWorkflowTemplates.enabled) }}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: clusterworkflowtemplates.argoproj.io
|
||||
annotations:
|
||||
{{- if .Values.crds.keep }}
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
{{- with .Values.crds.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: ClusterWorkflowTemplate
|
||||
listKind: ClusterWorkflowTemplateList
|
||||
plural: clusterworkflowtemplates
|
||||
shortNames:
|
||||
- clusterwftmpl
|
||||
- cwft
|
||||
singular: clusterworkflowtemplate
|
||||
scope: Cluster
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
required:
|
||||
- metadata
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,49 @@
|
||||
{{- if .Values.crds.install }}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: cronworkflows.argoproj.io
|
||||
annotations:
|
||||
{{- if .Values.crds.keep }}
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
{{- with .Values.crds.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: CronWorkflow
|
||||
listKind: CronWorkflowList
|
||||
plural: cronworkflows
|
||||
shortNames:
|
||||
- cwf
|
||||
- cronwf
|
||||
singular: cronworkflow
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
status:
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
required:
|
||||
- metadata
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
{{- end }}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,690 @@
|
||||
{{- if .Values.crds.install }}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: workfloweventbindings.argoproj.io
|
||||
annotations:
|
||||
{{- if .Values.crds.keep }}
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
{{- with .Values.crds.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: WorkflowEventBinding
|
||||
listKind: WorkflowEventBindingList
|
||||
plural: workfloweventbindings
|
||||
shortNames:
|
||||
- wfeb
|
||||
singular: workfloweventbinding
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
properties:
|
||||
event:
|
||||
properties:
|
||||
selector:
|
||||
type: string
|
||||
required:
|
||||
- selector
|
||||
type: object
|
||||
submit:
|
||||
properties:
|
||||
arguments:
|
||||
properties:
|
||||
artifacts:
|
||||
items:
|
||||
properties:
|
||||
archive:
|
||||
properties:
|
||||
none:
|
||||
type: object
|
||||
tar:
|
||||
properties:
|
||||
compressionLevel:
|
||||
format: int32
|
||||
type: integer
|
||||
type: object
|
||||
zip:
|
||||
type: object
|
||||
type: object
|
||||
archiveLogs:
|
||||
type: boolean
|
||||
artifactGC:
|
||||
properties:
|
||||
podMetadata:
|
||||
properties:
|
||||
annotations:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
labels:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
type: object
|
||||
serviceAccountName:
|
||||
type: string
|
||||
strategy:
|
||||
enum:
|
||||
- ""
|
||||
- OnWorkflowCompletion
|
||||
- OnWorkflowDeletion
|
||||
- Never
|
||||
type: string
|
||||
type: object
|
||||
artifactory:
|
||||
properties:
|
||||
passwordSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
url:
|
||||
type: string
|
||||
usernameSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
required:
|
||||
- url
|
||||
type: object
|
||||
azure:
|
||||
properties:
|
||||
accountKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
blob:
|
||||
type: string
|
||||
container:
|
||||
type: string
|
||||
endpoint:
|
||||
type: string
|
||||
useSDKCreds:
|
||||
type: boolean
|
||||
required:
|
||||
- blob
|
||||
- container
|
||||
- endpoint
|
||||
type: object
|
||||
deleted:
|
||||
type: boolean
|
||||
from:
|
||||
type: string
|
||||
fromExpression:
|
||||
type: string
|
||||
gcs:
|
||||
properties:
|
||||
bucket:
|
||||
type: string
|
||||
key:
|
||||
type: string
|
||||
serviceAccountKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
git:
|
||||
properties:
|
||||
branch:
|
||||
type: string
|
||||
depth:
|
||||
format: int64
|
||||
type: integer
|
||||
disableSubmodules:
|
||||
type: boolean
|
||||
fetch:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
insecureIgnoreHostKey:
|
||||
type: boolean
|
||||
insecureSkipTLS:
|
||||
type: boolean
|
||||
passwordSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
repo:
|
||||
type: string
|
||||
revision:
|
||||
type: string
|
||||
singleBranch:
|
||||
type: boolean
|
||||
sshPrivateKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
usernameSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
required:
|
||||
- repo
|
||||
type: object
|
||||
globalName:
|
||||
type: string
|
||||
hdfs:
|
||||
properties:
|
||||
addresses:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
dataTransferProtection:
|
||||
type: string
|
||||
force:
|
||||
type: boolean
|
||||
hdfsUser:
|
||||
type: string
|
||||
krbCCacheSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
krbConfigConfigMap:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
krbKeytabSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
krbRealm:
|
||||
type: string
|
||||
krbServicePrincipalName:
|
||||
type: string
|
||||
krbUsername:
|
||||
type: string
|
||||
path:
|
||||
type: string
|
||||
required:
|
||||
- path
|
||||
type: object
|
||||
http:
|
||||
properties:
|
||||
auth:
|
||||
properties:
|
||||
basicAuth:
|
||||
properties:
|
||||
passwordSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
usernameSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
type: object
|
||||
clientCert:
|
||||
properties:
|
||||
clientCertSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
clientKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
type: object
|
||||
oauth2:
|
||||
properties:
|
||||
clientIDSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
clientSecretSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
endpointParams:
|
||||
items:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
type: array
|
||||
scopes:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
tokenURLSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
type: object
|
||||
type: object
|
||||
headers:
|
||||
items:
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
required:
|
||||
- name
|
||||
- value
|
||||
type: object
|
||||
type: array
|
||||
url:
|
||||
type: string
|
||||
required:
|
||||
- url
|
||||
type: object
|
||||
mode:
|
||||
format: int32
|
||||
type: integer
|
||||
name:
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
oss:
|
||||
properties:
|
||||
accessKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
bucket:
|
||||
type: string
|
||||
createBucketIfNotPresent:
|
||||
type: boolean
|
||||
endpoint:
|
||||
type: string
|
||||
key:
|
||||
type: string
|
||||
lifecycleRule:
|
||||
properties:
|
||||
markDeletionAfterDays:
|
||||
format: int32
|
||||
type: integer
|
||||
markInfrequentAccessAfterDays:
|
||||
format: int32
|
||||
type: integer
|
||||
type: object
|
||||
secretKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
securityToken:
|
||||
type: string
|
||||
useSDKCreds:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
path:
|
||||
type: string
|
||||
raw:
|
||||
properties:
|
||||
data:
|
||||
type: string
|
||||
required:
|
||||
- data
|
||||
type: object
|
||||
recurseMode:
|
||||
type: boolean
|
||||
s3:
|
||||
properties:
|
||||
accessKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
bucket:
|
||||
type: string
|
||||
caSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
createBucketIfNotPresent:
|
||||
properties:
|
||||
objectLocking:
|
||||
type: boolean
|
||||
type: object
|
||||
encryptionOptions:
|
||||
properties:
|
||||
enableEncryption:
|
||||
type: boolean
|
||||
kmsEncryptionContext:
|
||||
type: string
|
||||
kmsKeyId:
|
||||
type: string
|
||||
serverSideCustomerKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
type: object
|
||||
endpoint:
|
||||
type: string
|
||||
insecure:
|
||||
type: boolean
|
||||
key:
|
||||
type: string
|
||||
region:
|
||||
type: string
|
||||
roleARN:
|
||||
type: string
|
||||
secretKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
sessionTokenSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
useSDKCreds:
|
||||
type: boolean
|
||||
type: object
|
||||
subPath:
|
||||
type: string
|
||||
required:
|
||||
- name
|
||||
type: object
|
||||
type: array
|
||||
parameters:
|
||||
items:
|
||||
properties:
|
||||
default:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
enum:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
globalName:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
valueFrom:
|
||||
properties:
|
||||
configMapKeyRef:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
default:
|
||||
type: string
|
||||
event:
|
||||
type: string
|
||||
expression:
|
||||
type: string
|
||||
jqFilter:
|
||||
type: string
|
||||
jsonPath:
|
||||
type: string
|
||||
parameter:
|
||||
type: string
|
||||
path:
|
||||
type: string
|
||||
supplied:
|
||||
type: object
|
||||
type: object
|
||||
required:
|
||||
- name
|
||||
type: object
|
||||
type: array
|
||||
type: object
|
||||
metadata:
|
||||
type: object
|
||||
workflowTemplateRef:
|
||||
properties:
|
||||
clusterScope:
|
||||
type: boolean
|
||||
name:
|
||||
type: string
|
||||
type: object
|
||||
required:
|
||||
- workflowTemplateRef
|
||||
type: object
|
||||
required:
|
||||
- event
|
||||
type: object
|
||||
required:
|
||||
- metadata
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
{{- end }}
|
||||
@@ -0,0 +1,64 @@
|
||||
{{- if .Values.crds.install }}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: workflows.argoproj.io
|
||||
annotations:
|
||||
{{- if .Values.crds.keep }}
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
{{- with .Values.crds.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: Workflow
|
||||
listKind: WorkflowList
|
||||
plural: workflows
|
||||
shortNames:
|
||||
- wf
|
||||
singular: workflow
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- additionalPrinterColumns:
|
||||
- description: Status of the workflow
|
||||
jsonPath: .status.phase
|
||||
name: Status
|
||||
type: string
|
||||
- description: When the workflow was started
|
||||
format: date-time
|
||||
jsonPath: .status.startedAt
|
||||
name: Age
|
||||
type: date
|
||||
- description: Human readable message indicating details about why the workflow
|
||||
is in this condition.
|
||||
jsonPath: .status.message
|
||||
name: Message
|
||||
type: string
|
||||
name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
status:
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
required:
|
||||
- metadata
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
subresources: {}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,671 @@
|
||||
{{- if .Values.crds.install }}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: workflowtaskresults.argoproj.io
|
||||
annotations:
|
||||
{{- if .Values.crds.keep }}
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
{{- with .Values.crds.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: WorkflowTaskResult
|
||||
listKind: WorkflowTaskResultList
|
||||
plural: workflowtaskresults
|
||||
singular: workflowtaskresult
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
outputs:
|
||||
properties:
|
||||
artifacts:
|
||||
items:
|
||||
properties:
|
||||
archive:
|
||||
properties:
|
||||
none:
|
||||
type: object
|
||||
tar:
|
||||
properties:
|
||||
compressionLevel:
|
||||
format: int32
|
||||
type: integer
|
||||
type: object
|
||||
zip:
|
||||
type: object
|
||||
type: object
|
||||
archiveLogs:
|
||||
type: boolean
|
||||
artifactGC:
|
||||
properties:
|
||||
podMetadata:
|
||||
properties:
|
||||
annotations:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
labels:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
type: object
|
||||
serviceAccountName:
|
||||
type: string
|
||||
strategy:
|
||||
enum:
|
||||
- ""
|
||||
- OnWorkflowCompletion
|
||||
- OnWorkflowDeletion
|
||||
- Never
|
||||
type: string
|
||||
type: object
|
||||
artifactory:
|
||||
properties:
|
||||
passwordSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
url:
|
||||
type: string
|
||||
usernameSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
required:
|
||||
- url
|
||||
type: object
|
||||
azure:
|
||||
properties:
|
||||
accountKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
blob:
|
||||
type: string
|
||||
container:
|
||||
type: string
|
||||
endpoint:
|
||||
type: string
|
||||
useSDKCreds:
|
||||
type: boolean
|
||||
required:
|
||||
- blob
|
||||
- container
|
||||
- endpoint
|
||||
type: object
|
||||
deleted:
|
||||
type: boolean
|
||||
from:
|
||||
type: string
|
||||
fromExpression:
|
||||
type: string
|
||||
gcs:
|
||||
properties:
|
||||
bucket:
|
||||
type: string
|
||||
key:
|
||||
type: string
|
||||
serviceAccountKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
git:
|
||||
properties:
|
||||
branch:
|
||||
type: string
|
||||
depth:
|
||||
format: int64
|
||||
type: integer
|
||||
disableSubmodules:
|
||||
type: boolean
|
||||
fetch:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
insecureIgnoreHostKey:
|
||||
type: boolean
|
||||
insecureSkipTLS:
|
||||
type: boolean
|
||||
passwordSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
repo:
|
||||
type: string
|
||||
revision:
|
||||
type: string
|
||||
singleBranch:
|
||||
type: boolean
|
||||
sshPrivateKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
usernameSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
required:
|
||||
- repo
|
||||
type: object
|
||||
globalName:
|
||||
type: string
|
||||
hdfs:
|
||||
properties:
|
||||
addresses:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
dataTransferProtection:
|
||||
type: string
|
||||
force:
|
||||
type: boolean
|
||||
hdfsUser:
|
||||
type: string
|
||||
krbCCacheSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
krbConfigConfigMap:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
krbKeytabSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
krbRealm:
|
||||
type: string
|
||||
krbServicePrincipalName:
|
||||
type: string
|
||||
krbUsername:
|
||||
type: string
|
||||
path:
|
||||
type: string
|
||||
required:
|
||||
- path
|
||||
type: object
|
||||
http:
|
||||
properties:
|
||||
auth:
|
||||
properties:
|
||||
basicAuth:
|
||||
properties:
|
||||
passwordSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
usernameSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
type: object
|
||||
clientCert:
|
||||
properties:
|
||||
clientCertSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
clientKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
type: object
|
||||
oauth2:
|
||||
properties:
|
||||
clientIDSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
clientSecretSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
endpointParams:
|
||||
items:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
type: array
|
||||
scopes:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
tokenURLSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
type: object
|
||||
type: object
|
||||
headers:
|
||||
items:
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
required:
|
||||
- name
|
||||
- value
|
||||
type: object
|
||||
type: array
|
||||
url:
|
||||
type: string
|
||||
required:
|
||||
- url
|
||||
type: object
|
||||
mode:
|
||||
format: int32
|
||||
type: integer
|
||||
name:
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
oss:
|
||||
properties:
|
||||
accessKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
bucket:
|
||||
type: string
|
||||
createBucketIfNotPresent:
|
||||
type: boolean
|
||||
endpoint:
|
||||
type: string
|
||||
key:
|
||||
type: string
|
||||
lifecycleRule:
|
||||
properties:
|
||||
markDeletionAfterDays:
|
||||
format: int32
|
||||
type: integer
|
||||
markInfrequentAccessAfterDays:
|
||||
format: int32
|
||||
type: integer
|
||||
type: object
|
||||
secretKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
securityToken:
|
||||
type: string
|
||||
useSDKCreds:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
path:
|
||||
type: string
|
||||
raw:
|
||||
properties:
|
||||
data:
|
||||
type: string
|
||||
required:
|
||||
- data
|
||||
type: object
|
||||
recurseMode:
|
||||
type: boolean
|
||||
s3:
|
||||
properties:
|
||||
accessKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
bucket:
|
||||
type: string
|
||||
caSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
createBucketIfNotPresent:
|
||||
properties:
|
||||
objectLocking:
|
||||
type: boolean
|
||||
type: object
|
||||
encryptionOptions:
|
||||
properties:
|
||||
enableEncryption:
|
||||
type: boolean
|
||||
kmsEncryptionContext:
|
||||
type: string
|
||||
kmsKeyId:
|
||||
type: string
|
||||
serverSideCustomerKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
type: object
|
||||
endpoint:
|
||||
type: string
|
||||
insecure:
|
||||
type: boolean
|
||||
key:
|
||||
type: string
|
||||
region:
|
||||
type: string
|
||||
roleARN:
|
||||
type: string
|
||||
secretKeySecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
sessionTokenSecret:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
useSDKCreds:
|
||||
type: boolean
|
||||
type: object
|
||||
subPath:
|
||||
type: string
|
||||
required:
|
||||
- name
|
||||
type: object
|
||||
type: array
|
||||
exitCode:
|
||||
type: string
|
||||
parameters:
|
||||
items:
|
||||
properties:
|
||||
default:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
enum:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
globalName:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
value:
|
||||
type: string
|
||||
valueFrom:
|
||||
properties:
|
||||
configMapKeyRef:
|
||||
properties:
|
||||
key:
|
||||
type: string
|
||||
name:
|
||||
default: ""
|
||||
type: string
|
||||
optional:
|
||||
type: boolean
|
||||
required:
|
||||
- key
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
default:
|
||||
type: string
|
||||
event:
|
||||
type: string
|
||||
expression:
|
||||
type: string
|
||||
jqFilter:
|
||||
type: string
|
||||
jsonPath:
|
||||
type: string
|
||||
parameter:
|
||||
type: string
|
||||
path:
|
||||
type: string
|
||||
supplied:
|
||||
type: object
|
||||
type: object
|
||||
required:
|
||||
- name
|
||||
type: object
|
||||
type: array
|
||||
result:
|
||||
type: string
|
||||
type: object
|
||||
phase:
|
||||
type: string
|
||||
progress:
|
||||
type: string
|
||||
required:
|
||||
- metadata
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
{{- end }}
|
||||
@@ -0,0 +1,50 @@
|
||||
{{- if .Values.crds.install }}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: workflowtasksets.argoproj.io
|
||||
annotations:
|
||||
{{- if .Values.crds.keep }}
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
{{- with .Values.crds.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: WorkflowTaskSet
|
||||
listKind: WorkflowTaskSetList
|
||||
plural: workflowtasksets
|
||||
shortNames:
|
||||
- wfts
|
||||
singular: workflowtaskset
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
status:
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
required:
|
||||
- metadata
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
subresources:
|
||||
status: {}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,44 @@
|
||||
{{- if .Values.crds.install }}
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: workflowtemplates.argoproj.io
|
||||
annotations:
|
||||
{{- if .Values.crds.keep }}
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
{{- with .Values.crds.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: WorkflowTemplate
|
||||
listKind: WorkflowTemplateList
|
||||
plural: workflowtemplates
|
||||
shortNames:
|
||||
- wftmpl
|
||||
singular: workflowtemplate
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
apiVersion:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
type: object
|
||||
x-kubernetes-map-type: atomic
|
||||
x-kubernetes-preserve-unknown-fields: true
|
||||
required:
|
||||
- metadata
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
{{- end }}
|
||||
@@ -0,0 +1,8 @@
|
||||
{{ range .Values.extraObjects }}
|
||||
---
|
||||
{{ if typeIs "string" . }}
|
||||
{{- tpl . $ }}
|
||||
{{- else }}
|
||||
{{- tpl (toYaml .) $ }}
|
||||
{{- end }}
|
||||
{{ end }}
|
||||
@@ -0,0 +1,11 @@
|
||||
{{- if .Values.server.GKEbackendConfig.enabled }}
|
||||
apiVersion: {{ include "argo-workflows.apiVersions.cloudgoogle" . }}
|
||||
kind: BackendConfig
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
spec:
|
||||
{{- toYaml .Values.server.GKEbackendConfig.spec | nindent 2 }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,11 @@
|
||||
{{- if .Values.server.GKEfrontendConfig.enabled }}
|
||||
apiVersion: networking.gke.io/v1beta1
|
||||
kind: FrontendConfig
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
spec:
|
||||
{{- toYaml .Values.server.GKEfrontendConfig.spec | nindent 2 }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,12 @@
|
||||
{{- if .Values.server.GKEmanagedCertificate.enabled }}
|
||||
apiVersion: networking.gke.io/v1
|
||||
kind: ManagedCertificate
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
spec:
|
||||
domains:
|
||||
{{- with .Values.server.GKEmanagedCertificate.domains }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,145 @@
|
||||
{{- if and .Values.server.enabled .Values.server.rbac.create}}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
{{- if .Values.singleNamespace }}
|
||||
kind: Role
|
||||
{{- else }}
|
||||
kind: ClusterRole
|
||||
{{- end }}
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
{{- if .Values.singleNamespace }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
- events
|
||||
verbs:
|
||||
- get
|
||||
- watch
|
||||
- list
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods/log
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
{{- if .Values.server.sso.enabled }}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
resourceNames:
|
||||
- sso
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- create
|
||||
{{- if .Values.server.sso.rbac.enabled }}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- serviceaccounts
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
verbs:
|
||||
- get
|
||||
{{- if and .Values.server.sso.enabled .Values.server.sso.rbac.enabled }}
|
||||
{{- with .Values.server.sso.rbac.secretWhitelist }}
|
||||
resourceNames: {{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- events
|
||||
verbs:
|
||||
- watch
|
||||
- create
|
||||
- patch
|
||||
{{- if .Values.controller.persistence }}
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- secrets
|
||||
resourceNames:
|
||||
{{- with .Values.controller.persistence.postgresql }}
|
||||
- {{ .userNameSecret.name }}
|
||||
- {{ .passwordSecret.name }}
|
||||
{{- end}}
|
||||
{{- with .Values.controller.persistence.mysql }}
|
||||
- {{ .userNameSecret.name }}
|
||||
- {{ .passwordSecret.name }}
|
||||
{{- end}}
|
||||
verbs:
|
||||
- get
|
||||
{{- end}}
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- eventsources
|
||||
- sensors
|
||||
- workflows
|
||||
- workfloweventbindings
|
||||
- workflowtemplates
|
||||
- cronworkflows
|
||||
verbs:
|
||||
- create
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
|
||||
{{- if and .Values.server.clusterWorkflowTemplates.enabled (not .Values.singleNamespace) }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}-cluster-template
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- clusterworkflowtemplates
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
{{- if .Values.server.clusterWorkflowTemplates.enableEditing }}
|
||||
- create
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,45 @@
|
||||
{{- if and .Values.server.enabled .Values.server.rbac.create -}}
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
{{- if .Values.singleNamespace }}
|
||||
kind: RoleBinding
|
||||
{{ else }}
|
||||
kind: ClusterRoleBinding
|
||||
{{- end }}
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
{{- if .Values.singleNamespace }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
{{- if .Values.singleNamespace }}
|
||||
kind: Role
|
||||
{{ else }}
|
||||
kind: ClusterRole
|
||||
{{- end }}
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ template "argo-workflows.serverServiceAccountName" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
|
||||
{{- if .Values.server.clusterWorkflowTemplates.enabled }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}-cluster-template
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: {{ template "argo-workflows.server.fullname" . }}-cluster-template
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ template "argo-workflows.serverServiceAccountName" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,45 @@
|
||||
{{- if and .Values.server.enabled .Values.server.autoscaling.enabled }}
|
||||
apiVersion: {{ include "argo-workflows.apiVersion.autoscaling" . }}
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
minReplicas: {{ .Values.server.autoscaling.minReplicas }}
|
||||
maxReplicas: {{ .Values.server.autoscaling.maxReplicas }}
|
||||
metrics:
|
||||
{{- with .Values.server.autoscaling.targetMemoryUtilizationPercentage }}
|
||||
- type: Resource
|
||||
resource:
|
||||
name: memory
|
||||
{{- if eq (include "argo-workflows.apiVersion.autoscaling" $) "autoscaling/v2beta1" }}
|
||||
targetAverageUtilization: {{ . }}
|
||||
{{- else }}
|
||||
target:
|
||||
averageUtilization: {{ . }}
|
||||
type: Utilization
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.autoscaling.targetCPUUtilizationPercentage }}
|
||||
- type: Resource
|
||||
resource:
|
||||
name: cpu
|
||||
{{- if eq (include "argo-workflows.apiVersion.autoscaling" $) "autoscaling/v2beta1" }}
|
||||
targetAverageUtilization: {{ . }}
|
||||
{{- else }}
|
||||
target:
|
||||
averageUtilization: {{ . }}
|
||||
type: Utilization
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.autoscaling.behavior }}
|
||||
behavior:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,20 @@
|
||||
{{- if and .Values.server.enabled .Values.server.pdb.enabled -}}
|
||||
apiVersion: policy/v1
|
||||
kind: PodDisruptionBudget
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
spec:
|
||||
{{- if .Values.server.pdb.minAvailable }}
|
||||
minAvailable: {{ .Values.server.pdb.minAvailable }}
|
||||
{{- else if .Values.server.pdb.maxUnavailable }}
|
||||
maxUnavailable: {{ .Values.server.pdb.maxUnavailable }}
|
||||
{{- else }}
|
||||
minAvailable: 0
|
||||
{{- end }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" . "name" .Values.server.name) | nindent 6 }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,157 @@
|
||||
{{- if .Values.server.enabled -}}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
app.kubernetes.io/version: {{ include "argo-workflows.server_chart_version_label" . }}
|
||||
{{- with .Values.server.deploymentAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if not .Values.server.autoscaling.enabled }}
|
||||
replicas: {{ .Values.server.replicas }}
|
||||
{{- end }}
|
||||
revisionHistoryLimit: {{ .Values.server.revisionHistoryLimit }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" . "name" .Values.server.name) | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 8 }}
|
||||
app.kubernetes.io/version: {{ include "argo-workflows.server_chart_version_label" . }}
|
||||
{{- with .Values.server.podLabels }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.podAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
serviceAccountName: {{ template "argo-workflows.serverServiceAccountName" . }}
|
||||
{{- with .Values.server.podSecurityContext }}
|
||||
securityContext:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.hostAliases }}
|
||||
hostAliases:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.extraInitContainers }}
|
||||
initContainers:
|
||||
{{- tpl (toYaml .) $ | nindent 8 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: argo-server
|
||||
image: "{{- include "argo-workflows.image" (dict "context" . "image" .Values.server.image) }}:{{ default (include "argo-workflows.defaultTag" .) .Values.server.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.images.pullPolicy }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.server.securityContext | nindent 12 }}
|
||||
args:
|
||||
- server
|
||||
- --configmap={{ template "argo-workflows.controller.config-map.name" . }}
|
||||
{{- with .Values.server.extraArgs }}
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- if .Values.server.authMode }}
|
||||
- "--auth-mode={{ .Values.server.authMode }}"
|
||||
{{- end }}
|
||||
{{- range .Values.server.authModes }}
|
||||
- "--auth-mode={{ . }}"
|
||||
{{- end }}
|
||||
- "--secure={{ .Values.server.secure }}"
|
||||
{{- if .Values.singleNamespace }}
|
||||
- "--namespaced"
|
||||
{{- end }}
|
||||
- "--loglevel"
|
||||
- "{{ .Values.server.logging.level }}"
|
||||
- "--gloglevel"
|
||||
- "{{ .Values.server.logging.globallevel }}"
|
||||
- "--log-format"
|
||||
- "{{ .Values.server.logging.format }}"
|
||||
ports:
|
||||
- name: web
|
||||
containerPort: 2746
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 2746
|
||||
{{- if .Values.server.secure }}
|
||||
scheme: HTTPS
|
||||
{{- else }}
|
||||
scheme: HTTP
|
||||
{{- end }}
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 20
|
||||
env:
|
||||
- name: IN_CLUSTER
|
||||
value: "true"
|
||||
- name: ARGO_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
apiVersion: v1
|
||||
fieldPath: metadata.namespace
|
||||
- name: ARGO_BASE_HREF
|
||||
value: {{ .Values.server.baseHref | quote }}
|
||||
{{- with .Values.server.extraEnv }}
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
resources:
|
||||
{{- toYaml .Values.server.resources | nindent 12 }}
|
||||
volumeMounts:
|
||||
- name: tmp
|
||||
mountPath: /tmp
|
||||
{{- with .Values.server.volumeMounts }}
|
||||
{{- toYaml . | nindent 10}}
|
||||
{{- end }}
|
||||
{{- with .Values.server.lifecycle }}
|
||||
lifecycle:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.extraContainers }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.terminationGracePeriodSeconds }}
|
||||
terminationGracePeriodSeconds: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .Values.images.pullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
- name: tmp
|
||||
{{- toYaml .Values.server.tmpVolume | nindent 8 }}
|
||||
{{- with .Values.server.volumes }}
|
||||
{{- toYaml . | nindent 6}}
|
||||
{{- end }}
|
||||
{{- with .Values.server.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.topologySpreadConstraints }}
|
||||
topologySpreadConstraints:
|
||||
{{- range $constraint := . }}
|
||||
- {{ toYaml $constraint | nindent 8 | trim }}
|
||||
{{- if not $constraint.labelSelector }}
|
||||
labelSelector:
|
||||
matchLabels:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" $ "name" $.Values.server.name) | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.priorityClassName }}
|
||||
priorityClassName: {{ . }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,90 @@
|
||||
{{- if .Values.server.ingress.enabled -}}
|
||||
{{- $serviceName := include "argo-workflows.server.fullname" . -}}
|
||||
{{- $servicePort := .Values.server.servicePort -}}
|
||||
{{- $paths := .Values.server.ingress.paths -}}
|
||||
{{- $extraPaths := .Values.server.ingress.extraPaths -}}
|
||||
{{- $pathType := .Values.server.ingress.pathType -}}
|
||||
apiVersion: {{ include "argo-workflows.ingress.apiVersion" . }}
|
||||
kind: Ingress
|
||||
metadata:
|
||||
{{- if .Values.server.ingress.annotations }}
|
||||
annotations:
|
||||
{{- range $key, $value := .Values.server.ingress.annotations }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
{{- if .Values.server.ingress.labels }}
|
||||
{{- toYaml .Values.server.ingress.labels | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if eq (include "argo-workflows.ingress.apiVersion" $) "networking.k8s.io/v1" }}
|
||||
{{- with .Values.server.ingress.ingressClassName }}
|
||||
ingressClassName: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- if .Values.server.ingress.hosts }}
|
||||
{{- range $host := .Values.server.ingress.hosts }}
|
||||
- host: {{ $host }}
|
||||
http:
|
||||
paths:
|
||||
{{- if $extraPaths }}
|
||||
{{- toYaml $extraPaths | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- range $p := $paths }}
|
||||
- path: {{ $p }}
|
||||
{{- if eq (include "argo-workflows.ingress.apiVersion" $) "networking.k8s.io/v1" }}
|
||||
pathType: {{ $pathType }}
|
||||
{{- end }}
|
||||
backend:
|
||||
{{- if eq (include "argo-workflows.ingress.apiVersion" $) "networking.k8s.io/v1" }}
|
||||
service:
|
||||
name: {{ $serviceName }}
|
||||
port:
|
||||
{{- if kindIs "float64" $servicePort }}
|
||||
number: {{ $servicePort }}
|
||||
{{- else }}
|
||||
name: {{ $servicePort }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
serviceName: {{ $serviceName }}
|
||||
servicePort: {{ $servicePort }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- else }}
|
||||
- http:
|
||||
paths:
|
||||
{{- if $extraPaths }}
|
||||
{{- toYaml $extraPaths | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- range $p := $paths }}
|
||||
- path: {{ $p }}
|
||||
{{- if eq (include "argo-workflows.ingress.apiVersion" $) "networking.k8s.io/v1" }}
|
||||
pathType: {{ $pathType }}
|
||||
{{- end }}
|
||||
backend:
|
||||
{{- if eq (include "argo-workflows.ingress.apiVersion" $) "networking.k8s.io/v1" }}
|
||||
service:
|
||||
name: {{ $serviceName }}
|
||||
port:
|
||||
{{- if kindIs "float64" $servicePort }}
|
||||
number: {{ $servicePort }}
|
||||
{{- else }}
|
||||
name: {{ $servicePort }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
serviceName: {{ $serviceName }}
|
||||
servicePort: {{ $servicePort }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- if .Values.server.ingress.tls }}
|
||||
tls:
|
||||
{{- toYaml .Values.server.ingress.tls | nindent 4 }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,16 @@
|
||||
{{- if and .Values.server.enabled .Values.server.serviceAccount.create -}}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.serverServiceAccountName" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
{{- with .Values.server.serviceAccount.labels }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.serviceAccount.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,43 @@
|
||||
{{- if .Values.server.enabled -}}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "argo-workflows.server.fullname" . }}
|
||||
namespace: {{ include "argo-workflows.namespace" . | quote }}
|
||||
labels:
|
||||
{{- include "argo-workflows.labels" (dict "context" . "component" .Values.server.name "name" .Values.server.name) | nindent 4 }}
|
||||
app.kubernetes.io/version: {{ include "argo-workflows.server_chart_version_label" . }}
|
||||
{{- with .Values.server.serviceLabels }}
|
||||
{{ toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.serviceAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
ports:
|
||||
- port: {{ .Values.server.servicePort }}
|
||||
{{- with .Values.server.servicePortName }}
|
||||
name: {{ . }}
|
||||
{{- end }}
|
||||
targetPort: 2746
|
||||
{{- if and (eq .Values.server.serviceType "NodePort") .Values.server.serviceNodePort }}
|
||||
nodePort: {{ .Values.server.serviceNodePort }}
|
||||
{{- end }}
|
||||
selector:
|
||||
{{- include "argo-workflows.selectorLabels" (dict "context" . "name" .Values.server.name) | nindent 4 }}
|
||||
sessionAffinity: None
|
||||
type: {{ .Values.server.serviceType }}
|
||||
{{- if eq .Values.server.serviceType "LoadBalancer" }}
|
||||
{{- with .Values.controller.loadBalancerClass }}
|
||||
loadBalancerClass: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .Values.server.loadBalancerIP }}
|
||||
loadBalancerIP: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- if .Values.server.loadBalancerSourceRanges }}
|
||||
loadBalancerSourceRanges:
|
||||
{{- toYaml .Values.server.loadBalancerSourceRanges | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
943
utils/assets/charts/argo-workflows/values.yaml
Normal file
943
utils/assets/charts/argo-workflows/values.yaml
Normal file
@@ -0,0 +1,943 @@
|
||||
images:
|
||||
# -- Common tag for Argo Workflows images. Defaults to `.Chart.AppVersion`.
|
||||
tag: ""
|
||||
# -- imagePullPolicy to apply to all containers
|
||||
pullPolicy: Always
|
||||
# -- Secrets with credentials to pull images from a private registry
|
||||
pullSecrets: []
|
||||
# - name: argo-pull-secret
|
||||
|
||||
## Custom resource configuration
|
||||
crds:
|
||||
# -- Install and upgrade CRDs
|
||||
install: true
|
||||
# -- Keep CRDs on chart uninstall
|
||||
keep: true
|
||||
# -- Annotations to be added to all CRDs
|
||||
annotations: {}
|
||||
|
||||
# -- Create clusterroles that extend existing clusterroles to interact with argo-cd crds
|
||||
## Ref: https://kubernetes.io/docs/reference/access-authn-authz/rbac/#aggregated-clusterroles
|
||||
createAggregateRoles: true
|
||||
|
||||
# -- String to partially override "argo-workflows.fullname" template
|
||||
nameOverride:
|
||||
|
||||
# -- String to fully override "argo-workflows.fullname" template
|
||||
fullnameOverride:
|
||||
|
||||
# -- Override the namespace
|
||||
# @default -- `.Release.Namespace`
|
||||
namespaceOverride: ""
|
||||
|
||||
# -- Labels to set on all resources
|
||||
commonLabels: {}
|
||||
|
||||
# -- Override the Kubernetes version, which is used to evaluate certain manifests
|
||||
kubeVersionOverride: ""
|
||||
|
||||
# Override APIVersions
|
||||
apiVersionOverrides:
|
||||
# -- String to override apiVersion of autoscaling rendered by this helm chart
|
||||
autoscaling: "" # autoscaling/v2
|
||||
# -- String to override apiVersion of GKE resources rendered by this helm chart
|
||||
cloudgoogle: "" # cloud.google.com/v1
|
||||
# -- String to override apiVersion of monitoring CRDs (ServiceMonitor) rendered by this helm chart
|
||||
monitoring: "" # monitoring.coreos.com/v1
|
||||
|
||||
# -- Restrict Argo to operate only in a single namespace (the namespace of the
|
||||
# Helm release) by apply Roles and RoleBindings instead of the Cluster
|
||||
# equivalents, and start workflow-controller with the --namespaced flag. Use it
|
||||
# in clusters with strict access policy.
|
||||
singleNamespace: false
|
||||
|
||||
workflow:
|
||||
# -- Deprecated; use controller.workflowNamespaces instead.
|
||||
namespace:
|
||||
serviceAccount:
|
||||
# -- Specifies whether a service account should be created
|
||||
create: false
|
||||
# -- Labels applied to created service account
|
||||
labels: {}
|
||||
# -- Annotations applied to created service account
|
||||
annotations: {}
|
||||
# -- Service account which is used to run workflows
|
||||
name: "argo-workflow"
|
||||
# -- Secrets with credentials to pull images from a private registry. Same format as `.Values.images.pullSecrets`
|
||||
pullSecrets: []
|
||||
rbac:
|
||||
# -- Adds Role and RoleBinding for the above specified service account to be able to run workflows.
|
||||
# A Role and Rolebinding pair is also created for each namespace in controller.workflowNamespaces (see below)
|
||||
create: true
|
||||
# -- Allows permissions for the Argo Agent. Only required if using http/plugin templates
|
||||
agentPermissions: false
|
||||
# -- Allows permissions for the Argo Artifact GC pod. Only required if using artifact gc
|
||||
artifactGC: false
|
||||
# -- Extra service accounts to be added to the RoleBinding
|
||||
serviceAccounts: []
|
||||
# - name: my-service-account
|
||||
# namespace: my-namespace
|
||||
|
||||
controller:
|
||||
image:
|
||||
# -- Registry to use for the controller
|
||||
registry: quay.io
|
||||
# -- Registry to use for the controller
|
||||
repository: argoproj/workflow-controller
|
||||
# -- Image tag for the workflow controller. Defaults to `.Values.images.tag`.
|
||||
tag: ""
|
||||
# -- parallelism dictates how many workflows can be running at the same time
|
||||
parallelism:
|
||||
# -- Globally limits the rate at which pods are created.
|
||||
# This is intended to mitigate flooding of the Kubernetes API server by workflows with a large amount of
|
||||
# parallel nodes.
|
||||
resourceRateLimit: {}
|
||||
# limit: 10
|
||||
# burst: 1
|
||||
|
||||
rbac:
|
||||
# -- Adds Role and RoleBinding for the controller.
|
||||
create: true
|
||||
# -- Allows controller to get, list, and watch certain k8s secrets
|
||||
secretWhitelist: []
|
||||
# -- Allows controller to get, list and watch all k8s secrets. Can only be used if secretWhitelist is empty.
|
||||
accessAllSecrets: false
|
||||
# -- Allows controller to create and update ConfigMaps. Enables memoization feature
|
||||
writeConfigMaps: false
|
||||
|
||||
configMap:
|
||||
# -- Create a ConfigMap for the controller
|
||||
create: true
|
||||
# -- ConfigMap name
|
||||
name: ""
|
||||
# -- ConfigMap annotations
|
||||
annotations: {}
|
||||
|
||||
# -- Limits the maximum number of incomplete workflows in a namespace
|
||||
namespaceParallelism:
|
||||
# -- Resolves ongoing, uncommon AWS EKS bug: https://github.com/argoproj/argo-workflows/pull/4224
|
||||
initialDelay:
|
||||
# -- deploymentAnnotations is an optional map of annotations to be applied to the controller Deployment
|
||||
deploymentAnnotations: {}
|
||||
# -- podAnnotations is an optional map of annotations to be applied to the controller Pods
|
||||
podAnnotations: {}
|
||||
# -- Optional labels to add to the controller pods
|
||||
podLabels: {}
|
||||
# -- SecurityContext to set on the controller pods
|
||||
podSecurityContext: {}
|
||||
# podPortName: http
|
||||
metricsConfig:
|
||||
# -- Enables prometheus metrics server
|
||||
enabled: false
|
||||
# -- Path is the path where metrics are emitted. Must start with a "/".
|
||||
path: /metrics
|
||||
# -- Frequency at which prometheus scrapes metrics
|
||||
interval: 30s
|
||||
# -- Port is the port where metrics are emitted
|
||||
port: 9090
|
||||
# -- How often custom metrics are cleared from memory
|
||||
metricsTTL: ""
|
||||
# -- Flag that instructs prometheus to ignore metric emission errors.
|
||||
ignoreErrors: false
|
||||
# -- Flag that use a self-signed cert for TLS
|
||||
secure: false
|
||||
# -- Container metrics port name
|
||||
portName: metrics
|
||||
# -- Service metrics port
|
||||
servicePort: 8080
|
||||
# -- Service metrics port name
|
||||
servicePortName: metrics
|
||||
# -- Flag to enable headless service
|
||||
headlessService: false
|
||||
# -- When true, honorLabels preserves the metric’s labels when they collide with the target’s labels.
|
||||
## Ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#honorlabels
|
||||
honorLabels: false
|
||||
# -- ServiceMonitor relabel configs to apply to samples before scraping
|
||||
## Ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#relabelconfig
|
||||
relabelings: []
|
||||
# -- ServiceMonitor metric relabel configs to apply to samples before ingestion
|
||||
## Ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#endpoint
|
||||
metricRelabelings: []
|
||||
# -- ServiceMonitor will add labels from the service to the Prometheus metric
|
||||
## Ref: https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#servicemonitorspec
|
||||
targetLabels: []
|
||||
# -- the controller container's securityContext
|
||||
securityContext:
|
||||
readOnlyRootFilesystem: true
|
||||
runAsNonRoot: true
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
# -- enable Workflow Archive to store the status of workflows. Postgres and MySQL (>= 5.7.8) are available.
|
||||
## Ref: https://argo-workflows.readthedocs.io/en/stable/workflow-archive/
|
||||
persistence: {}
|
||||
# connectionPool:
|
||||
# maxIdleConns: 100
|
||||
# maxOpenConns: 0
|
||||
# # save the entire workflow into etcd and DB
|
||||
# nodeStatusOffLoad: false
|
||||
# # enable archiving of old workflows
|
||||
# archive: false
|
||||
# postgresql:
|
||||
# host: localhost
|
||||
# port: 5432
|
||||
# database: postgres
|
||||
# tableName: argo_workflows
|
||||
# # the database secrets must be in the same namespace of the controller
|
||||
# userNameSecret:
|
||||
# name: argo-postgres-config
|
||||
# key: username
|
||||
# passwordSecret:
|
||||
# name: argo-postgres-config
|
||||
# key: password
|
||||
# ssl: true
|
||||
# # sslMode must be one of: disable, require, verify-ca, verify-full
|
||||
# # you can find more information about those ssl options here: https://godoc.org/github.com/lib/pq
|
||||
# sslMode: require
|
||||
# mysql:
|
||||
# host: localhost
|
||||
# port: 3306
|
||||
# database: argo
|
||||
# tableName: argo_workflows
|
||||
# userNameSecret:
|
||||
# name: argo-mysql-config
|
||||
# key: username
|
||||
# passwordSecret:
|
||||
# name: argo-mysql-config
|
||||
# key: password
|
||||
|
||||
# -- Default values that will apply to all Workflows from this controller, unless overridden on the Workflow-level.
|
||||
# Only valid for 2.7+
|
||||
## See more: https://argo-workflows.readthedocs.io/en/stable/default-workflow-specs/
|
||||
workflowDefaults: {}
|
||||
# spec:
|
||||
# ttlStrategy:
|
||||
# secondsAfterCompletion: 86400
|
||||
# # Ref: https://argo-workflows.readthedocs.io/en/stable/artifact-repository-ref/
|
||||
# artifactRepositoryRef:
|
||||
# configMap: my-artifact-repository # default is "artifact-repositories"
|
||||
# key: v2-s3-artifact-repository # default can be set by the `workflows.argoproj.io/default-artifact-repository` annotation in config map.
|
||||
|
||||
# -- Number of workflow workers
|
||||
workflowWorkers: # 32
|
||||
# -- Number of workflow TTL workers
|
||||
workflowTTLWorkers: # 4
|
||||
# -- Number of pod cleanup workers
|
||||
podCleanupWorkers: # 4
|
||||
# -- Number of cron workflow workers
|
||||
# Only valid for 3.5+
|
||||
cronWorkflowWorkers: # 8
|
||||
# -- Restricts the Workflows that the controller will process.
|
||||
# Only valid for 2.9+
|
||||
workflowRestrictions: {}
|
||||
# templateReferencing: Strict|Secure
|
||||
|
||||
# telemetryConfig controls the path and port for prometheus telemetry. Telemetry is enabled and emitted in the same endpoint
|
||||
# as metrics by default, but can be overridden using this config.
|
||||
telemetryConfig:
|
||||
# -- Enables prometheus telemetry server
|
||||
enabled: false
|
||||
# -- telemetry path
|
||||
path: /telemetry
|
||||
# -- Frequency at which prometheus scrapes telemetry data
|
||||
interval: 30s
|
||||
# -- telemetry container port
|
||||
port: 8081
|
||||
# -- How often custom metrics are cleared from memory
|
||||
metricsTTL: ""
|
||||
# -- Flag that instructs prometheus to ignore metric emission errors.
|
||||
ignoreErrors: false
|
||||
# -- Flag that use a self-signed cert for TLS
|
||||
secure: false
|
||||
# -- telemetry service port
|
||||
servicePort: 8081
|
||||
# -- telemetry service port name
|
||||
servicePortName: telemetry
|
||||
serviceMonitor:
|
||||
# -- Enable a prometheus ServiceMonitor
|
||||
enabled: false
|
||||
# -- Prometheus ServiceMonitor labels
|
||||
additionalLabels: {}
|
||||
# -- Prometheus ServiceMonitor namespace
|
||||
namespace: "" # "monitoring"
|
||||
serviceAccount:
|
||||
# -- Create a service account for the controller
|
||||
create: true
|
||||
# -- Service account name
|
||||
name: ""
|
||||
# -- Labels applied to created service account
|
||||
labels: {}
|
||||
# -- Annotations applied to created service account
|
||||
annotations: {}
|
||||
|
||||
# -- Workflow controller name string
|
||||
name: workflow-controller
|
||||
|
||||
# -- Specify all namespaces where this workflow controller instance will manage
|
||||
# workflows. This controls where the service account and RBAC resources will
|
||||
# be created. Only valid when singleNamespace is false.
|
||||
workflowNamespaces:
|
||||
- default
|
||||
|
||||
instanceID:
|
||||
# -- Configures the controller to filter workflow submissions
|
||||
# to only those which have a matching instanceID attribute.
|
||||
## NOTE: If `instanceID.enabled` is set to `true` then either `instanceID.userReleaseName`
|
||||
## or `instanceID.explicitID` must be defined.
|
||||
enabled: false
|
||||
# -- Use ReleaseName as instanceID
|
||||
useReleaseName: false
|
||||
# useReleaseName: true
|
||||
|
||||
# -- Use a custom instanceID
|
||||
explicitID: ""
|
||||
# explicitID: unique-argo-controller-identifier
|
||||
|
||||
logging:
|
||||
# -- Set the logging level (one of: `debug`, `info`, `warn`, `error`)
|
||||
level: info
|
||||
# -- Set the glog logging level
|
||||
globallevel: "0"
|
||||
# -- Set the logging format (one of: `text`, `json`)
|
||||
format: "text"
|
||||
|
||||
# -- Service type of the controller Service
|
||||
serviceType: ClusterIP
|
||||
# -- Annotations to be applied to the controller Service
|
||||
serviceAnnotations: {}
|
||||
# -- Optional labels to add to the controller Service
|
||||
serviceLabels: {}
|
||||
# -- The class of the load balancer implementation
|
||||
loadBalancerClass: ""
|
||||
# -- Source ranges to allow access to service from. Only applies to service type `LoadBalancer`
|
||||
loadBalancerSourceRanges: []
|
||||
|
||||
# -- Resource limits and requests for the controller
|
||||
resources: {}
|
||||
|
||||
# -- Configure liveness [probe] for the controller
|
||||
# @default -- See [values.yaml]
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
port: 6060
|
||||
path: /healthz
|
||||
failureThreshold: 3
|
||||
initialDelaySeconds: 90
|
||||
periodSeconds: 60
|
||||
timeoutSeconds: 30
|
||||
|
||||
# -- Extra environment variables to provide to the controller container
|
||||
extraEnv: []
|
||||
# - name: FOO
|
||||
# value: "bar"
|
||||
|
||||
# -- Extra arguments to be added to the controller
|
||||
extraArgs: []
|
||||
# -- Additional volume mounts to the controller main container
|
||||
volumeMounts: []
|
||||
# -- Additional volumes to the controller pod
|
||||
volumes: []
|
||||
# -- The number of controller pods to run
|
||||
replicas: 1
|
||||
# -- The number of revisions to keep.
|
||||
revisionHistoryLimit: 10
|
||||
|
||||
pdb:
|
||||
# -- Configure [Pod Disruption Budget] for the controller pods
|
||||
enabled: false
|
||||
# minAvailable: 1
|
||||
# maxUnavailable: 1
|
||||
|
||||
# -- [Node selector]
|
||||
nodeSelector:
|
||||
kubernetes.io/os: linux
|
||||
# -- [Tolerations] for use with node taints
|
||||
tolerations: []
|
||||
# -- Assign custom [affinity] rules
|
||||
affinity: {}
|
||||
|
||||
# -- Assign custom [TopologySpreadConstraints] rules to the workflow controller
|
||||
## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
|
||||
## If labelSelector is left out, it will default to the labelSelector configuration of the deployment
|
||||
topologySpreadConstraints: []
|
||||
# - maxSkew: 1
|
||||
# topologyKey: topology.kubernetes.io/zone
|
||||
# whenUnsatisfiable: DoNotSchedule
|
||||
|
||||
# -- Leverage a PriorityClass to ensure your pods survive resource shortages.
|
||||
## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
||||
priorityClassName: ""
|
||||
|
||||
# -- Configure Argo Server to show custom [links]
|
||||
## Ref: https://argo-workflows.readthedocs.io/en/stable/links/
|
||||
links: []
|
||||
# -- Configure Argo Server to show custom [columns]
|
||||
## Ref: https://github.com/argoproj/argo-workflows/pull/10693
|
||||
columns: []
|
||||
# -- Set ui navigation bar background color
|
||||
navColor: ""
|
||||
clusterWorkflowTemplates:
|
||||
# -- Create a ClusterRole and CRB for the controller to access ClusterWorkflowTemplates.
|
||||
enabled: true
|
||||
# -- Extra service accounts to be added to the ClusterRoleBinding
|
||||
serviceAccounts: []
|
||||
# - name: my-service-account
|
||||
# namespace: my-namespace
|
||||
# -- Extra containers to be added to the controller deployment
|
||||
extraContainers: []
|
||||
|
||||
# -- Enables init containers to be added to the controller deployment
|
||||
extraInitContainers: []
|
||||
|
||||
# -- Workflow retention by number of workflows
|
||||
retentionPolicy: {}
|
||||
# completed: 10
|
||||
# failed: 3
|
||||
# errored: 3
|
||||
|
||||
nodeEvents:
|
||||
# -- Enable to emit events on node completion.
|
||||
## This can take up a lot of space in k8s (typically etcd) resulting in errors when trying to create new events:
|
||||
## "Unable to create audit event: etcdserver: mvcc: database space exceeded"
|
||||
enabled: true
|
||||
|
||||
workflowEvents:
|
||||
# -- Enable to emit events on workflow status changes.
|
||||
## This can take up a lot of space in k8s (typically etcd), resulting in errors when trying to create new events:
|
||||
## "Unable to create audit event: etcdserver: mvcc: database space exceeded"
|
||||
enabled: true
|
||||
|
||||
# -- Configure when workflow controller runs in a different k8s cluster with the workflow workloads,
|
||||
# or needs to communicate with the k8s apiserver using an out-of-cluster kubeconfig secret.
|
||||
# @default -- `{}` (See [values.yaml])
|
||||
kubeConfig: {}
|
||||
# # name of the kubeconfig secret, may not be empty when kubeConfig specified
|
||||
# secretName: kubeconfig-secret
|
||||
# # key of the kubeconfig secret, may not be empty when kubeConfig specified
|
||||
# secretKey: kubeconfig
|
||||
# # mounting path of the kubeconfig secret, default to /kube/config
|
||||
# mountPath: /kubeconfig/mount/path
|
||||
# # volume name when mounting the secret, default to kubeconfig
|
||||
# volumeName: kube-config-volume
|
||||
|
||||
# -- Specifies the duration in seconds before a terminating pod is forcefully killed. A zero value indicates that the pod will be forcefully terminated immediately.
|
||||
# @default -- `30` seconds (Kubernetes default)
|
||||
podGCGracePeriodSeconds:
|
||||
|
||||
# -- The duration in seconds before the pods in the GC queue get deleted. A zero value indicates that the pods will be deleted immediately.
|
||||
# @default -- `5s` (Argo Workflows default)
|
||||
podGCDeleteDelayDuration: ""
|
||||
|
||||
# mainContainer adds default config for main container that could be overriden in workflows template
|
||||
mainContainer:
|
||||
# -- imagePullPolicy to apply to Workflow main container. Defaults to `.Values.images.pullPolicy`.
|
||||
imagePullPolicy: ""
|
||||
# -- Resource limits and requests for the Workflow main container
|
||||
resources: {}
|
||||
# -- Adds environment variables for the Workflow main container
|
||||
env: []
|
||||
# -- Adds reference environment variables for the Workflow main container
|
||||
envFrom: []
|
||||
# -- sets security context for the Workflow main container
|
||||
securityContext: {}
|
||||
|
||||
# executor controls how the init and wait container should be customized
|
||||
executor:
|
||||
image:
|
||||
# -- Registry to use for the Workflow Executors
|
||||
registry: quay.io
|
||||
# -- Repository to use for the Workflow Executors
|
||||
repository: argoproj/argoexec
|
||||
# -- Image tag for the workflow executor. Defaults to `.Values.images.tag`.
|
||||
tag: ""
|
||||
# -- Image PullPolicy to use for the Workflow Executors. Defaults to `.Values.images.pullPolicy`.
|
||||
pullPolicy: ""
|
||||
# -- Resource limits and requests for the Workflow Executors
|
||||
resources: {}
|
||||
# -- Passes arguments to the executor processes
|
||||
args: []
|
||||
# -- Adds environment variables for the executor.
|
||||
env: []
|
||||
# -- sets security context for the executor container
|
||||
securityContext: {}
|
||||
|
||||
server:
|
||||
# -- Deploy the Argo Server
|
||||
enabled: true
|
||||
# -- Value for base href in index.html. Used if the server is running behind reverse proxy under subpath different from /.
|
||||
## only updates base url of resources on client side,
|
||||
## it's expected that a proxy server rewrites the request URL and gets rid of this prefix
|
||||
## https://github.com/argoproj/argo-workflows/issues/716#issuecomment-433213190
|
||||
baseHref: /
|
||||
image:
|
||||
# -- Registry to use for the server
|
||||
registry: quay.io
|
||||
# -- Repository to use for the server
|
||||
repository: argoproj/argocli
|
||||
# -- Image tag for the Argo Workflows server. Defaults to `.Values.images.tag`.
|
||||
tag: ""
|
||||
# -- optional map of annotations to be applied to the ui Deployment
|
||||
deploymentAnnotations: {}
|
||||
# -- optional map of annotations to be applied to the ui Pods
|
||||
podAnnotations: {}
|
||||
# -- Optional labels to add to the UI pods
|
||||
podLabels: {}
|
||||
# -- SecurityContext to set on the server pods
|
||||
podSecurityContext: {}
|
||||
rbac:
|
||||
# -- Adds Role and RoleBinding for the server.
|
||||
create: true
|
||||
# -- Servers container-level security context
|
||||
securityContext:
|
||||
readOnlyRootFilesystem: false
|
||||
runAsNonRoot: true
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
# -- Server name string
|
||||
name: server
|
||||
# -- Service type for server pods
|
||||
serviceType: ClusterIP
|
||||
# -- Service port for server
|
||||
servicePort: 2746
|
||||
# -- Service node port
|
||||
serviceNodePort: # 32746
|
||||
# -- Service port name
|
||||
servicePortName: "" # http
|
||||
|
||||
# -- Mapping between IP and hostnames that will be injected as entries in the pod's hosts files
|
||||
hostAliases: []
|
||||
# - ip: 10.20.30.40
|
||||
# hostnames:
|
||||
# - git.myhostname
|
||||
|
||||
serviceAccount:
|
||||
# -- Create a service account for the server
|
||||
create: true
|
||||
# -- Service account name
|
||||
name: ""
|
||||
# -- Labels applied to created service account
|
||||
labels: {}
|
||||
# -- Annotations applied to created service account
|
||||
annotations: {}
|
||||
|
||||
# -- Annotations to be applied to the UI Service
|
||||
serviceAnnotations: {}
|
||||
# -- Optional labels to add to the UI Service
|
||||
serviceLabels: {}
|
||||
# -- The class of the load balancer implementation
|
||||
loadBalancerClass: ""
|
||||
# -- Static IP address to assign to loadBalancer service type `LoadBalancer`
|
||||
loadBalancerIP: ""
|
||||
# -- Source ranges to allow access to service from. Only applies to service type `LoadBalancer`
|
||||
loadBalancerSourceRanges: []
|
||||
# -- Resource limits and requests for the server
|
||||
resources: {}
|
||||
# -- The number of server pods to run
|
||||
replicas: 1
|
||||
# -- The number of revisions to keep.
|
||||
revisionHistoryLimit: 10
|
||||
## Argo Server Horizontal Pod Autoscaler
|
||||
autoscaling:
|
||||
# -- Enable Horizontal Pod Autoscaler ([HPA]) for the Argo Server
|
||||
enabled: false
|
||||
# -- Minimum number of replicas for the Argo Server [HPA]
|
||||
minReplicas: 1
|
||||
# -- Maximum number of replicas for the Argo Server [HPA]
|
||||
maxReplicas: 5
|
||||
# -- Average CPU utilization percentage for the Argo Server [HPA]
|
||||
targetCPUUtilizationPercentage: 50
|
||||
# -- Average memory utilization percentage for the Argo Server [HPA]
|
||||
targetMemoryUtilizationPercentage: 50
|
||||
# -- Configures the scaling behavior of the target in both Up and Down directions.
|
||||
# This is only available on HPA apiVersion `autoscaling/v2beta2` and newer
|
||||
behavior: {}
|
||||
# scaleDown:
|
||||
# stabilizationWindowSeconds: 300
|
||||
# policies:
|
||||
# - type: Pods
|
||||
# value: 1
|
||||
# periodSeconds: 180
|
||||
# scaleUp:
|
||||
# stabilizationWindowSeconds: 300
|
||||
# policies:
|
||||
# - type: Pods
|
||||
# value: 2
|
||||
pdb:
|
||||
# -- Configure [Pod Disruption Budget] for the server pods
|
||||
enabled: false
|
||||
# minAvailable: 1
|
||||
# maxUnavailable: 1
|
||||
|
||||
# -- [Node selector]
|
||||
nodeSelector:
|
||||
kubernetes.io/os: linux
|
||||
|
||||
# -- [Tolerations] for use with node taints
|
||||
tolerations: []
|
||||
|
||||
# -- Assign custom [affinity] rules
|
||||
affinity: {}
|
||||
|
||||
# -- Assign custom [TopologySpreadConstraints] rules to the argo server
|
||||
## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
|
||||
## If labelSelector is left out, it will default to the labelSelector configuration of the deployment
|
||||
topologySpreadConstraints: []
|
||||
# - maxSkew: 1
|
||||
# topologyKey: topology.kubernetes.io/zone
|
||||
# whenUnsatisfiable: DoNotSchedule
|
||||
|
||||
# -- Leverage a PriorityClass to ensure your pods survive resource shortages
|
||||
## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/
|
||||
priorityClassName: ""
|
||||
|
||||
# -- Run the argo server in "secure" mode. Configure this value instead of `--secure` in extraArgs.
|
||||
## See the following documentation for more details on secure mode:
|
||||
## https://argo-workflows.readthedocs.io/en/stable/tls/
|
||||
secure: false
|
||||
|
||||
# -- Extra environment variables to provide to the argo-server container
|
||||
extraEnv: []
|
||||
# - name: FOO
|
||||
# value: "bar"
|
||||
|
||||
# -- Deprecated; use server.authModes instead.
|
||||
authMode: ""
|
||||
|
||||
# -- A list of supported authentication modes. Available values are `server`, `client`, or `sso`. If you provide sso, please configure `.Values.server.sso` as well.
|
||||
## Ref: https://argo-workflows.readthedocs.io/en/stable/argo-server-auth-mode/
|
||||
authModes: []
|
||||
|
||||
# -- Extra arguments to provide to the Argo server binary.
|
||||
## Ref: https://argo-workflows.readthedocs.io/en/stable/argo-server/#options
|
||||
extraArgs: []
|
||||
|
||||
logging:
|
||||
# -- Set the logging level (one of: `debug`, `info`, `warn`, `error`)
|
||||
level: info
|
||||
# -- Set the glog logging level
|
||||
globallevel: "0"
|
||||
# -- Set the logging format (one of: `text`, `json`)
|
||||
format: "text"
|
||||
|
||||
# -- Volume to be mounted in Pods for temporary files.
|
||||
tmpVolume:
|
||||
emptyDir: {}
|
||||
# -- Additional volume mounts to the server main container.
|
||||
volumeMounts: []
|
||||
# -- Additional volumes to the server pod.
|
||||
volumes: []
|
||||
|
||||
## Ingress configuration.
|
||||
# ref: https://kubernetes.io/docs/concepts/services-networking/ingress/
|
||||
ingress:
|
||||
# -- Enable an ingress resource
|
||||
enabled: false
|
||||
# -- Additional ingress annotations
|
||||
annotations: {}
|
||||
# -- Additional ingress labels
|
||||
labels: {}
|
||||
# -- Defines which ingress controller will implement the resource
|
||||
ingressClassName: ""
|
||||
|
||||
# -- List of ingress hosts
|
||||
## Hostnames must be provided if Ingress is enabled.
|
||||
## Secrets must be manually created in the namespace
|
||||
hosts: []
|
||||
# - argoworkflows.example.com
|
||||
|
||||
# -- List of ingress paths
|
||||
paths:
|
||||
- /
|
||||
|
||||
# -- Ingress path type. One of `Exact`, `Prefix` or `ImplementationSpecific`
|
||||
pathType: Prefix
|
||||
# -- Additional ingress paths
|
||||
extraPaths: []
|
||||
# - path: /*
|
||||
# backend:
|
||||
# serviceName: ssl-redirect
|
||||
# servicePort: use-annotation
|
||||
## for Kubernetes >=1.19 (when "networking.k8s.io/v1" is used)
|
||||
# - path: /*
|
||||
# pathType: Prefix
|
||||
# backend:
|
||||
# service
|
||||
# name: ssl-redirect
|
||||
# port:
|
||||
# name: use-annotation
|
||||
|
||||
# -- Ingress TLS configuration
|
||||
tls: []
|
||||
# - secretName: argoworkflows-example-tls
|
||||
# hosts:
|
||||
# - argoworkflows.example.com
|
||||
|
||||
## Create a Google Backendconfig for use with the GKE Ingress Controller
|
||||
## https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-configuration#configuring_ingress_features_through_backendconfig_parameters
|
||||
GKEbackendConfig:
|
||||
# -- Enable BackendConfig custom resource for Google Kubernetes Engine
|
||||
enabled: false
|
||||
# -- [BackendConfigSpec]
|
||||
spec: {}
|
||||
# spec:
|
||||
# iap:
|
||||
# enabled: true
|
||||
# oauthclientCredentials:
|
||||
# secretName: argoworkflows-secret
|
||||
|
||||
## Create a Google Managed Certificate for use with the GKE Ingress Controller
|
||||
## https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs
|
||||
GKEmanagedCertificate:
|
||||
# -- Enable ManagedCertificate custom resource for Google Kubernetes Engine.
|
||||
enabled: false
|
||||
# -- Domains for the Google Managed Certificate
|
||||
domains:
|
||||
- argoworkflows.example.com
|
||||
|
||||
## Create a Google FrontendConfig Custom Resource, for use with the GKE Ingress Controller
|
||||
## https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-features#configuring_ingress_features_through_frontendconfig_parameters
|
||||
GKEfrontendConfig:
|
||||
# -- Enable FrontConfig custom resource for Google Kubernetes Engine
|
||||
enabled: false
|
||||
# -- [FrontendConfigSpec]
|
||||
spec: {}
|
||||
# spec:
|
||||
# redirectToHttps:
|
||||
# enabled: true
|
||||
# responseCodeName: RESPONSE_CODE
|
||||
|
||||
clusterWorkflowTemplates:
|
||||
# -- Create a ClusterRole and CRB for the server to access ClusterWorkflowTemplates.
|
||||
enabled: true
|
||||
# -- Give the server permissions to edit ClusterWorkflowTemplates.
|
||||
enableEditing: true
|
||||
|
||||
# SSO configuration when SSO is specified as a server auth mode.
|
||||
sso:
|
||||
# -- Create SSO configuration. If you set `true` , please also set `.Values.server.authMode` as `sso`.
|
||||
enabled: false
|
||||
# -- The root URL of the OIDC identity provider
|
||||
issuer: https://accounts.google.com
|
||||
clientId:
|
||||
# -- Name of secret to retrieve the app OIDC client ID
|
||||
name: argo-server-sso
|
||||
# -- Key of secret to retrieve the app OIDC client ID
|
||||
key: client-id
|
||||
clientSecret:
|
||||
# -- Name of a secret to retrieve the app OIDC client secret
|
||||
name: argo-server-sso
|
||||
# -- Key of a secret to retrieve the app OIDC client secret
|
||||
key: client-secret
|
||||
# -- The OIDC redirect URL. Should be in the form <argo-root-url>/oauth2/callback.
|
||||
redirectUrl: ""
|
||||
rbac:
|
||||
# -- Adds ServiceAccount Policy to server (Cluster)Role.
|
||||
enabled: true
|
||||
# -- Whitelist to allow server to fetch Secrets
|
||||
## When present, restricts secrets the server can read to a given list.
|
||||
## You can use it to restrict the server to only be able to access the
|
||||
## service account token secrets that are associated with service accounts
|
||||
## used for authorization.
|
||||
secretWhitelist: []
|
||||
# -- Scopes requested from the SSO ID provider
|
||||
## The 'groups' scope requests group membership information, which is usually used for authorization decisions.
|
||||
scopes: []
|
||||
# - groups
|
||||
# -- Define how long your login is valid for (in hours)
|
||||
## If omitted, defaults to 10h.
|
||||
sessionExpiry: ""
|
||||
# -- Alternate root URLs that can be included for some OIDC providers
|
||||
issuerAlias: ""
|
||||
# -- Override claim name for OIDC groups
|
||||
customGroupClaimName: ""
|
||||
# -- Specify the user info endpoint that contains the groups claim
|
||||
## Configure this if your OIDC provider provides groups information only using the user-info endpoint (e.g. Okta)
|
||||
userInfoPath: ""
|
||||
# -- Skip TLS verification for the HTTP client
|
||||
insecureSkipVerify: false
|
||||
# -- Filter the groups returned by the OIDC provider
|
||||
## A logical "OR" is used between each regex in the list
|
||||
filterGroupsRegex: []
|
||||
# - ".*argo-wf.*"
|
||||
# - ".*argo-workflow.*"
|
||||
|
||||
# -- Extra containers to be added to the server deployment
|
||||
extraContainers: []
|
||||
|
||||
# -- Enables init containers to be added to the server deployment
|
||||
extraInitContainers: []
|
||||
|
||||
# -- Specify postStart and preStop lifecycle hooks for server container
|
||||
lifecycle: {}
|
||||
|
||||
# -- terminationGracePeriodSeconds for container lifecycle hook
|
||||
terminationGracePeriodSeconds: 30
|
||||
|
||||
# -- Array of extra K8s manifests to deploy
|
||||
extraObjects: []
|
||||
# - apiVersion: secrets-store.csi.x-k8s.io/v1
|
||||
# kind: SecretProviderClass
|
||||
# metadata:
|
||||
# name: argo-server-sso
|
||||
# spec:
|
||||
# provider: aws
|
||||
# parameters:
|
||||
# objects: |
|
||||
# - objectName: "argo/server/sso"
|
||||
# objectType: "secretsmanager"
|
||||
# jmesPath:
|
||||
# - path: "client_id"
|
||||
# objectAlias: "client_id"
|
||||
# - path: "client_secret"
|
||||
# objectAlias: "client_secret"
|
||||
# secretObjects:
|
||||
# - data:
|
||||
# - key: client_id
|
||||
# objectName: client_id
|
||||
# - key: client_secret
|
||||
# objectName: client_secret
|
||||
# secretName: argo-server-sso-secrets-store
|
||||
# type: Opaque
|
||||
|
||||
# -- Use static credentials for S3 (eg. when not using AWS IRSA)
|
||||
useStaticCredentials: true
|
||||
artifactRepository:
|
||||
# -- Archive the main container logs as an artifact
|
||||
archiveLogs: false
|
||||
# -- Store artifact in a S3-compliant object store
|
||||
# @default -- See [values.yaml]
|
||||
s3: {}
|
||||
# # Note the `key` attribute is not the actual secret, it's the PATH to
|
||||
# # the contents in the associated secret, as defined by the `name` attribute.
|
||||
# accessKeySecret:
|
||||
# name: "{{ .Release.Name }}-minio"
|
||||
# key: accesskey
|
||||
# secretKeySecret:
|
||||
# name: "{{ .Release.Name }}-minio"
|
||||
# key: secretkey
|
||||
# sessionTokenSecret:
|
||||
# name: "{{ .Release.Name }}-minio"
|
||||
# key: sessionToken
|
||||
# # insecure will disable TLS. Primarily used for minio installs not configured with TLS
|
||||
# insecure: false
|
||||
# caSecret:
|
||||
# name: ca-root
|
||||
# key: cert.pem
|
||||
# bucket:
|
||||
# endpoint:
|
||||
# region:
|
||||
# roleARN:
|
||||
# useSDKCreds: true
|
||||
# encryptionOptions:
|
||||
# enableEncryption: true
|
||||
# -- Store artifact in a GCS object store
|
||||
# @default -- `{}` (See [values.yaml])
|
||||
gcs: {}
|
||||
# bucket: <project>-argo
|
||||
# keyFormat: "{{ \"{{workflow.namespace}}/{{workflow.name}}/{{pod.name}}\" }}"
|
||||
# # serviceAccountKeySecret is a secret selector.
|
||||
# # It references the k8s secret named 'my-gcs-credentials'.
|
||||
# # This secret is expected to have have the key 'serviceAccountKey',
|
||||
# # containing the base64 encoded credentials
|
||||
# # to the bucket.
|
||||
# #
|
||||
# # If it's running on GKE and Workload Identity is used,
|
||||
# # serviceAccountKeySecret is not needed.
|
||||
# serviceAccountKeySecret:
|
||||
# name: my-gcs-credentials
|
||||
# key: serviceAccountKey
|
||||
# -- Store artifact in Azure Blob Storage
|
||||
# @default -- `{}` (See [values.yaml])
|
||||
azure: {}
|
||||
# endpoint: https://mystorageaccountname.blob.core.windows.net
|
||||
# container: my-container-name
|
||||
# blobNameFormat: path/in/container
|
||||
# # accountKeySecret is a secret selector.
|
||||
# # It references the k8s secret named 'my-azure-storage-credentials'.
|
||||
# # This secret is expected to have have the key 'account-access-key',
|
||||
# # containing the base64 encoded credentials to the storage account.
|
||||
# # If a managed identity has been assigned to the machines running the
|
||||
# # workflow (e.g., https://docs.microsoft.com/en-us/azure/aks/use-managed-identity)
|
||||
# # then accountKeySecret is not needed, and useSDKCreds should be
|
||||
# # set to true instead:
|
||||
# useSDKCreds: true
|
||||
# accountKeySecret:
|
||||
# name: my-azure-storage-credentials
|
||||
# key: account-access-key
|
||||
|
||||
# -- The section of custom artifact repository.
|
||||
# Utilize a custom artifact repository that is not one of the current base ones (s3, gcs, azure)
|
||||
customArtifactRepository: {}
|
||||
# artifactory:
|
||||
# repoUrl: https://artifactory.example.com/raw
|
||||
# usernameSecret:
|
||||
# name: artifactory-creds
|
||||
# key: username
|
||||
# passwordSecret:
|
||||
# name: artifactory-creds
|
||||
# key: password
|
||||
|
||||
# -- The section of [artifact repository ref](https://argo-workflows.readthedocs.io/en/stable/artifact-repository-ref/).
|
||||
# Each map key is the name of configmap
|
||||
# @default -- `{}` (See [values.yaml])
|
||||
artifactRepositoryRef: {}
|
||||
# # -- 1st ConfigMap
|
||||
# # If you want to use this config map by default, name it "artifact-repositories".
|
||||
# # Otherwise, you can provide a reference to a
|
||||
# # different config map in `artifactRepositoryRef.configMap`.
|
||||
# artifact-repositories:
|
||||
# # -- v3.0 and after - if you want to use a specific key, put that key into this annotation.
|
||||
# annotations:
|
||||
# workflows.argoproj.io/default-artifact-repository: default-v1-s3-artifact-repository
|
||||
# # 1st data of configmap. See above artifactRepository or customArtifactRepository.
|
||||
# default-v1-s3-artifact-repository:
|
||||
# archiveLogs: false
|
||||
# s3:
|
||||
# bucket: my-bucket
|
||||
# endpoint: minio:9000
|
||||
# insecure: true
|
||||
# accessKeySecret:
|
||||
# name: my-minio-cred
|
||||
# key: accesskey
|
||||
# secretKeySecret:
|
||||
# name: my-minio-cred
|
||||
# key: secretkey
|
||||
# # 2nd data
|
||||
# oss-artifact-repository:
|
||||
# archiveLogs: false
|
||||
# oss:
|
||||
# endpoint: http://oss-cn-zhangjiakou-internal.aliyuncs.com
|
||||
# bucket: $mybucket
|
||||
# # accessKeySecret and secretKeySecret are secret selectors.
|
||||
# # It references the k8s secret named 'bucket-workflow-artifect-credentials'.
|
||||
# # This secret is expected to have have the keys 'accessKey'
|
||||
# # and 'secretKey', containing the base64 encoded credentials
|
||||
# # to the bucket.
|
||||
# accessKeySecret:
|
||||
# name: $mybucket-credentials
|
||||
# key: accessKey
|
||||
# secretKeySecret:
|
||||
# name: $mybucket-credentials
|
||||
# key: secretKey
|
||||
# # 2nd ConfigMap
|
||||
# another-artifact-repositories:
|
||||
# annotations:
|
||||
# workflows.argoproj.io/default-artifact-repository: gcs
|
||||
# gcs:
|
||||
# bucket: my-bucket
|
||||
# keyFormat: prefix/in/bucket/{{workflow.name}}/{{pod.name}}
|
||||
# serviceAccountKeySecret:
|
||||
# name: my-gcs-credentials
|
||||
# key: serviceAccountKey
|
||||
|
||||
emissary:
|
||||
# -- The command/args for each image on workflow, needed when the command is not specified and the emissary executor is used.
|
||||
## See more: https://argo-workflows.readthedocs.io/en/stable/workflow-executors/#emissary-emissary
|
||||
images: []
|
||||
# argoproj/argosay:v2:
|
||||
# cmd: [/argosay]
|
||||
# docker/whalesay:latest:
|
||||
# cmd: [/bin/bash]
|
||||
30
utils/assets/charts/docker-registry-ui/Chart.yaml
Normal file
30
utils/assets/charts/docker-registry-ui/Chart.yaml
Normal file
@@ -0,0 +1,30 @@
|
||||
annotations:
|
||||
artifacthub.io/images: |
|
||||
- name: docker-registry-ui
|
||||
image: joxit/docker-registry-ui:2.5.2
|
||||
- name: registry
|
||||
image: registry:2.8.2
|
||||
artifacthub.io/license: MIT
|
||||
artifacthub.io/links: |
|
||||
- name: Documentation
|
||||
url: https://joxit.dev/docker-registry-ui
|
||||
- name: Joxit/docker-registry-ui
|
||||
url: https://github.com/Joxit/docker-registry-ui
|
||||
- name: Joxit/helm-charts
|
||||
url: https://github.com/Joxit/helm-charts
|
||||
artifacthub.io/prerelease: "false"
|
||||
apiVersion: v2
|
||||
appVersion: 2.5.2
|
||||
description: The simplest and most complete UI for your private registry
|
||||
home: https://github.com/Joxit/docker-registry-ui
|
||||
keywords:
|
||||
- docker
|
||||
- registry
|
||||
- user-interface
|
||||
- interface
|
||||
kubeVersion: '>=1.19.0-0'
|
||||
name: docker-registry-ui
|
||||
sources:
|
||||
- https://github.com/Joxit/docker-registry-ui
|
||||
- https://github.com/Joxit/helm-charts
|
||||
version: 1.1.3
|
||||
140
utils/assets/charts/docker-registry-ui/README.md
Normal file
140
utils/assets/charts/docker-registry-ui/README.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# Docker Registry UI Chart
|
||||
|
||||
[](https://github.com/Joxit/docker-registry-ui/stargazers)
|
||||
[](https://hub.docker.com/r/joxit/docker-registry-ui)
|
||||
[](https://github.com/sponsors/Joxit)
|
||||
[](https://artifacthub.io/packages/helm/joxit/docker-registry-ui)
|
||||
|
||||
## Overview
|
||||
|
||||
This project aims to provide a simple and complete user interface for your private docker registry. You can customize the interface with various options. The major option is `ui.singleRegistry` which allows you to disable the dynamic selection of docker registeries.
|
||||
|
||||
If you like my work and want to support it, don't hesitate to [sponsor me](https://github.com/sponsors/Joxit).
|
||||
|
||||
## [Project Page](https://joxit.dev/docker-registry-ui), [Live Demo](https://joxit.dev/docker-registry-ui/demo/), [Examples](https://github.com/Joxit/docker-registry-ui/tree/main/examples), [Helm Chart](https://helm.joxit.dev/charts/docker-registry-ui/)
|
||||
|
||||

|
||||
|
||||
## Prerequisites
|
||||
|
||||
* **Helm 3.2+** (Helm 2 is not supported)
|
||||
* **Kubernetes 1.19+** - This is the earliest version of Kubernetes tested.
|
||||
It is possible that this chart works with earlier versions but it is untested.
|
||||
|
||||
## Usage
|
||||
|
||||
1. Add my Helm repository (named `joxit`)
|
||||
```
|
||||
helm repo add joxit https://helm.joxit.dev
|
||||
```
|
||||
2. Ensure you have access to the Helm chart and you see the latest chart version listed. If you have previously added the Helm repository, run `helm repo update`.
|
||||
```
|
||||
helm search repo joxit/docker-registry-ui
|
||||
```
|
||||
3. Now you're ready to install the Docker Registry UI! To install Docker Registry UI with the default configuration using Helm 3.2 run the following command below. This will deploy the Docker Registry UI on the default namespace.
|
||||
```
|
||||
helm upgrade --install docker-registry-ui joxit/docker-registry-ui
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Global
|
||||
|
||||
| Value | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `global.name` | `null` | Set the prefix used for all resources in the Helm chart. If not set, the prefix will be `<helm release name>`. |
|
||||
| `global.imagePullSecrets` | `[]` | The default array of objects containing image pull secret names that will be applied. |
|
||||
| `global.imagePullPolicy` | `IfNotPresent` | The default image policy for images: `IfNotPresent`, `Always`, `Never` |
|
||||
|
||||
### User Interface
|
||||
|
||||
| Value | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `ui.replicas` | `1` | Number of replicas for the Deployment. |
|
||||
| `ui.title` | `"Docker registry UI"` | Title of the registry |
|
||||
| `ui.proxy` | `false` | UI behave as a proxy of the registry |
|
||||
| `ui.dockerRegistryUrl` | `null` | The URL of your docker registry, may be a service (when proxy is on) or an external URL. |
|
||||
| `ui.pullUrl` | `null` | Override the pull URL |
|
||||
| `ui.singleRegistry` | `true` | Remove the menu that show the dialogs to add, remove and change the endpoint of your docker registry. |
|
||||
| `ui.registrySecured` | `false` | By default, the UI will check on every requests if your registry is secured or not (you will see `401` responses in your console). Set to `true` if your registry uses Basic Authentication and divide by two the number of call to your registry. |
|
||||
| `ui.showCatalogNbTags` | `false` | Show number of tags per images on catalog page. This will produce + nb images requests, not recommended on large registries. |
|
||||
| `ui.catalogElementsLimit` | `1000` | Limit the number of elements in the catalog page. |
|
||||
| `ui.catalogDefaultExpanded` | `false` | Expand by default all repositories in catalog |
|
||||
| `ui.catalogMinBranches` | `1` | Set the minimum repository/namespace to expand (e.g. `joxit/docker-registry-ui` `joxit/` is the repository/namespace). Can be 0 to disable branching. |
|
||||
| `ui.catalogMaxBranches` | `1` | Set the maximum repository/namespace to expand (e.g. `joxit/docker-registry-ui` `joxit/` is the repository/namespace). Can be 0 to disable branching. |
|
||||
| `ui.deleteImages` | `false` | Allow delete of images |
|
||||
| `ui.showContentDigest` | `false` | Show content digest in docker tag list. |
|
||||
| `ui.taglistOrder` | `alpha-asc;num-desc` | Set the default order for the taglist page, could be `num-asc;alpha-asc`, `num-desc;alpha-asc`, `num-asc;alpha-desc`, `num-desc;alpha-desc`, `alpha-asc;num-asc`, `alpha-asc;num-desc`, `alpha-desc;num-asc` or `alpha-desc;num-desc`. |
|
||||
| `ui.taglistPageSize` | `100` | Set the number of tags to display in one page. |
|
||||
| `ui.historyCustomLabels` | `[]` | Expose custom labels in history page, custom labels will be processed like maintainer label. |
|
||||
| `ui.nginxProxyHeaders` | `[]` | Update the default Nginx configuration and **set custom headers** for your backend docker registry. Only when `ui.proxy` is used. Example: nginxProxyHeaders: [ { my-heeader-name: my-header-value } ] |
|
||||
| `ui.nginxProxyPassHeaders` | `[]` | Update the default Nginx configuration and **forward custom headers** to your backend docker registry. Only when `ui.proxy` is used. Example: nginxProxyPassHeaders: [ my-first-header, my-second-header ] |
|
||||
| `ui.useControlCacheHeader` | `false` | Add header Control-Cache: no-store, no-cache on requests to registry server. This needs to update your registry configuration with : `Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']` |
|
||||
| `ui.runAsRoot` | `true` | Use root or nginx user inside the container, when this is false the target port must be greater or equal to 1024. |
|
||||
| `ui.defaultTheme` | `"auto"` | Select the default theme to apply, values can be `auto`, `dark` and `light` |
|
||||
| `ui.theme.background` | `""` | Custom background color for the UI |
|
||||
| `ui.theme.primaryText` | `""` | Custom primary text color for the UI |
|
||||
| `ui.theme.neutralText` | `""` | Custom netral color for the UI (icons) |
|
||||
| `ui.theme.accentText` | `""` | Custom accent color for the UI (buttons) |
|
||||
| `ui.theme.hoverBackground` | `""` | Custom hover background color for the UI |
|
||||
| `ui.theme.headerBackground` | `""` | Custom header background color for the UI |
|
||||
| `ui.theme.headerText` | `""` | Custom header text color for the UI |
|
||||
| `ui.theme.footerBackground` | `""` | Custom footer background color for the UI |
|
||||
| `ui.theme.footerText` | `""` | Custom footer text color for the UI |
|
||||
| `ui.theme.footerNeutralText` | `""` | Custom footer neutral color for the UI (links) |
|
||||
| `ui.image` | `joxit/docker-registry-ui:2.5.2` | The name and tag of the docker image of the interface |
|
||||
| `ui.imagePullSecrets` | `"-"` | Override default image pull secrets |
|
||||
| `ui.imagePullPolicy` | `"-"` | Override default pull policy |
|
||||
| `ui.resources` | `{}` | The resource settings for user interface pod. |
|
||||
| `ui.nodeSelector` | `{}` | Optional YAML string to specify a nodeSelector config. |
|
||||
| `ui.tolerations` | `[]` | Optional YAML string to specify tolerations. |
|
||||
| `ui.affinity` | `{}` | This value defines the [affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity) for server pods. |
|
||||
| `ui.annotations` | `{}` | Annotations to apply to the user interface deployment. |
|
||||
| `ui.additionalSpec` | `{}` | Optional YAML string that will be appended to the deployment spec. |
|
||||
| `ui.service.type` | `ClusterIP` | Type of service: `LoadBalancer`, `ClusterIP` or `NodePort`. If using `NodePort` service type, you must set the desired `nodePorts` setting below. |
|
||||
| `ui.service.port` | `80` | Ports that will be exposed on the service |
|
||||
| `ui.service.targetPort` | `80` | The port to listhen on the container. If under 1024, the user must be root |
|
||||
| `ui.service.nodePort` | `null` | If using a `NodePort` service type, you must specify the desired `nodePort` for each exposed port. |
|
||||
| `ui.service.annotations` | `{}` | Annotations to apply to the user interface service. |
|
||||
| `ui.service.additionalSpec` | `{}` | Optional YAML string that will be appended to the Service spec. |
|
||||
| `ui.ingress.enabled` | `false` | Enable the ingress for the user interface. |
|
||||
| `ui.ingress.host` | `null` | Fully qualified domain name of a network host. |
|
||||
| `ui.ingress.path` | `/` | Path is matched against the path of an incoming request. |
|
||||
| `ui.ingress.pathType` | `Prefix` | Determines the interpretation of the Path matching, must be Prefix to serve assets. |
|
||||
| `ui.ingress.ingressClassName` | `nginx` | The name of an IngressClass cluster resource. |
|
||||
| `ui.ingress.tls` | `[]` | TLS configuration |
|
||||
| `ui.ingress.annotations` | `{}` | Annotations to apply to the user interface ingress. |
|
||||
|
||||
### Registry Server
|
||||
|
||||
| Value | Default | Description |
|
||||
| --- | --- | --- |
|
||||
| `registry.enabled` | `false` | Enable the registry server. |
|
||||
| `registry.image` | `registry:2.8.2` | The name and tag of the docker registry server image |
|
||||
| `registry.imagePullSecrets` | `"-"` | Override default image pull secrets |
|
||||
| `registry.imagePullPolicy` | `"-"` | Override default pull policy |
|
||||
| `registry.dataVolume` | `null` | Configuration for the data directory. When null it will create an emptyDir. |
|
||||
| `registry.resources` | `{}` | The resource settings for registry server pod. |
|
||||
| `registry.nodeSelector` | `{}` | Optional YAML string to specify a nodeSelector config. |
|
||||
| `registry.tolerations` | `[]` | Optional YAML string to specify tolerations. |
|
||||
| `registry.affinity` | `{}` | This value defines the [affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity) for server pods. |
|
||||
| `registry.annotations` | `{}` | Annotations to apply to the registry server deployment. |
|
||||
| `registry.additionalSpec` | `{}` | Optional YAML string that will be appended to the deployment spec. |
|
||||
| `registry.extraEnv` | `[]` | Extra Environmental Variables for Registry |
|
||||
| `registry.auth.basic.enabled` | `false` | Enable basic auth for Registry. |
|
||||
| `registry.auth.basic.realm` | `Docker registry` | Basic auth realm. |
|
||||
| `registry.auth.basic.htpasswdPath` | `/etc/docker/registry/auth/htpasswd` | Full path for htpasswd file. Note that filename should match the secret key. |
|
||||
| `registry.auth.basic.secretName` | `''` | htpasswd secret name volume to mount. |
|
||||
| `registry.service.type` | `ClusterIP` | Type of service: `LoadBalancer`, `ClusterIP` or `NodePort`. If using `NodePort` service type, you must set the desired `nodePorts` setting below. |
|
||||
| `registry.service.port` | `5000` | Ports that will be exposed on the service |
|
||||
| `registry.service.targetPort` | `5000` | The port to listhen on the container. |
|
||||
| `registry.service.nodePort` | `null` | If using a `NodePort` service type, you must specify the desired `nodePort` for each exposed port. |
|
||||
| `registry.service.annotations` | `{}` | Annotations to apply to the registry server service. |
|
||||
| `registry.service.additionalSpec` | `{}` | Optional YAML string that will be appended to the Service spec. |
|
||||
| `registry.ingress.enabled` | `false` | Enable the ingress for the registry server. |
|
||||
| `registry.ingress.host` | `null` | Fully qualified domain name of a network host. |
|
||||
| `registry.ingress.path` | `/v2/` | Path is matched against the path of an incoming request. |
|
||||
| `registry.ingress.pathType` | `Prefix` | Determines the interpretation of the Path matching, must be Prefix to serve assets. |
|
||||
| `registry.ingress.ingressClassName` | `nginx` | The name of an IngressClass cluster resource. |
|
||||
| `registry.ingress.tls` | `[]` | TLS configuration |
|
||||
| `registry.ingress.annotations` | `{}` | Annotations to apply to the registry server ingress. |
|
||||
28
utils/assets/charts/docker-registry-ui/README.tmpl
Normal file
28
utils/assets/charts/docker-registry-ui/README.tmpl
Normal file
@@ -0,0 +1,28 @@
|
||||
# {{ prettyName }} Chart
|
||||
|
||||
[](https://github.com/Joxit/docker-registry-ui/stargazers)
|
||||
[](https://hub.docker.com/r/joxit/docker-registry-ui)
|
||||
[](https://github.com/sponsors/Joxit)
|
||||
[](https://artifacthub.io/packages/helm/joxit/docker-registry-ui)
|
||||
|
||||
## Overview
|
||||
|
||||
This project aims to provide a simple and complete user interface for your private docker registry. You can customize the interface with various options. The major option is `ui.singleRegistry` which allows you to disable the dynamic selection of docker registeries.
|
||||
|
||||
If you like my work and want to support it, don't hesitate to [sponsor me](https://github.com/sponsors/Joxit).
|
||||
|
||||
## [Project Page](https://joxit.dev/docker-registry-ui), [Live Demo](https://joxit.dev/docker-registry-ui/demo/), [Examples](https://github.com/Joxit/docker-registry-ui/tree/main/examples), [Helm Chart](https://helm.joxit.dev/charts/docker-registry-ui/)
|
||||
|
||||

|
||||
|
||||
## Prerequisites
|
||||
|
||||
{{ prerequisites }}
|
||||
|
||||
## Usage
|
||||
|
||||
{{ usage }}
|
||||
|
||||
## Configuration
|
||||
|
||||
{{ configuration }}
|
||||
@@ -0,0 +1,8 @@
|
||||
Thank you for installing Joxit's Docker Registry UI!
|
||||
|
||||
Your release is named {{ .Release.Name }}.
|
||||
|
||||
To learn more about the release, run:
|
||||
|
||||
$ helm status {{ .Release.Name }} {{- if .Release.Namespace }} --namespace {{ .Release.Namespace }}{{ end }}
|
||||
$ helm get all {{ .Release.Name }} {{- if .Release.Namespace }} --namespace {{ .Release.Namespace }}{{ end }}
|
||||
@@ -0,0 +1,43 @@
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to
|
||||
this (by the DNS naming spec). Supports the legacy fullnameOverride setting
|
||||
as well as the global.name setting.
|
||||
*/}}
|
||||
{{- define "docker-registry-ui.fullname" -}}
|
||||
{{- if .Values.fullnameOverride -}}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else if .Values.global.name -}}
|
||||
{{- .Values.global.name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "docker-registry-ui.chart" -}}
|
||||
{{- printf "%s-helm" .Chart.Name | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "docker-registry-ui.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Common labels.
|
||||
*/}}
|
||||
{{- define "docker-registry-ui.labels" -}}
|
||||
app.kubernetes.io/name: {{ include "docker-registry-ui.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
helm.sh/chart: {{ include "docker-registry-ui.chart" . }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,101 @@
|
||||
{{- if .Values.registry.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "docker-registry-ui.fullname" . }}-registry-server
|
||||
labels:
|
||||
app.kubernetes.io/component : registry-server
|
||||
{{- include "docker-registry-ui.labels" . | nindent 4 }}
|
||||
spec:
|
||||
replicas: {{ .Values.registry.replicas }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/component : registry-server
|
||||
{{- include "docker-registry-ui.labels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component : registry-server
|
||||
{{- include "docker-registry-ui.labels" . | nindent 8 }}
|
||||
{{- if .Values.registry.annotations }}
|
||||
annotations:
|
||||
{{- toYaml .Values.registry.annotations | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if ne (.Values.registry.imagePullSecrets | toString) "-" }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml .Values.registry.imagePullSecrets | nindent 8 }}
|
||||
{{- else }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml .Values.global.imagePullSecrets | nindent 8 }}
|
||||
{{- end}}
|
||||
containers:
|
||||
- name: "registry-server"
|
||||
image: {{ .Values.registry.image | quote }}
|
||||
imagePullPolicy: {{ if ne (.Values.registry.imagePullPolicy | toString) "-" }}{{ .Values.registry.imagePullPolicy }}{{ else }}{{ .Values.global.imagePullPolicy }}{{ end }}
|
||||
env:
|
||||
- name: REGISTRY_HTTP_ADDR
|
||||
value: {{ printf "%s:%d" "0.0.0.0" (.Values.registry.service.targetPort | int) }}
|
||||
{{- if .Values.ui.deleteImages }}
|
||||
- name: REGISTRY_STORAGE_DELETE_ENABLED
|
||||
value: 'true'
|
||||
{{- end }}
|
||||
{{- if .Values.registry.auth.basic.enabled }}
|
||||
- name: REGISTRY_AUTH
|
||||
value: htpasswd
|
||||
- name: REGISTRY_AUTH_HTPASSWD_REALM
|
||||
value: {{ if ne (.Values.registry.auth.basic.realm | toString) "-" }}{{ .Values.registry.auth.basic.realm }}{{ else }}{{ "Docker registry" }}{{ end }}
|
||||
- name: REGISTRY_AUTH_HTPASSWD_PATH
|
||||
value: {{ if ne (.Values.registry.auth.basic.htpasswdPath | toString) "-" }}{{ .Values.registry.auth.basic.htpasswdPath }}{{ else }}{{ "/etc/docker/registry/auth/htpasswd" }}{{ end }}
|
||||
{{- end }}
|
||||
{{- range .Values.registry.extraEnv }}
|
||||
- name: {{ .name | quote }}
|
||||
value: {{ .value | quote }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.registry.service.targetPort }}
|
||||
protocol: TCP
|
||||
volumeMounts:
|
||||
- mountPath: /var/lib/registry
|
||||
name: data
|
||||
{{- if .Values.registry.auth.basic.enabled }}
|
||||
- name: htpasswd
|
||||
mountPath: {{ if ne (.Values.registry.auth.basic.htpasswdPath | toString) "-" }}{{ dir .Values.registry.auth.basic.htpasswdPath }}{{ else }}{{ "/etc/docker/registry/auth" }}{{ end }}
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
resources:
|
||||
{{- toYaml .Values.registry.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: data
|
||||
{{- if .Values.registry.dataVolume }}
|
||||
{{- toYaml .Values.registry.dataVolume | nindent 10 }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
{{- if .Values.registry.auth.basic.enabled }}
|
||||
- name: htpasswd
|
||||
secret:
|
||||
secretName: {{ if .Values.registry.auth.basic.secretName }}{{ .Values.registry.auth.basic.secretName }}{{ else }}{{ fail "Basic auth secret name is required" }}{{ end }}
|
||||
{{- end }}
|
||||
{{- with .Values.registry.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.registry.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.registry.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if not .Values.registry.runAsRoot }}
|
||||
securityContext:
|
||||
runAsUser: 101
|
||||
fsGroup: 101
|
||||
{{- end }}
|
||||
{{- if .Values.registry.additionalSpec }}
|
||||
{{ tpl .Values.registry.additionalSpec . | nindent 6 | trim }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,38 @@
|
||||
{{- if .Values.registry.ingress.enabled -}}
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ include "docker-registry-ui.fullname" . }}-registry-server
|
||||
labels:
|
||||
app.kubernetes.io/component : registry-server
|
||||
{{- include "docker-registry-ui.labels" . | nindent 4 }}
|
||||
{{- with .Values.registry.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.registry.ingress.ingressClassName }}
|
||||
ingressClassName: {{ .Values.registry.ingress.ingressClassName }}
|
||||
{{- end -}}
|
||||
{{- if .Values.registry.ingress.tls }}
|
||||
tls:
|
||||
{{ tpl (toYaml .Values.registry.ingress.tls) $ | indent 4 }}
|
||||
{{- end }}
|
||||
rules:
|
||||
- http:
|
||||
paths:
|
||||
- backend:
|
||||
service:
|
||||
name: {{ include "docker-registry-ui.fullname" . }}-registry-server
|
||||
port:
|
||||
number: {{ .Values.registry.service.port }}
|
||||
{{- if .Values.registry.ingress.path }}
|
||||
path: {{ .Values.registry.ingress.path }}
|
||||
{{- end }}
|
||||
{{- if .Values.registry.ingress.pathType }}
|
||||
pathType: {{ .Values.registry.ingress.pathType }}
|
||||
{{- end }}
|
||||
{{- if .Values.registry.ingress.host }}
|
||||
host: {{ .Values.registry.ingress.host | quote }}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,29 @@
|
||||
{{- if .Values.registry.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "docker-registry-ui.fullname" . }}-registry-server
|
||||
labels:
|
||||
app.kubernetes.io/component : registry-server
|
||||
{{- include "docker-registry-ui.labels" . | nindent 4 }}
|
||||
{{- with .Values.registry.service.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
selector:
|
||||
app.kubernetes.io/component : registry-server
|
||||
{{- include "docker-registry-ui.labels" . | nindent 4 }}
|
||||
type: {{ .Values.registry.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.registry.service.port }}
|
||||
targetPort: {{ .Values.registry.service.targetPort }}
|
||||
protocol: TCP
|
||||
name: http
|
||||
{{- if (and (eq .Values.registry.service.type "NodePort") .Values.registry.service.nodePort) }}
|
||||
nodePort: {{ .Values.registry.service.nodePort }}
|
||||
{{- end }}
|
||||
{{- if .Values.registry.service.additionalSpec }}
|
||||
{{ tpl .Values.registry.service.additionalSpec . | nindent 2 | trim }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,139 @@
|
||||
{{- if and (not .Values.ui.runAsRoot) (lt (.Values.ui.service.targetPort | int) 1024) }}
|
||||
{{ fail "When `ui.runAsRoot` is false `ui.service.targetPort` must be less than 1024." }}
|
||||
{{- end }}
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "docker-registry-ui.fullname" . }}-user-interface
|
||||
labels:
|
||||
app.kubernetes.io/component : user-interface
|
||||
{{- include "docker-registry-ui.labels" . | nindent 4 }}
|
||||
spec:
|
||||
replicas: {{ .Values.ui.replicas }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/component : user-interface
|
||||
{{- include "docker-registry-ui.labels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component : user-interface
|
||||
{{- include "docker-registry-ui.labels" . | nindent 8 }}
|
||||
{{- if .Values.ui.annotations }}
|
||||
annotations:
|
||||
{{- toYaml .Values.ui.annotations | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if ne (.Values.ui.imagePullSecrets | toString) "-" }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml .Values.ui.imagePullSecrets | nindent 8 }}
|
||||
{{- else }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml .Values.global.imagePullSecrets | nindent 8 }}
|
||||
{{- end}}
|
||||
containers:
|
||||
- name: "registry-ui"
|
||||
image: {{ .Values.ui.image | quote }}
|
||||
imagePullPolicy: {{ if ne (.Values.ui.imagePullPolicy | toString) "-" }}{{ .Values.ui.imagePullPolicy }}{{ else }}{{ .Values.global.imagePullPolicy }}{{ end }}
|
||||
env:
|
||||
- name: REGISTRY_TITLE
|
||||
value: {{ .Values.ui.title | quote }}
|
||||
- name: DELETE_IMAGES
|
||||
value: {{ .Values.ui.deleteImages | quote }}
|
||||
{{- if .Values.ui.proxy }}
|
||||
{{- if .Values.ui.dockerRegistryUrl }}
|
||||
- name: NGINX_PROXY_PASS_URL
|
||||
value: {{ .Values.ui.dockerRegistryUrl | quote }}
|
||||
{{- else if .Values.registry.enabled }}
|
||||
- name: NGINX_PROXY_PASS_URL
|
||||
value: {{ printf "http://%s-registry-server:%d" (include "docker-registry-ui.fullname" .) (.Values.registry.service.port | int) }}
|
||||
{{- end }}
|
||||
{{- range $header := .Values.ui.nginxProxyHeaders }}
|
||||
{{- range $key, $value := $header }}
|
||||
- name: {{ printf "NGINX_PROXY_HEADER_%s" $key }}
|
||||
value: {{ $value }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- range $header := .Values.ui.nginxProxyPassHeaders }}
|
||||
- name: {{ printf "NGINX_PROXY_PASS_HEADER_%s" $header }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
- name: REGISTRY_URL
|
||||
value: {{ .Values.ui.dockerRegistryUrl | quote }}
|
||||
{{- end }}
|
||||
- name: PULL_URL
|
||||
value: {{ .Values.ui.pullUrl | quote }}
|
||||
- name: SHOW_CATALOG_NB_TAGS
|
||||
value: {{ .Values.ui.showCatalogNbTags | quote }}
|
||||
- name: SHOW_CONTENT_DIGEST
|
||||
value: {{ .Values.ui.showContentDigest | quote }}
|
||||
- name: SINGLE_REGISTRY
|
||||
value: {{ .Values.ui.singleRegistry | quote }}
|
||||
- name: CATALOG_ELEMENTS_LIMIT
|
||||
value: {{ .Values.ui.catalogElementsLimit | quote }}
|
||||
- name: HISTORY_CUSTOM_LABELS
|
||||
value: {{ .Values.ui.historyCustomLabels | join "," }}
|
||||
- name: NGINX_LISTEN_PORT
|
||||
value: {{ .Values.ui.service.targetPort | quote }}
|
||||
- name: USE_CONTROL_CACHE_HEADER
|
||||
value: {{ .Values.ui.useControlCacheHeader | quote }}
|
||||
- name: TAGLIST_ORDER
|
||||
value: {{ .Values.ui.taglistOrder | quote }}
|
||||
- name: CATALOG_DEFAULT_EXPANDED
|
||||
value: {{ .Values.ui.catalogDefaultExpanded | quote }}
|
||||
- name: CATALOG_MIN_BRANCHES
|
||||
value: {{ .Values.ui.catalogMinBranches | quote }}
|
||||
- name: CATALOG_MAX_BRANCHES
|
||||
value: {{ .Values.ui.catalogMaxBranches | quote }}
|
||||
- name: TAGLIST_PAGE_SIZE
|
||||
value: {{ .Values.ui.taglistPageSize | quote }}
|
||||
- name: REGISTRY_SECURED
|
||||
value: {{ .Values.ui.registrySecured | quote }}
|
||||
- name: THEME
|
||||
value: {{ .Values.ui.defaultTheme | quote }}
|
||||
- name: THEME_PRIMARY_TEXT
|
||||
value: {{ .Values.ui.theme.primaryText | quote }}
|
||||
- name: THEME_NEUTRAL_TEXT
|
||||
value: {{ .Values.ui.theme.neutralText | quote }}
|
||||
- name: THEME_BACKGROUND
|
||||
value: {{ .Values.ui.theme.background | quote }}
|
||||
- name: THEME_HOVER_BACKGROUND
|
||||
value: {{ .Values.ui.theme.hoverBackground | quote }}
|
||||
- name: THEME_ACCENT_TEXT
|
||||
value: {{ .Values.ui.theme.accentText | quote }}
|
||||
- name: THEME_HEADER_TEXT
|
||||
value: {{ .Values.ui.theme.headerText | quote }}
|
||||
- name: THEME_HEADER_BACKGROUND
|
||||
value: {{ .Values.ui.theme.headerBackground | quote }}
|
||||
- name: THEME_FOOTER_TEXT
|
||||
value: {{ .Values.ui.theme.footerText | quote }}
|
||||
- name: THEME_FOOTER_NEUTRAL_TEXT
|
||||
value: {{ .Values.ui.theme.footerNeutralText | quote }}
|
||||
- name: THEME_FOOTER_BACKGROUND
|
||||
value: {{ .Values.ui.theme.footerBackground | quote }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.ui.service.targetPort }}
|
||||
protocol: TCP
|
||||
resources:
|
||||
{{- toYaml .Values.ui.resources | nindent 12 }}
|
||||
{{- with .Values.ui.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.ui.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.ui.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if not .Values.ui.runAsRoot }}
|
||||
securityContext:
|
||||
runAsUser: 101
|
||||
{{- end }}
|
||||
{{- if .Values.ui.additionalSpec }}
|
||||
{{ tpl .Values.ui.additionalSpec . | nindent 6 | trim }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,38 @@
|
||||
{{- if .Values.ui.ingress.enabled -}}
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ include "docker-registry-ui.fullname" . }}-user-interface
|
||||
labels:
|
||||
app.kubernetes.io/component : user-interface
|
||||
{{- include "docker-registry-ui.labels" . | nindent 4 }}
|
||||
{{- with .Values.ui.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.ui.ingress.ingressClassName }}
|
||||
ingressClassName: {{ .Values.ui.ingress.ingressClassName }}
|
||||
{{- end -}}
|
||||
{{- if .Values.ui.ingress.tls }}
|
||||
tls:
|
||||
{{ tpl (toYaml .Values.ui.ingress.tls) $ | indent 4 }}
|
||||
{{- end }}
|
||||
rules:
|
||||
- http:
|
||||
paths:
|
||||
- backend:
|
||||
service:
|
||||
name: {{ include "docker-registry-ui.fullname" . }}-user-interface
|
||||
port:
|
||||
number: {{ .Values.ui.service.port }}
|
||||
{{- if .Values.ui.ingress.path }}
|
||||
path: {{ .Values.ui.ingress.path }}
|
||||
{{- end }}
|
||||
{{- if .Values.ui.ingress.pathType }}
|
||||
pathType: {{ .Values.ui.ingress.pathType }}
|
||||
{{- end }}
|
||||
{{- if .Values.ui.ingress.host }}
|
||||
host: {{ .Values.ui.ingress.host | quote }}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,27 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "docker-registry-ui.fullname" . }}-user-interface
|
||||
labels:
|
||||
app.kubernetes.io/component : user-interface
|
||||
{{- include "docker-registry-ui.labels" . | nindent 4 }}
|
||||
{{- with .Values.ui.service.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
selector:
|
||||
app.kubernetes.io/component : user-interface
|
||||
{{- include "docker-registry-ui.labels" . | nindent 4 }}
|
||||
type: {{ .Values.ui.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.ui.service.port }}
|
||||
targetPort: {{ .Values.ui.service.targetPort }}
|
||||
protocol: TCP
|
||||
name: http
|
||||
{{- if (and (eq .Values.ui.service.type "NodePort") .Values.ui.service.nodePort) }}
|
||||
nodePort: {{ .Values.ui.service.nodePort }}
|
||||
{{- end }}
|
||||
{{- if .Values.ui.service.additionalSpec }}
|
||||
{{ tpl .Values.ui.service.additionalSpec . | nindent 2 | trim }}
|
||||
{{- end }}
|
||||
218
utils/assets/charts/docker-registry-ui/values.yaml
Normal file
218
utils/assets/charts/docker-registry-ui/values.yaml
Normal file
@@ -0,0 +1,218 @@
|
||||
## Global
|
||||
global:
|
||||
# Set the prefix used for all resources in the Helm chart. If not set,
|
||||
# the prefix will be `<helm release name>`.
|
||||
name: null
|
||||
# The default array of objects containing image pull secret names that will be applied.
|
||||
imagePullSecrets: []
|
||||
# The default image policy for images: `IfNotPresent`, `Always`, `Never`
|
||||
imagePullPolicy: IfNotPresent
|
||||
|
||||
## User Interface
|
||||
ui:
|
||||
# Number of replicas for the Deployment.
|
||||
replicas: 1
|
||||
# Title of the registry
|
||||
title: "Docker registry UI"
|
||||
# UI behave as a proxy of the registry
|
||||
proxy: false
|
||||
# The URL of your docker registry, may be a service (when proxy is on) or an external URL.
|
||||
dockerRegistryUrl: null
|
||||
# Override the pull URL
|
||||
pullUrl: null
|
||||
# Remove the menu that show the dialogs to add, remove and change the endpoint of your docker registry.
|
||||
singleRegistry: true
|
||||
# By default, the UI will check on every requests if your registry is secured or not (you will see `401` responses in your console). Set to `true` if your registry uses Basic Authentication and divide by two the number of call to your registry.
|
||||
registrySecured: false
|
||||
|
||||
# Show number of tags per images on catalog page. This will produce + nb images requests, not recommended on large registries.
|
||||
showCatalogNbTags: false
|
||||
# Limit the number of elements in the catalog page.
|
||||
catalogElementsLimit: 1000
|
||||
# Expand by default all repositories in catalog
|
||||
catalogDefaultExpanded: false
|
||||
# Set the minimum repository/namespace to expand (e.g. `joxit/docker-registry-ui` `joxit/` is the repository/namespace). Can be 0 to disable branching.
|
||||
catalogMinBranches: 1
|
||||
# Set the maximum repository/namespace to expand (e.g. `joxit/docker-registry-ui` `joxit/` is the repository/namespace). Can be 0 to disable branching.
|
||||
catalogMaxBranches: 1
|
||||
|
||||
# Allow delete of images
|
||||
deleteImages: false
|
||||
# Show content digest in docker tag list.
|
||||
showContentDigest: false
|
||||
# Set the default order for the taglist page, could be `num-asc;alpha-asc`, `num-desc;alpha-asc`, `num-asc;alpha-desc`, `num-desc;alpha-desc`, `alpha-asc;num-asc`, `alpha-asc;num-desc`, `alpha-desc;num-asc` or `alpha-desc;num-desc`.
|
||||
taglistOrder: alpha-asc;num-desc
|
||||
# Set the number of tags to display in one page.
|
||||
taglistPageSize: 100
|
||||
|
||||
# Expose custom labels in history page, custom labels will be processed like maintainer label.
|
||||
historyCustomLabels: []
|
||||
|
||||
# Update the default Nginx configuration and **set custom headers** for your backend docker registry. Only when `ui.proxy` is used.
|
||||
# Example:
|
||||
# nginxProxyHeaders:
|
||||
# [ { my-heeader-name: my-header-value } ]
|
||||
nginxProxyHeaders: []
|
||||
# Update the default Nginx configuration and **forward custom headers** to your backend docker registry. Only when `ui.proxy` is used.
|
||||
# Example:
|
||||
# nginxProxyPassHeaders: [ my-first-header, my-second-header ]
|
||||
nginxProxyPassHeaders: []
|
||||
# Add header Control-Cache: no-store, no-cache on requests to registry server.
|
||||
# This needs to update your registry configuration with : `Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']`
|
||||
useControlCacheHeader: false
|
||||
# Use root or nginx user inside the container, when this is false the target port must be greater or equal to 1024.
|
||||
runAsRoot: true
|
||||
|
||||
# Select the default theme to apply, values can be `auto`, `dark` and `light`
|
||||
defaultTheme: "auto"
|
||||
|
||||
theme:
|
||||
# Custom background color for the UI
|
||||
background: ""
|
||||
# Custom primary text color for the UI
|
||||
primaryText: ""
|
||||
# Custom netral color for the UI (icons)
|
||||
neutralText: ""
|
||||
# Custom accent color for the UI (buttons)
|
||||
accentText: ""
|
||||
# Custom hover background color for the UI
|
||||
hoverBackground: ""
|
||||
# Custom header background color for the UI
|
||||
headerBackground: ""
|
||||
# Custom header text color for the UI
|
||||
headerText: ""
|
||||
# Custom footer background color for the UI
|
||||
footerBackground: ""
|
||||
# Custom footer text color for the UI
|
||||
footerText: ""
|
||||
# Custom footer neutral color for the UI (links)
|
||||
footerNeutralText: ""
|
||||
|
||||
# The name and tag of the docker image of the interface
|
||||
image: joxit/docker-registry-ui:2.5.2
|
||||
# Override default image pull secrets
|
||||
imagePullSecrets: "-"
|
||||
# Override default pull policy
|
||||
imagePullPolicy: "-"
|
||||
# The resource settings for user interface pod.
|
||||
resources: {}
|
||||
# Optional YAML string to specify a nodeSelector config.
|
||||
nodeSelector: {}
|
||||
# Optional YAML string to specify tolerations.
|
||||
tolerations: []
|
||||
# This value defines the [affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)
|
||||
# for server pods.
|
||||
affinity: {}
|
||||
# Annotations to apply to the user interface deployment.
|
||||
annotations: {}
|
||||
# Optional YAML string that will be appended to the deployment spec.
|
||||
additionalSpec: {}
|
||||
|
||||
service:
|
||||
# Type of service: `LoadBalancer`, `ClusterIP` or `NodePort`. If using `NodePort` service
|
||||
# type, you must set the desired `nodePorts` setting below.
|
||||
type: ClusterIP
|
||||
# Ports that will be exposed on the service
|
||||
port: 80
|
||||
# The port to listhen on the container. If under 1024, the user must be root
|
||||
targetPort: 80
|
||||
# If using a `NodePort` service type, you must specify the desired `nodePort` for each exposed port.
|
||||
nodePort: null
|
||||
# Annotations to apply to the user interface service.
|
||||
annotations: {}
|
||||
# Optional YAML string that will be appended to the Service spec.
|
||||
additionalSpec: {}
|
||||
|
||||
ingress:
|
||||
# Enable the ingress for the user interface.
|
||||
enabled: false
|
||||
# Fully qualified domain name of a network host.
|
||||
host: null
|
||||
# Path is matched against the path of an incoming request.
|
||||
path: /
|
||||
# Determines the interpretation of the Path matching, must be Prefix to serve assets.
|
||||
pathType: Prefix
|
||||
# The name of an IngressClass cluster resource.
|
||||
ingressClassName: nginx
|
||||
# TLS configuration
|
||||
tls: []
|
||||
# Annotations to apply to the user interface ingress.
|
||||
annotations: {}
|
||||
# If you want a custom path, you can try this example:
|
||||
# path: /ui(/|$)(.*)
|
||||
# annotations:
|
||||
# { nginx.ingress.kubernetes.io/rewrite-target: /$2 }
|
||||
|
||||
## Registry Server
|
||||
registry:
|
||||
# Enable the registry server.
|
||||
enabled: false
|
||||
# The name and tag of the docker registry server image
|
||||
image: registry:2.8.2
|
||||
# Override default image pull secrets
|
||||
imagePullSecrets: "-"
|
||||
# Override default pull policy
|
||||
imagePullPolicy: "-"
|
||||
# Configuration for the data directory. When null it will create an emptyDir.
|
||||
dataVolume: null
|
||||
# The resource settings for registry server pod.
|
||||
resources: {}
|
||||
# Optional YAML string to specify a nodeSelector config.
|
||||
nodeSelector: {}
|
||||
# Optional YAML string to specify tolerations.
|
||||
tolerations: []
|
||||
# This value defines the [affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)
|
||||
# for server pods.
|
||||
affinity: {}
|
||||
# Annotations to apply to the registry server deployment.
|
||||
annotations: {}
|
||||
# Optional YAML string that will be appended to the deployment spec.
|
||||
additionalSpec: {}
|
||||
# Extra Environmental Variables for Registry
|
||||
extraEnv: []
|
||||
|
||||
auth:
|
||||
basic:
|
||||
# Enable basic auth for Registry.
|
||||
enabled: false
|
||||
# Basic auth realm.
|
||||
realm: Docker registry
|
||||
# Full path for htpasswd file. Note that filename should match the secret key.
|
||||
htpasswdPath: /etc/docker/registry/auth/htpasswd
|
||||
# htpasswd secret name volume to mount.
|
||||
secretName: ''
|
||||
|
||||
service:
|
||||
# Type of service: `LoadBalancer`, `ClusterIP` or `NodePort`. If using `NodePort` service
|
||||
# type, you must set the desired `nodePorts` setting below.
|
||||
type: ClusterIP
|
||||
# Ports that will be exposed on the service
|
||||
port: 5000
|
||||
# The port to listhen on the container.
|
||||
targetPort: 5000
|
||||
# If using a `NodePort` service type, you must specify the desired `nodePort` for each exposed port.
|
||||
nodePort: null
|
||||
# Annotations to apply to the registry server service.
|
||||
annotations: {}
|
||||
# Optional YAML string that will be appended to the Service spec.
|
||||
additionalSpec: {}
|
||||
|
||||
ingress:
|
||||
# Enable the ingress for the registry server.
|
||||
enabled: false
|
||||
# Fully qualified domain name of a network host.
|
||||
host: null
|
||||
# Path is matched against the path of an incoming request.
|
||||
path: /v2/
|
||||
# Determines the interpretation of the Path matching, must be Prefix to serve assets.
|
||||
pathType: Prefix
|
||||
# The name of an IngressClass cluster resource.
|
||||
ingressClassName: nginx
|
||||
# TLS configuration
|
||||
tls: []
|
||||
# Annotations to apply to the registry server ingress.
|
||||
annotations: {}
|
||||
# If you want a custom path, you can try this example:
|
||||
# path: /api(/|$)(.*)
|
||||
# annotations:
|
||||
# { nginx.ingress.kubernetes.io/rewrite-target: /$2 }
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user