Compare commits
8 Commits
3d416169e3
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5acf96919c | |||
| 7a8a4f678a | |||
| 4ff6e706ca | |||
| f52bdf8ecc | |||
| 827b6f4211 | |||
| 1b77b8b6cf | |||
| 8098a86dae | |||
| ec5c2972c3 |
23
README.md
23
README.md
@@ -6,6 +6,15 @@ 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.
|
||||
|
||||
# Requirements
|
||||
|
||||
- go
|
||||
- docker
|
||||
- docker buildx
|
||||
- make
|
||||
|
||||
- Rajouter dans le bashrc > export KUBECONFIG=$HOME/.kube/config
|
||||
|
||||
# Locally built microservices deployment procedure
|
||||
|
||||
## Install OC-K8S
|
||||
@@ -16,20 +25,6 @@ sudo cp oc-k8s.sh /usr/bin/oc-k8s
|
||||
sudo chmod +x /usr/bin/oc-k8s
|
||||
```
|
||||
|
||||
## Install kind
|
||||
|
||||
Follow instructions here https://kind.sigs.k8s.io/
|
||||
|
||||
or
|
||||
|
||||
```
|
||||
go install sigs.k8s.io/kind@v0.30.0 && kind create cluster
|
||||
```
|
||||
|
||||
## Install helm
|
||||
|
||||
Download suitable helm client here https://helm.sh/docs/intro/install/
|
||||
|
||||
# Generate values (optionnal)
|
||||
|
||||
Use command :
|
||||
|
||||
176
cmd/main.go
Normal file
176
cmd/main.go
Normal file
@@ -0,0 +1,176 @@
|
||||
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("y", "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")
|
||||
|
||||
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)
|
||||
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)
|
||||
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.
628
cmd/test-values.yaml
Executable file
628
cmd/test-values.yaml
Executable file
@@ -0,0 +1,628 @@
|
||||
env: test # For storage class provisioning
|
||||
clusterName: opencloud
|
||||
hostNetwork: true
|
||||
host: beta.opencloud.com
|
||||
hostPort: 80
|
||||
registryHost: oc
|
||||
scheme: http
|
||||
|
||||
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: ""
|
||||
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: "false"
|
||||
adminPassword: "{SSHA}HMWJO7XCw80he2lqMf0PHzvvF14p6aLE"
|
||||
configPassword: "{SSHA}gr70yyCvtQo2zKe5OkvMkbkLRHUsVqOI"
|
||||
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: ${OC_LDAP_EXTERNAL_ENDPOINT}
|
||||
bindDN: cn=admin,dc=opencloud,dc=com
|
||||
bindPassword: "{SSHA}HMWJO7XCw80he2lqMf0PHzvvF14p6aLE"
|
||||
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: admin@example.com
|
||||
ou: users
|
||||
|
||||
dn: ou=AppRoles,dc=opencloud,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: AppRoles
|
||||
description: AppRoles
|
||||
|
||||
dn: ou=App1,ou=AppRoles,dc=opencloud,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: App1
|
||||
description: App1
|
||||
|
||||
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: oc-oauth2-client-secret
|
||||
ldap:
|
||||
bindDn: cn=admin,ou=users,dc=opencloud,dc=com
|
||||
binPwd: admin
|
||||
baseDn: 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
|
||||
|
||||
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
|
||||
storageClassName: standard
|
||||
existingClaim: docker-registry-pvc
|
||||
accessMode: ReadWriteOnce
|
||||
storage: 5Gi
|
||||
storageClassName: "standard"
|
||||
@@ -1,19 +0,0 @@
|
||||
apiVersion: v1
|
||||
clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJSzVaV2xBVVpyYnN3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TmpBeE1EVXhOak14TlRoYUZ3MHpOakF4TURNeE5qTTJOVGhhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUMyV0piMTVvMUorQk81RGVTbmpvVVpTSkRqdkxFaUc5VjZyQ3pFZG1KYjkxU3Q4RjRKSUhZUmdTNSsKdkljQ1A2UHI3WThUSGl0VlB6UWdlMjh5VjdHK245NDhpaHc5SkVBTDBQK2poYW9SYXJnOHRvLzV3LzZjbm5OUwpzTGZTTUYvdS8yVkE1YWFwb1RMbXFMbjgwbmI3MThaM0VQRUtydlhqSnpLOStCUm5lMUpVeFF0MmdJUTVubXBHCmtmK2E2bXhiRUI3OXFGaUJCWFEwN2JkSFppZFRxWEFydGY0RGkrWit1VE9BM0dCU1hsR3FMNGREU1hKSkM3MkUKajJWZk02K1d4SE9SSUE5TUx1cVd6OWxlem4wd1J3YURuME9iWG5EWUhXVWlxbmZoY2NsS3k0bnhjRWxqYTZhNwpuQ1VYc3ZpcCtsZUZHenQvWE9jOWhDWlU4SUpmQWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJSVUVkYVhJMHJ4TXl6REgrTk9MRWF1S1UvV3dUQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQW5yenJmRHNHcApZMTkvdyt3TFJmalgvREFkcmFsNWRtdGZuZFF0T213VmZETW5XRUNLV09RTXZYcWZlZUUyTDFjalBPVDQrVUNqCmltM0RrcksvSEpSa0NGWGdwVVl1R0JKaVYzbTBsUzJHUkNDckZ5QTdKQS9CYnVUaVBsWmFGOURPNzc5WVd4UkYKaDc0dFowQ09mY0l0dDJlbit1TGh5N29JVUx0ZzJjN3RLSzNKYmRvZFU1SGlSSjBjOG9DNVp6S2sreUdZZVFqTgozYm1rQW1nS1Z5L25yQSt1SXJXRC81T28rdTVhZXEvU1VjcGJFV3A1OWUxcDNQWEFtS1pRczlXZ0ZzVVEvWk1EClVEcjhkMlc0Tmw0MXBIVWpvTEhObldVUmdoNTcwbW9xcFNldGxTemFZL29BYVErV2Z4cjZlaUpIVER0NmhoZFoKMU9qVEJCQUJYMCsvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
server: https://127.0.0.1:40481
|
||||
name: kind-opencloud
|
||||
contexts:
|
||||
- context:
|
||||
cluster: kind-opencloud
|
||||
user: kind-opencloud
|
||||
name: kind-opencloud
|
||||
current-context: kind-opencloud
|
||||
kind: Config
|
||||
users:
|
||||
- name: kind-opencloud
|
||||
user:
|
||||
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURLVENDQWhHZ0F3SUJBZ0lJTCtxbzhTOXAzckV3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TmpBeE1EVXhOak14TlRoYUZ3MHlOekF4TURVeE5qTTJOVGhhTUR3eApIekFkQmdOVkJBb1RGbXQxWW1WaFpHMDZZMngxYzNSbGNpMWhaRzFwYm5NeEdUQVhCZ05WQkFNVEVHdDFZbVZ5CmJtVjBaWE10WVdSdGFXNHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFET2tLbUIKcGxBOE4wYktYaFF3YmRGd3ptMC9BT1NvUFg4R0hSSTZDRktXYU1LZjJKNjZDWk9LV0hEMjFiVFFCZ2VXOU5qdwpZNjBqbXlCcE5wS3MrYW1Say9ZWWdnVFg5Qm4ydEFSSDdQNEF6MlVRTktlZ0tNYkVyZFgyYzVVRzg1MldJbk8rCmxyb0sxWUY1OG8zb0IyUmxTZ3NaZ2RyZWh5WlFBekVHUjUxZFdER2hwS3kwNExHNXhUSGNsV0lONUpkRC9qemYKbUIzSkozNUFTRFlLU25ia3g5Rjk4bjYvMm9MVDgvNnF5bmhSTm9tNUVHZUNpSVUyY0ZHQVNESk1Scm1TQ3pNcwpwQm0wWk5sdi91ZDNmU2lzelQwc1JGVG1OUVdSL29sOTlGVVFNQzZWTkFsMGgrY0J4M0poZEExUHc3R0l5WTBDCk05NHN4MzU4YmJqWmt3RW5BZ01CQUFHalZqQlVNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUsKQmdnckJnRUZCUWNEQWpBTUJnTlZIUk1CQWY4RUFqQUFNQjhHQTFVZEl3UVlNQmFBRkZRUjFwY2pTdkV6TE1NZgo0MDRzUnE0cFQ5YkJNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUJHazlZLytQbGl2VXk4ajRxWnJKMFpaVUZqCk1XWHNQeEtveUh4SHdnMXpYczBIY29oSWFhNVYyblVUb1dqRFNZYWppak5ZbTg4U3czdms1YVlDUEphaVRZWFoKZVZPY05qY09FRVVZZE5zRU0zNFNSWTArVHlpNXk2OS9Bc20zckJyRTZRZlc3YThzTHZOS2ZNZmdsT1BRWmxhcwpIQmpNVGFjS0tmWmo0RnlFMm41dzRQblM0WU9PdmkzTmcxYmFRcVNneHJNOGpKSG1BRFluU0xwMnhyU0NBWEdZCkZBMSsrNlA1STVLVEpGWHUzRWE3RTBZYkxyQXJoQkNrbWVLTWtmcEJVTXhoUVBPcTV4RzlwajMvL0NoRXk0aGUKekdyMVAvQml1a1FEZHRSMXRKb0dVLzQ1WXlSczZtclJZWU42eWtkaEV6dUlVUzhBY05SY2dhd3ZhcDArCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBenBDcGdhWlFQRGRHeWw0VU1HM1JjTTV0UHdEa3FEMS9CaDBTT2doU2xtakNuOWllCnVnbVRpbGh3OXRXMDBBWUhsdlRZOEdPdEk1c2dhVGFTclBtcGtaUDJHSUlFMS9RWjlyUUVSK3orQU05bEVEU24Kb0NqR3hLM1Y5bk9WQnZPZGxpSnp2cGE2Q3RXQmVmS042QWRrWlVvTEdZSGEzb2NtVUFNeEJrZWRYVmd4b2FTcwp0T0N4dWNVeDNKVmlEZVNYUS80ODM1Z2R5U2QrUUVnMkNrcDI1TWZSZmZKK3Y5cUMwL1ArcXNwNFVUYUp1UkJuCmdvaUZObkJSZ0VneVRFYTVrZ3N6TEtRWnRHVFpiLzduZDMwb3JNMDlMRVJVNWpVRmtmNkpmZlJWRURBdWxUUUoKZElmbkFjZHlZWFFOVDhPeGlNbU5BalBlTE1kK2ZHMjQyWk1CSndJREFRQUJBb0lCQUFnaUtSSjZUbmw0Z2JpUgpLTUZaYWFCRCtJZzlERVBWbkExTkVyMG5PNzFCWmJ4dWhwMXpxQlFQOUc2N3JuRnNjMXNOekFiM0hjZWpvWXlUCkFnWitsQjh2ME1aWlJFQ09rNEVqeUhGZWt3Zk1Jc0lYR0t5VlBuSmJGK3dxMCtqZ3FjbFNGUFdoc0xTaGdJWWgKTjFZMkNFMTJzMll2TjBPQTFkRGJ0MC8wZk8xQ2JDSGd0a0IrQkRCQlBVbUkva201dUVTOTRKTmpJWE1pbW5KdwpZWU01OHhXSWF2RGs5eUVyQ0JUcHhmTW5wNzZnN3duT0dxb3lXU2ZlZFdsbXRUNlliTlBid1MwbzRBSmhhT3NQCnNvdm44ekhOa0VacmEvVTZuSVREdTJlTEUzUDdsME8rTGFMRXhhY2VlalM0aW12eG53T0l1Q1l0NW10cDVONlYKeXduVXk3a0NnWUVBNWV2NEhyTlZnaE9aRTJ4cG9HUmlNdDJKRS9xOTVYQXlGM3QwZVFDbi8vK3lZeFgvVXZsOAo1TGd0VklKb3l1OEIwejlIUWdNQnlOMnZhK0xSd1c3NlY3UkFPMVgrMnpHa1RCbWRERkdRRXFSSE12Zk50UkltCmc5K0tJT1dzbWRSYVRLaXNEQS91RkpjdFdFMEJpRnk3cTNTVk16NHhuR0NsUklWdlFSVW40RzhDZ1lFQTVmNkIKb3F1T01hZnFaQnBVakNzcmxvQzdrSEEzUGRPNFljRTVJWjhYY2xWSStKNDVnV0JFWlFWcmFMMGhRTk1WaTdIRgo3TjhjRGdWY0lEVzdPYm5FRk5yTys0Ui9oNEF1U3g3ZGdVNm1mY2I1QXVvODhzeUNtaW5mbFZ2ZHJsVElCTStyCkJYdkdSaG5WOExFRTFWdGtNSjlxbVJHaDNuWWtGVTk0SVpoSjFza0NnWUVBMVFsVG1YNnBHQ0Y0a0pxL05ESlAKR3JwU0xRVUR0dmZDTWlmZHY5QnYyYS9lWmhrWHZwWVV0d2hBV0RHTlQ1c3RvY0xjRDdvaGlUQi9QZ09vUHdiSgpSMEpvMFpIWTF0aWtWeTdVYVhtWmVPeG1YRDluaHdNT1ZOcG5iaHZoVlplQkk4NlZ1NGQzSGZVRnV1OS9JQTVzCmhXMDhZWUtiRFQ0dlk5SVBSOHFHYkZrQ2dZRUFtZVdVUHhKR2dxbVdhTWRKbmNWaFZFTHR2dmVucjBKVmxXdmkKMjhHRndlYVpmbXI1bGIyaDVtc2E5U25nNzJ5UGRUdE9jbkxVWmZsbUxOTm5aWGdOWWRzTU56YncwdTJOakl5cApzVlc4aUZzMDBxT0Vodjhid1NhVnltNS9ScURLZXBXdkhXczJRRUFYYlFnMmNNSEhwOVYwVWRwL2tzbEEyZFdrClQrNkVNaWtDZ1lCMkI3UmV2WEtZZjY2V09mQ3B1cFY0emhHUTJncDU1Qk1scTFTcVZMZktwMkJCS0V5TW9Pa1QKVnoyMWllRHowbXhjY1QwbFA4YzNVbG9uUkhuZWhNTFhnR0dXRlhad2hjZkl3Y2h3RjRwU3VoVldVL01kdEs1Vgo2cmNlVU1tUFFaSkVNeVJ1MkQ0M1IwV1ZRRnpYSHVXc29EbXREa3NjUUtQMlBXT25vdy9vWkE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
|
||||
|
||||
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=
|
||||
114
internal/cluster.go
Normal file
114
internal/cluster.go
Normal file
@@ -0,0 +1,114 @@
|
||||
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("kind delete cluster --name " + clusterName)
|
||||
utils.Exec("yes | sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config")
|
||||
return utils.Exec("chmod 600 ~/.kube/config")
|
||||
}
|
||||
|
||||
func Install_Cluster() error {
|
||||
utils.Exec("yes | sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config")
|
||||
utils.Exec("chmod 700 /home/mr/.kube")
|
||||
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")
|
||||
utils.Exec("yes | sudo cp -rf /etc/rancher/k3s/k3s.yaml ~/.kube/config")
|
||||
|
||||
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
|
||||
`
|
||||
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'`)
|
||||
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
|
||||
}
|
||||
|
||||
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("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
|
||||
}
|
||||
100
internal/db.go
Normal file
100
internal/db.go
Normal file
@@ -0,0 +1,100 @@
|
||||
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")
|
||||
fmt.Println("kubectl cp -n " + namespace + " " + *filePath + "/" + fileName + " \"" + podName + ":/tmp/" + fileName + "\"")
|
||||
if err := utils.Exec("kubectl cp -n " + namespace + " " + *filePath + "/" + fileName + " \"" + podName + ":/tmp/" + fileName + "\""); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("kubectl exec -n " + namespace + " " + podName + " -- mongoimport --db " + dbName + " --collection " + strings.ReplaceAll(fileName, ".json", "") + " --file /tmp/" + fileName + " --jsonArray -u " + adminUsr + " -p " + adminPsw +" --authenticationDatabase admin")
|
||||
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)
|
||||
}
|
||||
131
internal/func.go
Normal file
131
internal/func.go
Normal file
@@ -0,0 +1,131 @@
|
||||
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]
|
||||
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)
|
||||
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) 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); 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
|
||||
}
|
||||
108
internal/helm.go
Normal file
108
internal/helm.go
Normal file
@@ -0,0 +1,108 @@
|
||||
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)
|
||||
|
||||
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("sudo ulimit -n 1000000")
|
||||
|
||||
utils.Exec("helm repo add jetstack https://charts.jetstack.io")
|
||||
utils.Exec("helm repo update")
|
||||
|
||||
utils.Exec("kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.crds.yaml")
|
||||
utils.Exec("helm repo add jetstack https://charts.jetstack.io")
|
||||
utils.Exec("helm repo update")
|
||||
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 repo add argo https://argoproj.github.io/argo-helm")
|
||||
utils.Exec("helm repo update")
|
||||
utils.Exec("helm install argo-workflows argo/argo-workflows --namespace argo --create-namespace")
|
||||
|
||||
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 rm -rf " + tmp)
|
||||
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
|
||||
}
|
||||
defer os.RemoveAll(tmp)
|
||||
ExtractTrees("assets", 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("yes | 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
|
||||
}
|
||||
74
internal/services.go
Normal file
74
internal/services.go
Normal file
@@ -0,0 +1,74 @@
|
||||
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",
|
||||
}
|
||||
|
||||
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]
|
||||
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)
|
||||
oc-k8s help services `)
|
||||
}
|
||||
|
||||
func Create_Service(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 checkout " + branch + " && git pull")
|
||||
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
|
||||
}
|
||||
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
|
||||
}
|
||||
426
oc-k8s.sh
426
oc-k8s.sh
@@ -1,426 +0,0 @@
|
||||
#!/bin/bash
|
||||
REPOS=(
|
||||
"oc-auth"
|
||||
"oc-catalog"
|
||||
"oc-datacenter"
|
||||
"oc-front"
|
||||
"oc-monitord"
|
||||
"oc-peer"
|
||||
"oc-shared"
|
||||
"oc-scheduler"
|
||||
"oc-schedulerd"
|
||||
"oc-workflow"
|
||||
"oc-workspace"
|
||||
)
|
||||
|
||||
|
||||
main_replace_db() {
|
||||
FILES=$(ls $1 | grep .json)
|
||||
RELEASE=${2:-dev}
|
||||
DB_NAME=${3:-opencloud}
|
||||
|
||||
POD_NAME=$(kubectl get pods --all-namespaces -o=name | grep $RELEASE-mongodb-*)
|
||||
main_delete_db
|
||||
main_install_db
|
||||
}
|
||||
|
||||
main_delete_db() {
|
||||
FILES=$(ls $1 | grep .json)
|
||||
RELEASE=${2:-dev}
|
||||
DB_NAME=${3:-opencloud}
|
||||
|
||||
|
||||
POD_NAME=$(kubectl get pods --all-namespaces -o=name | grep $RELEASE-mongodb-*)
|
||||
kubectl exec ${POD_NAME/pod\//}: -- mongosh --eval "db.getSiblingDB('$DB_NAME').dropDatabase()"
|
||||
}
|
||||
|
||||
main_install_db() {
|
||||
FILES=$(ls $1 | grep .json)
|
||||
RELEASE=${2:-dev}
|
||||
DB_NAME=${3:-opencloud}
|
||||
|
||||
|
||||
POD_NAME=$(kubectl get pods --all-namespaces -o=name | grep $RELEASE-mongodb-*)
|
||||
|
||||
for file in "${FILES[@]}"; do
|
||||
echo "ADD file $file in collection ${file/.json/} : ${POD_NAME/pod\//}"
|
||||
kubectl cp $file ${POD_NAME/pod\//}:/tmp/$file
|
||||
kubectl exec ${POD_NAME/pod\//}: -- mongoimport --db $DB_NAME --collection ${file/.json/} --file /tmp/$file --jsonArray
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
main_install() {
|
||||
main_install_k3s
|
||||
main_install_kind ${@:1}
|
||||
main_install_helm
|
||||
}
|
||||
|
||||
main_install_k3s() {
|
||||
sudo /usr/local/bin/k3s-uninstall.sh | true
|
||||
sudo rm -rf /etc/rancher /var/lib/rancher ~/.kube | true
|
||||
curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
|
||||
sudo systemctl status k3s
|
||||
}
|
||||
|
||||
main_install_helm() {
|
||||
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash # install helm
|
||||
helm version
|
||||
}
|
||||
|
||||
main_install_kind() {
|
||||
ARCH=${1:-linux-amd64} # linux-amd64 linux-arm64 darwin-amd64 darwin-arm64 windows-amd64.exe
|
||||
VERSION=${2:-v0.30.0}
|
||||
if [[ "$ARCH" =~ *windows* ]]; then
|
||||
ARCH=${ARCH}.exe
|
||||
fi
|
||||
curl -Lo kind-linux-amd64 https://kind.sigs.k8s.io/dl/${VERSION}/kind-${ARCH}
|
||||
}
|
||||
# values template
|
||||
main_create_values() {
|
||||
set -euo pipefail
|
||||
|
||||
if [[ -z "${1:-}" ]]; then
|
||||
echo "Error: No RELEASE PROVIDED."
|
||||
main_help_values
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TEMPLATE_FILE=./opencloud/values.yaml.template
|
||||
ENV_FILE=${2:-}
|
||||
OUTPUT_FILE="./opencloud/values/$1-values.yaml"
|
||||
|
||||
# Load environment variables from env file
|
||||
if [[ -f "$ENV_FILE" ]]; then
|
||||
set -a
|
||||
source "$ENV_FILE"
|
||||
set +a
|
||||
fi
|
||||
export RELEASE=$1
|
||||
# Process the template
|
||||
awk '
|
||||
{
|
||||
line = $0
|
||||
# match ${VAR:-default} patterns
|
||||
while (match(line, /\$\{([A-Za-z_][A-Za-z0-9_]*):-([^}]+)\}/, arr)) {
|
||||
varname = arr[1]
|
||||
defaultval = arr[2]
|
||||
# get environment value or default
|
||||
cmd = "bash -c '\''echo ${" varname ":-" defaultval "}'\''"
|
||||
cmd | getline value
|
||||
close(cmd)
|
||||
line = substr(line, 1, RSTART-1) value substr(line, RSTART+RLENGTH)
|
||||
}
|
||||
print line
|
||||
}' "$TEMPLATE_FILE" > "$OUTPUT_FILE"
|
||||
|
||||
echo "Rendered $OUTPUT_FILE from $TEMPLATE_FILE using $ENV_FILE"
|
||||
}
|
||||
|
||||
# HELM SERVICE
|
||||
main_create_helm() {
|
||||
RELEASE_NAME=${1:-dev}
|
||||
RELEASE_NAMESPACE=${1:-dev}
|
||||
main_delete_helm "${1:-dev}" | true
|
||||
helm dependency update
|
||||
helm dependency build
|
||||
kubectl delete sc longhorn-nor1
|
||||
|
||||
#kubectl apply -f ./opencloud/templates/sc-longhorn-nor1.yaml
|
||||
#kubectl label storageclass longhorn-nor1 app.kubernetes.io/managed-by=Helm
|
||||
#kubectl annotate storageclass longhorn-nor1 \
|
||||
# meta.helm.sh/release-name=${RELEASE_NAMESPACE} \
|
||||
# meta.helm.sh/release-namespace=${RELEASE_NAMESPACE}
|
||||
ulimit -n 1000000
|
||||
helm install ${RELEASE_NAME} opencloud -n ${RELEASE_NAMESPACE} --create-namespace -f ./opencloud/values/${RELEASE_NAME}-values.yaml --debug
|
||||
|
||||
kind get kubeconfig --name opencloud > ./deployed_config
|
||||
|
||||
kind export logs ./kind-logs
|
||||
}
|
||||
|
||||
main_upgrade_helm() {
|
||||
RELEASE_NAME=${1:-dev}
|
||||
RELEASE_NAMESPACE=${1:-dev}
|
||||
|
||||
helm upgrade ${RELEASE_NAME} opencloud -n ${RELEASE_NAMESPACE} --create-namespace -f ./opencloud/values/${RELEASE_NAME}-values.yaml
|
||||
}
|
||||
|
||||
main_delete_helm() {
|
||||
RELEASE_NAME=${1:-dev}
|
||||
RELEASE_NAMESPACE=${1:-dev}
|
||||
|
||||
helm uninstall ${RELEASE_NAME} -n ${RELEASE_NAMESPACE}
|
||||
kubectl delete namespace ${RELEASE_NAMESPACE} &
|
||||
|
||||
export KUBECONFIG=$(realpath ~/.kube/config)
|
||||
}
|
||||
# CLUSTER SERVICE
|
||||
|
||||
build_service() {
|
||||
local repo_url="https://cloud.o-forge.io/core/$1.git"
|
||||
local branch=${2:-main}
|
||||
local target=${3:-all}
|
||||
local repo_name=$(basename "$repo_url" .git)
|
||||
|
||||
server=$(grep 'server:' ~/.kube/config | awk '{print $2}')
|
||||
|
||||
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}')
|
||||
|
||||
echo "Processing repository: $repo_name"
|
||||
|
||||
if [ ! -d "$1" ]; then
|
||||
echo "Cloning repository: $repo_name"
|
||||
git clone "$repo_url"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error cloning $repo_url"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo "Repository '$repo_name' now exists. Pulling latest changes..."
|
||||
cd "$repo_name" && git checkout $branch && git pull
|
||||
|
||||
echo "Running 'make $target' in $repo_name"
|
||||
export HOST="${2:-http://beta.opencloud.com/}" && export KUBERNETES_SERVICE_HOST=$host && export KUBERNETES_SERVICE_PORT=$port \
|
||||
&& export KUBE_CA=$ca && export KUBE_CERT=$cert && export KUBE_DATA=$key && make "$target"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: make $target failed in $dir"
|
||||
exit 1
|
||||
fi
|
||||
cd ..
|
||||
}
|
||||
|
||||
main_build_services() {
|
||||
branch=${1:-main}
|
||||
target=${2:-all}
|
||||
# docker system prune -af
|
||||
cd ..
|
||||
# Iterate through each repository in the list
|
||||
for repo in "${REPOS[@]}"; do
|
||||
build_service "$repo" "$branch" "$target"
|
||||
done
|
||||
echo "All repositories processed successfully."
|
||||
}
|
||||
|
||||
# CLUSTER CONTROLLER
|
||||
|
||||
main_delete_cluster() {
|
||||
kind delete cluster --name opencloud | true
|
||||
}
|
||||
|
||||
main_create_cluster() {
|
||||
main_delete_cluster | true
|
||||
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.9.0/deploy/longhorn.yaml
|
||||
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
|
||||
echo "[WARNING] New cluster shoulw be merged into your current config !"
|
||||
|
||||
# Export the kind cluster kubeconfig to a temporary file
|
||||
kind get kubeconfig --name opencloud > /tmp/kind-opencloud.kubeconfig
|
||||
|
||||
# Merge the temporary kubeconfig with your existing one safely
|
||||
KUBECONFIG=~/.kube/config:/tmp/kind-opencloud.kubeconfig kubectl config view --flatten --merge --minify > /tmp/merged-kubeconfig.yaml
|
||||
|
||||
# Replace the original kubeconfig safely
|
||||
mv /tmp/merged-kubeconfig.yaml ~/.kube/config
|
||||
chmod 600 ~/.kube/config
|
||||
|
||||
# Verify the contexts
|
||||
kubectl config get-contexts
|
||||
# Switch to the new kind cluster context
|
||||
kubectl config use-context kind-opencloud
|
||||
}
|
||||
|
||||
main_help_k3s() {
|
||||
echo "
|
||||
Cluster commands: oc-k8s <action> k3s
|
||||
install - Install k3s
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s install k3s
|
||||
oc-k8s help values
|
||||
"
|
||||
}
|
||||
|
||||
main_help_kind() {
|
||||
echo "
|
||||
Cluster commands: oc-k8s <action> kind
|
||||
install - Install kind
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s install kind [arch] [version]
|
||||
arch - Arch of OS (required)
|
||||
kind_version - version of kind (required)
|
||||
oc-k8s help values
|
||||
"
|
||||
}
|
||||
|
||||
main_help_values() {
|
||||
echo "
|
||||
Cluster commands: oc-k8s <action> values
|
||||
create - Create a new values release yaml
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create values [release] [env_file (optionnal)]
|
||||
release - Release values name (required)
|
||||
env_file - env to map (optionnal)
|
||||
oc-k8s help values
|
||||
"
|
||||
}
|
||||
|
||||
main_help_db() {
|
||||
echo "
|
||||
Cluster commands: oc-k8s <action> cluster
|
||||
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 [file_path] [release] [db_name]
|
||||
file_path - Datas folder files path (required)
|
||||
release - Release values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
oc-k8s replace db [file_path] [release] [db_name]
|
||||
file_path - Datas folder files path (required)
|
||||
release - Release values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
oc-k8s delete db [file_path] [release] [db_name]
|
||||
file_path - Datas folder files path (required)
|
||||
release - Release values name (default: dev)
|
||||
db_name - db name (default: opencloud)
|
||||
oc-k8s help db
|
||||
"
|
||||
}
|
||||
|
||||
main_help_cluster() {
|
||||
echo "
|
||||
Cluster commands: oc-k8s <action> cluster
|
||||
create - Create a new kind cluster named 'opencloud'
|
||||
delete - Delete the kind cluster named 'opencloud'
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s create cluster
|
||||
oc-k8s delete cluster
|
||||
oc-k8s help cluster
|
||||
"
|
||||
}
|
||||
|
||||
main_help_services() {
|
||||
echo "
|
||||
Service commands: oc-k8s <action> services
|
||||
build - Build all opencloud services
|
||||
help - Show this help message
|
||||
|
||||
Usage:
|
||||
oc-k8s build services [branch] [target]
|
||||
branch - Git branch to build (default: main)
|
||||
target - make target (default: all)
|
||||
oc-k8s help services
|
||||
"
|
||||
}
|
||||
|
||||
main_help_helm() {
|
||||
echo "
|
||||
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 [env]
|
||||
env - environnement selected (default: dev)
|
||||
oc-k8s upgrade helm [env]
|
||||
env - environnement selected (default: dev)
|
||||
oc-k8s delete helm [env]
|
||||
env - environnement selected (default: dev)
|
||||
oc-k8sh help helm
|
||||
"
|
||||
}
|
||||
|
||||
main_help_all() {
|
||||
echo "
|
||||
Main commands: oc-k8s <action>
|
||||
install - Install opencloud dependancies [arch] [version]
|
||||
start - Start opencloud k8s
|
||||
stop - Stop opencloud k8s
|
||||
Usage:
|
||||
oc-k8s install [arch] [version]
|
||||
arch - Arch of OS (required)
|
||||
kind_version - version of kind (required)
|
||||
oc-k8s start [env] [branch] [target]
|
||||
env - environnement selected (default: dev)
|
||||
branch - Git branch to build (default: main)
|
||||
target - make target (default: all)
|
||||
oc-k8s stop
|
||||
"
|
||||
main_help_cluster
|
||||
main_help_services
|
||||
main_help_helm
|
||||
main_help_values
|
||||
main_help_k3s
|
||||
main_help_kind
|
||||
main_help_db
|
||||
}
|
||||
|
||||
main_start() {
|
||||
sudo sysctl -w fs.inotify.max_user_instances=256
|
||||
sudo /etc/init.d/apache2 stop
|
||||
sudo nginx -s stop
|
||||
main_create_cluster
|
||||
main_build_services "${@:2}"
|
||||
cd ./oc-k8s
|
||||
main_create_helm $1
|
||||
}
|
||||
|
||||
main_stop() {
|
||||
main_delete_helm "${@:1}" | true
|
||||
main_delete_cluster "${@:1}" | true
|
||||
}
|
||||
|
||||
if declare -f main_${1} > /dev/null; then
|
||||
main_${1} "${@:2}"
|
||||
elif declare -f main_${1}_${2} > /dev/null; then
|
||||
main_${1}_${2} "${@:3}"
|
||||
else
|
||||
echo "Function does not exist"
|
||||
main_help_all
|
||||
fi
|
||||
@@ -1,19 +0,0 @@
|
||||
{{- if index .Values.ocFront.enabled }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: front-config
|
||||
data:
|
||||
config.json: |
|
||||
{
|
||||
"WORKSPACE_HOST": "{{ .Values.scheme }}://{{ .Values.host }}/workspace",
|
||||
"WORKFLOW_HOST": "{{ .Values.scheme }}://{{ .Values.host }}/workflow",
|
||||
"CATALOG_HOST": "{{ .Values.scheme }}://{{ .Values.host }}/catalog",
|
||||
"SCHEDULER_HOST": "{{ .Values.scheme }}://{{ .Values.host }}/scheduler",
|
||||
"PEER_HOST": "{{ .Values.scheme }}://{{ .Values.host }}/peers",
|
||||
"DATACENTER_HOST": "{{ .Values.scheme }}://{{ .Values.host }}/datacenter",
|
||||
"COLLABORATIVE_AREA_HOST": "{{ .Values.scheme }}://{{ .Values.host }}/shared",
|
||||
"HOST": "{{ .Values.scheme }}://{{ .Values.host }}",
|
||||
"AUTH_HOST": "{{ .Values.scheme }}://{{ .Values.host }}/auth"
|
||||
}
|
||||
{{- end }}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user