Compare commits
	
		
			40 Commits
		
	
	
		
			v0.1.0
			...
			0c35993122
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 0c35993122 | ||
|  | 3abf53ec6c | ||
|  | 19790f61e2 | ||
|  | ebf9d3fc6d | ||
|  | 741d1a0ffe | ||
|  | 8632b02f0e | ||
|  | 95884e14d6 | ||
|  | bd58ac1e02 | ||
|  | 9f0218a4da | ||
|  | dfa9fe3f1e | ||
|  | 5d4de618dd | ||
|  | 3481bccc22 | ||
|  | 199209d9f1 | ||
|  | 330e4e9d4a | ||
|  | 6fef803ae9 | ||
|  | 3271246e74 | ||
|  | 80ef56bbc4 | ||
|  | c1134f7403 | ||
|  | 9561dc5493 | ||
|  | 279f93224f | ||
|  | c7f8503fb6 | ||
|  | 4bce096e1f | ||
|  | 75b7b94a50 | ||
|  | 13025746e6 | ||
|  | 550675a4aa | ||
|  | a1af83689d | ||
|  | 53a614bd7e | ||
|  | da9aab90eb | ||
|  | 052e6f1368 | ||
|  | dddd5d1831 | ||
|  | a7a5465a22 | ||
|  | 48301bf82e | ||
|  | d12d3e31bf | ||
|  | 9e267becca | ||
|  | 756638fe21 | ||
|  | 11a4d5cc90 | ||
|  | 26404e5892 | ||
|  | 9cf954776f | ||
|  | 11f56722f7 | ||
|  | 4ae5926b01 | 
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | bin | ||||||
|  | *.base64 | ||||||
|  | env | ||||||
							
								
								
									
										33
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | #!make | ||||||
|  |  | ||||||
|  | include env | ||||||
|  | export | ||||||
|  |  | ||||||
|  | ifndef OC_VERSION | ||||||
|  | $(error OC_VERSION is not set) | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | ifndef PUBLISH_TOKEN | ||||||
|  | $(error PUBLISH_TOKEN is not set) | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | PUBLISH_REPO := "core/oc-deploy" | ||||||
|  | PUBLISH_BRANCH := main | ||||||
|  |  | ||||||
|  | help: | ||||||
|  | 	@echo | ||||||
|  | 	@echo 'Usage:' | ||||||
|  | 	@echo '    make publish' | ||||||
|  | 	@echo '    make clean' | ||||||
|  |  | ||||||
|  | .PHONY: publish | ||||||
|  | publish: | ||||||
|  | 	@echo Publication de : ${OC_VERSION} | ||||||
|  | 	@(cd publish && \ | ||||||
|  |         PUBLISH_REPO=${PUBLISH_REPO} \ | ||||||
|  |         PUBLISH_TOKEN=${PUBLISH_TOKEN} \ | ||||||
|  |         PUBLISH_BRANCH=${PUBLISH_BRANCH} \ | ||||||
|  |         go run main.go ${OC_VERSION}) | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	@rm *.base64 | ||||||
							
								
								
									
										172
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										172
									
								
								README.md
									
									
									
									
									
								
							| @@ -4,100 +4,114 @@ The purpose of oc-deploy, is to deploy all the OC components over a Kubernetes c | |||||||
|  |  | ||||||
| An OpenCloud deployment is composed of the following layers:  | An OpenCloud deployment is composed of the following layers:  | ||||||
|  |  | ||||||
| OpenCloud components | <-- TODO |  | ||||||
| -------------------------- | | Layer                    | Tool                  | | ||||||
| KubernetesCluster | <-- TODO | | ------------------------ | --------------------- | | ||||||
| --------------------------  | | OpenCloud components     | oc-deploy binary      | | ||||||
| IaaS (VMs, LAN) | <-- pre-requisite | | KubernetesCluster        | TODO or pre-requisite | | ||||||
| -------------------------- | | IaaS (VMs, LAN)          | pre-requisite         | | ||||||
| HW (network and servers) | <-- pre-requisite | | HW (network and servers) | <-- pre-requisite     | | ||||||
| -------------------------- |  | ||||||
|  |  | ||||||
|  |  | ||||||
| It thus contains a first optional installation layer which deploys the Kubernetes nodes (control plane(s) and workers) above an existing infrastructure (Iaas). | It thus contains a first optional installation layer which deploys the Kubernetes nodes (control plane(s) and workers) above an existing infrastructure (Iaas). | ||||||
|  |  | ||||||
| Then the second installation layer uses Helm charts to deploy and configure all the OC components. |  | ||||||
|  |  | ||||||
| This documentation will be updated with the needed command and/or requirements to properly execute the installation. | This documentation will be updated with the needed command and/or requirements to properly execute the installation. | ||||||
|  |  | ||||||
| # Deploy cluster |  | ||||||
| ## For dev in Docker | # oc-deploy tools | ||||||
| Install brew |  | ||||||
|  | ## Usage | ||||||
|  |  | ||||||
|  | | Command                                                                       | Description                 | | ||||||
|  | | ----------------------------------------------------------------------------- | --------------------------- | | ||||||
|  | | ```oc-deploy```                                                               | Display help                | | ||||||
|  | | ```oc-deploy version```                                                       | Display the version of tool | | ||||||
|  | | ```oc-deploy install [-c\|--context <context>] [-v\|--version <OcVersion>]``` | Deploy an OpenCloud         | | ||||||
|  | | ```oc-deploy uninstall [-c\|--context <context>]```                           | Undeploy an OpenCloud       | | ||||||
|  |  | ||||||
|  | | Arguments        | Description                 | Default      | | ||||||
|  | | ---------------- | --------------------------- | ------------ | | ||||||
|  | | ```context```    | Context Kubernetes          |  _opencloud_ | | ||||||
|  | | ```OcVersion```  | Specific version or latest  | _latest_     | | ||||||
|  |  | ||||||
|  | ## Principe | ||||||
|  |  | ||||||
|  | * Download an "OpenCloud file version" : oc_<version>.yml from relase on GitEa (core/oc-version). | ||||||
|  | * Initialise an workspace direcotry : ./workspace_<contextK8S> | ||||||
|  | * Install tools as describe, if not found on the path : | ||||||
|  |   * Helm | ||||||
|  |   * Kubectl | ||||||
|  | * Check if the Cluster (context) is available | ||||||
|  | * Install all charts as describe : | ||||||
|  |   * Charts : from Harbor or local | ||||||
|  |   * Images : from Harbor or local | ||||||
|  | * Check if componants are available | ||||||
|  |  | ||||||
|  | ## Pre-requis | ||||||
|  |  | ||||||
|  | **oc-deploy** need to access to an Kubernetes Cluster, c'est-à-dire : kubeconfig. | ||||||
|  |  | ||||||
|  | **oc-deploy** need to access to Internet : | ||||||
|  |  | ||||||
|  | * to download the _oc.json_ file (contient _oc.yml_) : | ||||||
|  |   * Url : https://cloud.o-forge.io/core/oc-deploy/releases | ||||||
|  | * to download _kubectl_ and _helm_ tools if | ||||||
|  |   * Url : Urls are specified into _oc.yml_ | ||||||
|  |  | ||||||
|  | ## Dev | ||||||
|  |  | ||||||
|  | Cf. src/README.md | ||||||
|  |  | ||||||
|  | ## Publish | ||||||
|  |  | ||||||
|  | Publish in the relase GitEa the binary (the binary is base64 coding). | ||||||
|  |  | ||||||
|  | Set **env** file to overwrite varibable as : | ||||||
|  |  | ||||||
|  |     #!make | ||||||
|  |     PUBLISH_TOKEN = <gitea_token> | ||||||
|  |  | ||||||
|  | To publish : | ||||||
|  |  | ||||||
|  |     OC_VERSION = <x.y.z> make publish | ||||||
|  |   | ||||||
|  | # Installation on Kubernetes | ||||||
|  |  | ||||||
|  | ## Minikube | ||||||
|  |  | ||||||
|  | TO DO | ||||||
|  |  | ||||||
|  | ## Kubernetes | ||||||
|  |  | ||||||
|  | TO DO | ||||||
|  |  | ||||||
|  | ## RKE2 | ||||||
|  |  | ||||||
|  | TO DO | ||||||
|  |  | ||||||
|  | ## OpenShift | ||||||
|  |  | ||||||
|  | TO DO | ||||||
|  |  | ||||||
|  | # Installation on Docker  | ||||||
|  |  | ||||||
|  | Without Kubernetes, for dev in Docker | ||||||
|  |  | ||||||
|  | ## Install brew | ||||||
|  |  | ||||||
|     /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |     /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" | ||||||
|  |  | ||||||
| Install Talos | ## Install Talos | ||||||
|  |  | ||||||
|     brew install siderolabs/tap/talosctl |     brew install siderolabs/tap/talosctl | ||||||
|     talosctl cluster create |     talosctl cluster create | ||||||
| # Install helm | ## Install helm | ||||||
|     curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 |     curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | ||||||
|     chmod 700 get_helm.sh |     chmod 700 get_helm.sh | ||||||
|     ./get_helm.sh |     ./get_helm.sh | ||||||
|  |  | ||||||
| -------------------------- | ## Create OpenCloud Chart  | ||||||
| # Create OpenCloud Chart |  | ||||||
|  |  | ||||||
| # `oc-deploy` Component | Obsolete : use oc-deploy tool | ||||||
|  |  | ||||||
| The `oc-deploy` component aims to simplify and automate the deployment of OpenCloud components on a Kubernetes cluster through the creation of Helm Charts. |     helm create occhart | ||||||
|  |  | ||||||
| ## Prerequisites: |  | ||||||
| - Access to the OpenCloud forge and the associated Harbor registry: [https://registry.o-forge.io/](https://registry.o-forge.io/), which will allow pulling OpenCloud release images from the "stable" project. |  | ||||||
| - To test the connection to this registry from the Docker client: |  | ||||||
|   ```bash |  | ||||||
|   docker login registry.o-forge.io |  | ||||||
|   ``` |  | ||||||
| - A Kubernetes cluster: Minikube, K3s, RKE2, etc. See `KubernetesCluster`. |  | ||||||
| - Helm installed locally |  | ||||||
|  |  | ||||||
| ## **To Be Defined:** |  | ||||||
| ### Configuring a Docker Secret for Kubernetes |  | ||||||
| Kubernetes needs to know your credentials to pull images from the "registry.o-forge.io" registry. Create a Docker secret in Kubernetes: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| kubectl create secret docker-registry regcred \ |  | ||||||
|   --docker-server=registry.o-forge.io \ |  | ||||||
|   --docker-username=<your_username> \ |  | ||||||
|   --docker-password=<your_password> \ |  | ||||||
|   --docker-email=<your_email> |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Checking if Helm Recognizes Your Local Kubernetes Cluster: |  | ||||||
|  |  | ||||||
| ### 1. Verify Connection to Kubernetes: |  | ||||||
| Before checking Helm, ensure that your `kubectl` is properly configured to connect to your local Kubernetes cluster. |  | ||||||
| Run the following command to see if you can communicate with the cluster: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| kubectl get nodes |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
|  |  | ||||||
| If this command returns the list of nodes in your cluster, it means `kubectl` is properly connected. |  | ||||||
|  |  | ||||||
| ### 2. Verify Helm Configuration: |  | ||||||
| Now, you can check if Helm can access the cluster by using the following command: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| helm version |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| This command displays the Helm version and the Kubernetes version it is connected to. |  | ||||||
|  |  | ||||||
| ## Deploying with Helm: |  | ||||||
| You can deploy the `oc-deploy` Chart with Helm: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| helm install oc-deploy path/to/your/Helm/oc-deploy |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Checking Helm Releases: |  | ||||||
| You can also list the existing releases to see if Helm is properly connected to the cluster: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| helm list |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| If all these commands execute without errors and give the expected results, your Helm installation is correctly configured to recognize and interact with your local Kubernetes cluster |  | ||||||
|   | |||||||
| @@ -1,88 +0,0 @@ | |||||||
| version: '3.8' |  | ||||||
|  |  | ||||||
| services: |  | ||||||
|   traefik: |  | ||||||
|     image: traefik:latest |  | ||||||
|     command: |  | ||||||
|       - "--api.insecure=true" |  | ||||||
|       - "--providers.docker=true" |  | ||||||
|       - "--entrypoints.web.address=:80" |  | ||||||
|     ports: |  | ||||||
|       - "80:80" |  | ||||||
|       - "8080:8080" |  | ||||||
|     volumes: |  | ||||||
|       - /var/run/docker.sock:/var/run/docker.sock |  | ||||||
|  |  | ||||||
|   mongo: |  | ||||||
|     image: mongo:latest |  | ||||||
|     ports: |  | ||||||
|       - "27017:27017" |  | ||||||
|     volumes: |  | ||||||
|       - mongo-data:/data/db |  | ||||||
|     labels: |  | ||||||
|       - "traefik.enable=true" |  | ||||||
|       - "traefik.http.routers.mongo.rule=PathPrefix(`/mongo`)" |  | ||||||
|       - "traefik.http.services.mongo.loadbalancer.server.port=27017" |  | ||||||
|  |  | ||||||
|   nats: |  | ||||||
|     image: nats:latest |  | ||||||
|     ports: |  | ||||||
|       - "4222:4222" |  | ||||||
|     labels: |  | ||||||
|       - "traefik.enable=true" |  | ||||||
|       - "traefik.http.routers.nats.rule=PathPrefix(`/nats`)" |  | ||||||
|       - "traefik.http.services.nats.loadbalancer.server.port=4222" |  | ||||||
|  |  | ||||||
|   zinc: |  | ||||||
|     image: public.ecr.aws/zinclabs/zincsearch:latest |  | ||||||
|     ports: |  | ||||||
|       - "4080:4080" |  | ||||||
|     labels: |  | ||||||
|       - "traefik.enable=true" |  | ||||||
|       - "traefik.http.routers.zinc.rule=PathPrefix(`/zinc`)" |  | ||||||
|       - "traefik.http.services.zinc.loadbalancer.server.port=4080" |  | ||||||
|  |  | ||||||
|   dex: |  | ||||||
|     image: quay.io/dexidp/dex:latest |  | ||||||
|     ports: |  | ||||||
|       - "5556:5556" |  | ||||||
|     volumes: |  | ||||||
|       - ./dex/config.yaml:/etc/dex/cfg/config.yaml |  | ||||||
|     command: ["dex", "serve", "/etc/dex/cfg/config.yaml"] |  | ||||||
|     labels: |  | ||||||
|       - "traefik.enable=true" |  | ||||||
|       - "traefik.http.routers.dex.rule=PathPrefix(`/dex`)" |  | ||||||
|       - "traefik.http.services.dex.loadbalancer.server.port=5556" |  | ||||||
|  |  | ||||||
|   ldap: |  | ||||||
|     image: bitnami/openldap |  | ||||||
|     ports: |  | ||||||
|       - "389:389" |  | ||||||
|     environment: |  | ||||||
|       - LDAP_ADMIN_USERNAME=admin |  | ||||||
|       - LDAP_ADMIN_PASSWORD=adminpassword |  | ||||||
|       - LDAP_USERS=user01,user02 |  | ||||||
|       - LDAP_PASSWORDS=password1,password2 |  | ||||||
|  |  | ||||||
|   grafana: |  | ||||||
|     image: grafana/grafana:latest |  | ||||||
|     ports: |  | ||||||
|       - "3000:3000" |  | ||||||
|     environment: |  | ||||||
|       GF_SECURITY_ADMIN_PASSWORD: "admin" |  | ||||||
|     labels: |  | ||||||
|       - "traefik.enable=true" |  | ||||||
|       - "traefik.http.routers.grafana.rule=PathPrefix(`/grafana`)" |  | ||||||
|       - "traefik.http.services.grafana.loadbalancer.server.port=3000" |  | ||||||
|  |  | ||||||
|   loki: |  | ||||||
|     image: grafana/loki:latest |  | ||||||
|     ports: |  | ||||||
|       - "3100:3100" |  | ||||||
|     labels: |  | ||||||
|       - "traefik.enable=true" |  | ||||||
|       - "traefik.http.routers.loki.rule=PathPrefix(`/loki`)" |  | ||||||
|       - "traefik.http.services.loki.loadbalancer.server.port=3100" |  | ||||||
|  |  | ||||||
| volumes: |  | ||||||
|   mongo-data: |  | ||||||
| @@ -1,53 +0,0 @@ | |||||||
| @startuml Arch Diagram |  | ||||||
|  |  | ||||||
| top to bottom direction |  | ||||||
|  |  | ||||||
| component front as "oc-front" #MistyRose |  | ||||||
|  |  | ||||||
| component api as "oc-api" #BlueViolet |  | ||||||
| component auth as "oc-auth" #BlueViolet |  | ||||||
|  |  | ||||||
| component catalog as "oc-catalog" #MistyRose |  | ||||||
| component workspace as "oc-workspace" #MistyRose |  | ||||||
| component workflow as "oc-workflow" #MistyRose |  | ||||||
| component calendarIn as "oc-calendar-in" #MistyRose |  | ||||||
| component calendarOut as "oc-calendar-out" #MistyRose |  | ||||||
| component stat as "oc-status" #MistyRose |  | ||||||
|  |  | ||||||
| component disco as "oc-discovery" #MistyRose |  | ||||||
| component agg as "oc-aggregator" #MistyRose |  | ||||||
|  |  | ||||||
| component scheduler as "oc-scheduler" #LightYellow |  | ||||||
| component monitor as "oc-monitor" #LightYellow |  | ||||||
|  |  | ||||||
| database rd as "Nats" #Green |  | ||||||
| database zn as "Zinc" #Green |  | ||||||
| database loki as "Loki" #Green |  | ||||||
| database mongo as "MongoDB" #Green |  | ||||||
| database nats as "Nats" #Green |  | ||||||
|  |  | ||||||
| front -- api |  | ||||||
|  |  | ||||||
| api -- auth : auth user |  | ||||||
| api -- catalog : local search |  | ||||||
| api -- workspace : store user data |  | ||||||
| api -- workflow |  | ||||||
| api -- calendarIn |  | ||||||
| api -- calendarOut |  | ||||||
| api -- stat |  | ||||||
|  |  | ||||||
| catalog -- disco |  | ||||||
| catalog -- agg |  | ||||||
|  |  | ||||||
| scheduler -- monitor |  | ||||||
| scheduler -- catalog |  | ||||||
|  |  | ||||||
| rd -- scheduler |  | ||||||
| loki -- monitor |  | ||||||
|  |  | ||||||
| catalog -- mongo  : store resources available for users |  | ||||||
| workspace -- mongo  : store resources allocated to a workspace |  | ||||||
| workflow -- mongo  : store workflow  |  | ||||||
| calendarOut -- mongo  : store booking informations for this dc |  | ||||||
|  |  | ||||||
| @enduml |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| apiVersion: v2 |  | ||||||
| name: oc-catalog |  | ||||||
| description: A Helm chart for deploying the oc-catalog application |  | ||||||
| version: 0.1.0 |  | ||||||
| appVersion: "1.0" |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-oc-catalog |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: {{ .Chart.Name }} |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: {{ .Values.service.port }} |  | ||||||
|       targetPort: {{ .Values.service.targetPort }} |  | ||||||
|   type: {{ .Values.service.type }} |  | ||||||
| @@ -1,33 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: StatefulSet |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-oc-catalog |  | ||||||
|   labels: |  | ||||||
|     app: oc-catalog |  | ||||||
| spec: |  | ||||||
|   serviceName: "{{ .Release.Name }}-oc-catalog" |  | ||||||
|   replicas: {{ .Values.replicaCount }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: oc-catalog |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: oc-catalog |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: oc-catalog |  | ||||||
|         image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |  | ||||||
|         ports: |  | ||||||
|         - containerPort: 8080 |  | ||||||
|         env: |  | ||||||
|         - name: MONGO_DATABASE |  | ||||||
|           value: "DC_myDC" |  | ||||||
|         - name: MONGO_URI |  | ||||||
|           value: "mongodb://mongo:27017" |  | ||||||
|       imagePullSecrets: |  | ||||||
|       {{- if .Values.imagePullSecrets }} |  | ||||||
|       {{- range .Values.imagePullSecrets }} |  | ||||||
|         - name: {{ .name }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end }} |  | ||||||
| @@ -1,19 +0,0 @@ | |||||||
| replicaCount: 1 |  | ||||||
|  |  | ||||||
| image: |  | ||||||
|   repository: registry.dev.svc.cluster.local:5000/oc-catalog |  | ||||||
|   tag: latest |  | ||||||
|   pullPolicy: IfNotPresent |  | ||||||
|  |  | ||||||
| service: |  | ||||||
|   type: NodePort |  | ||||||
|   port: 8087 |  | ||||||
|   targetPort: 8080 |  | ||||||
|  |  | ||||||
| mongo: |  | ||||||
|   database: DC_myDC |  | ||||||
|   uri: mongodb://mongo:27017 |  | ||||||
|  |  | ||||||
| imagePullSecrets: |  | ||||||
|   - name: regcred |  | ||||||
|  |  | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| # 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/ |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| dependencies: |  | ||||||
| - name: oc-mongo |  | ||||||
|   repository: file://../oc-mongo |  | ||||||
|   version: 0.1.0 |  | ||||||
| - name: oc-mongo-express |  | ||||||
|   repository: file://../oc-mongo-express |  | ||||||
|   version: 0.1.0 |  | ||||||
| - name: oc-catalog |  | ||||||
|   repository: file://../oc-catalog |  | ||||||
|   version: 0.1.0 |  | ||||||
| digest: sha256:036af8acf7fe0a73f039776d13f63aeb7530e7a8b0febb49fd5e8415ac6672c6 |  | ||||||
| generated: "2024-08-27T14:34:41.6038407+02:00" |  | ||||||
| @@ -1,14 +0,0 @@ | |||||||
| apiVersion: v2 |  | ||||||
| name: oc-deploy |  | ||||||
| description: A Helm chart to deploy oc-mongo, oc-mongo-express, and oc-catalog together |  | ||||||
| version: 0.1.0 |  | ||||||
| dependencies: |  | ||||||
|   - name: oc-mongo |  | ||||||
|     version: 0.1.0 |  | ||||||
|     repository: "file://../oc-mongo" |  | ||||||
|   - name: oc-mongo-express |  | ||||||
|     version: 0.1.0 |  | ||||||
|     repository: "file://../oc-mongo-express" |  | ||||||
|   - name: oc-catalog |  | ||||||
|     version: 0.1.0 |  | ||||||
|     repository: "file://../oc-catalog" |  | ||||||
										
											Binary file not shown.
										
									
								
							| @@ -1,5 +0,0 @@ | |||||||
| apiVersion: v2 |  | ||||||
| name: oc-catalog |  | ||||||
| description: A Helm chart for deploying the oc-catalog application |  | ||||||
| version: 0.1.0 |  | ||||||
| appVersion: "1.0" |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: oc-catalog |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: {{ .Chart.Name }} |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: {{ .Values.service.port }} |  | ||||||
|       targetPort: {{ .Values.service.targetPort }} |  | ||||||
|   type: {{ .Values.service.type }} |  | ||||||
| @@ -1,33 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: StatefulSet |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-oc-catalog |  | ||||||
|   labels: |  | ||||||
|     app: oc-catalog |  | ||||||
| spec: |  | ||||||
|   serviceName: "oc-catalog" |  | ||||||
|   replicas: {{ .Values.replicaCount }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: oc-catalog |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: oc-catalog |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: oc-catalog |  | ||||||
|         image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |  | ||||||
|         ports: |  | ||||||
|         - containerPort: 8080 |  | ||||||
|         env: |  | ||||||
|         - name: MONGO_DATABASE |  | ||||||
|           value: "DC_myDC" |  | ||||||
|         - name: MONGO_URI |  | ||||||
|           value: "mongodb://{{ .Release.Name }}-mongo:27017" |  | ||||||
|       imagePullSecrets: |  | ||||||
|       {{- if .Values.imagePullSecrets }} |  | ||||||
|       {{- range .Values.imagePullSecrets }} |  | ||||||
|         - name: {{ .name }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end }} |  | ||||||
| @@ -1,19 +0,0 @@ | |||||||
| replicaCount: 1 |  | ||||||
|  |  | ||||||
| image: |  | ||||||
|   repository: registry.dev.svc.cluster.local:5000/oc-catalog |  | ||||||
|   tag: latest |  | ||||||
|   pullPolicy: IfNotPresent |  | ||||||
|  |  | ||||||
| service: |  | ||||||
|   type: NodePort |  | ||||||
|   port: 8087 |  | ||||||
|   targetPort: 8080 |  | ||||||
|  |  | ||||||
| mongo: |  | ||||||
|   database: DC_myDC |  | ||||||
|   uri: mongodb://oc-deploy-mongo:27017 |  | ||||||
|  |  | ||||||
| imagePullSecrets: |  | ||||||
|   - name: regcred |  | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,5 +0,0 @@ | |||||||
| apiVersion: v2 |  | ||||||
| name: oc-mongo-express |  | ||||||
| description: A Helm chart for deploying mongo-express |  | ||||||
| version: 0.1.0 |  | ||||||
| appVersion: "1.0" |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: mongo-express |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: mongo-express |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: {{ .Values.service.port }} |  | ||||||
|       targetPort: {{ .Values.service.targetPort }} |  | ||||||
|   type: {{ .Values.service.type }} |  | ||||||
| @@ -1,39 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: StatefulSet |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-mongo-express |  | ||||||
|   labels: |  | ||||||
|     app: mongo-express |  | ||||||
| spec: |  | ||||||
|   serviceName: "mongo-express" |  | ||||||
|   replicas: {{ .Values.replicaCount }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: mongo-express |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: mongo-express |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: mongo-express |  | ||||||
|         image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |  | ||||||
|         ports: |  | ||||||
|         - containerPort: {{ .Values.service.targetPort }} |  | ||||||
|         env: |  | ||||||
|         - name: ME_CONFIG_BASICAUTH_USERNAME |  | ||||||
|           valueFrom: |  | ||||||
|             secretKeyRef: |  | ||||||
|               name: mongo-secret |  | ||||||
|               key: {{ .Values.secret.usernameKey }} |  | ||||||
|         - name: ME_CONFIG_BASICAUTH_PASSWORD |  | ||||||
|           valueFrom: |  | ||||||
|             secretKeyRef: |  | ||||||
|               name: mongo-secret |  | ||||||
|               key: {{ .Values.secret.passwordKey }} |  | ||||||
|       imagePullSecrets: |  | ||||||
|       {{- if .Values.imagePullSecrets }} |  | ||||||
|       {{- range .Values.imagePullSecrets }} |  | ||||||
|         - name: {{ .name }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end }} |  | ||||||
| @@ -1,18 +0,0 @@ | |||||||
| replicaCount: 1 |  | ||||||
|  |  | ||||||
| image: |  | ||||||
|   repository: mongo-express |  | ||||||
|   tag: latest |  | ||||||
|   pullPolicy: IfNotPresent |  | ||||||
|  |  | ||||||
| service: |  | ||||||
|   port: 8081 |  | ||||||
|   targetPort: 8081 |  | ||||||
|   type: NodePort |  | ||||||
|  |  | ||||||
| imagePullSecrets: |  | ||||||
|   - name: my-registry-key |  | ||||||
|  |  | ||||||
| secret: |  | ||||||
|   usernameKey: mongo-username |  | ||||||
|   passwordKey: mongo-password |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| apiVersion: v2 |  | ||||||
| name: oc-mongo |  | ||||||
| description: A Helm chart for deploying the oc-mongo component |  | ||||||
| version: 0.1.0 |  | ||||||
| appVersion: "1.0" |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: PersistentVolumeClaim |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Values.persistence.name }} |  | ||||||
| spec: |  | ||||||
|   accessModes: |  | ||||||
|     - {{ .Values.persistence.accessMode }} |  | ||||||
|   resources: |  | ||||||
|     requests: |  | ||||||
|       storage: {{ .Values.persistence.size }} |  | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Secret |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-mongo-secret |  | ||||||
| type: Opaque |  | ||||||
| data: |  | ||||||
|   username: {{ .Values.secret.username }} |  | ||||||
|   password: {{ .Values.secret.password }} |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: mongo |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: mongo |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: {{ .Values.service.port }} |  | ||||||
|       targetPort: {{ .Values.service.port }} |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: StatefulSet |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-mongo |  | ||||||
|   labels: |  | ||||||
|     app: mongo |  | ||||||
| spec: |  | ||||||
|   serviceName: "mongo" |  | ||||||
|   replicas: {{ .Values.replicaCount }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: mongo |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: mongo |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: mongo |  | ||||||
|         image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |  | ||||||
|         ports: |  | ||||||
|         - containerPort: 27017 |  | ||||||
|         volumeMounts: |  | ||||||
|         - name: mongo-persistent-storage |  | ||||||
|           mountPath: /data/db |  | ||||||
|         - name: mongo-persistent-storage |  | ||||||
|           mountPath: /data/configdb |  | ||||||
|       volumes: |  | ||||||
|       - name: mongo-persistent-storage |  | ||||||
|         persistentVolumeClaim: |  | ||||||
|           claimName: {{ .Values.persistence.name }} |  | ||||||
| @@ -1,19 +0,0 @@ | |||||||
| replicaCount: 1 |  | ||||||
|  |  | ||||||
| image: |  | ||||||
|   repository: mongo |  | ||||||
|   tag: latest |  | ||||||
|   pullPolicy: IfNotPresent |  | ||||||
|  |  | ||||||
| service: |  | ||||||
|   port: 27017 |  | ||||||
|  |  | ||||||
| persistence: |  | ||||||
|   name: mongo-pvc-helm |  | ||||||
|   enabled: true |  | ||||||
|   accessMode: ReadWriteOnce |  | ||||||
|   size: 1Gi |  | ||||||
|  |  | ||||||
| secret: |  | ||||||
|   username: dGVzdA==  # base64 encoding of 'test' |  | ||||||
|   password: dGVzdA==  # base64 encoding of 'test' |  | ||||||
| @@ -1,48 +0,0 @@ | |||||||
| oc-mongo: |  | ||||||
|   replicaCount: 1 |  | ||||||
|   image: |  | ||||||
|     repository: registry.dev.svc.cluster.local:5000/mongo |  | ||||||
|     tag: latest |  | ||||||
|     pullPolicy: IfNotPresent |  | ||||||
|   service: |  | ||||||
|     port: 27017 |  | ||||||
|   persistence: |  | ||||||
|     name: mongo-pvc-helm |  | ||||||
|     enabled: true |  | ||||||
|     accessMode: ReadWriteOnce |  | ||||||
|     size: 1Gi |  | ||||||
|   secret: |  | ||||||
|     username: dGVzdA==  # base64 encoding of 'test' |  | ||||||
|     password: dGVzdA==  # base64 encoding of 'test' |  | ||||||
|  |  | ||||||
| oc-mongo-express: |  | ||||||
|   replicaCount: 1 |  | ||||||
|   image: |  | ||||||
|     repository: registry.dev.svc.cluster.local:5000/mongo-express |  | ||||||
|     tag: latest |  | ||||||
|     pullPolicy: IfNotPresent |  | ||||||
|   service: |  | ||||||
|     port: 8081 |  | ||||||
|     targetPort: 8081 |  | ||||||
|     type: NodePort |  | ||||||
|   imagePullSecrets: |  | ||||||
|     - name: regcred |  | ||||||
|   secret: |  | ||||||
|     usernameKey: mongo-username |  | ||||||
|     passwordKey: mongo-password |  | ||||||
|  |  | ||||||
| oc-catalog: |  | ||||||
|   replicaCount: 1 |  | ||||||
|   image: |  | ||||||
|     repository: registry.dev.svc.cluster.local:5000/oc-catalog |  | ||||||
|     tag: latest |  | ||||||
|     pullPolicy: IfNotPresent |  | ||||||
|   service: |  | ||||||
|     type: NodePort |  | ||||||
|     port: 8087 |  | ||||||
|     targetPort: 8080 |  | ||||||
|   mongo: |  | ||||||
|     database: DC_myDC |  | ||||||
|     uri: mongodb://oc-catalog-mongo:27017 |  | ||||||
|   imagePullSecrets: |  | ||||||
|     - name: regcred |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| apiVersion: v2 |  | ||||||
| name: oc-mongo-express |  | ||||||
| description: A Helm chart for deploying mongo-express |  | ||||||
| version: 0.1.0 |  | ||||||
| appVersion: "1.0" |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-mongo-express |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: mongo-express |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: {{ .Values.service.port }} |  | ||||||
|       targetPort: {{ .Values.service.targetPort }} |  | ||||||
|   type: {{ .Values.service.type }} |  | ||||||
| @@ -1,39 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: StatefulSet |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-mongo-express |  | ||||||
|   labels: |  | ||||||
|     app: mongo-express |  | ||||||
| spec: |  | ||||||
|   serviceName: "{{ .Release.Name }}-mongo-express" |  | ||||||
|   replicas: {{ .Values.replicaCount }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: mongo-express |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: mongo-express |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: mongo-express |  | ||||||
|         image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |  | ||||||
|         ports: |  | ||||||
|         - containerPort: {{ .Values.service.targetPort }} |  | ||||||
|         env: |  | ||||||
|         - name: ME_CONFIG_BASICAUTH_USERNAME |  | ||||||
|           valueFrom: |  | ||||||
|             secretKeyRef: |  | ||||||
|               name: mongo-secret |  | ||||||
|               key: {{ .Values.secret.usernameKey }} |  | ||||||
|         - name: ME_CONFIG_BASICAUTH_PASSWORD |  | ||||||
|           valueFrom: |  | ||||||
|             secretKeyRef: |  | ||||||
|               name: mongo-secret |  | ||||||
|               key: {{ .Values.secret.passwordKey }} |  | ||||||
|       imagePullSecrets: |  | ||||||
|       {{- if .Values.imagePullSecrets }} |  | ||||||
|       {{- range .Values.imagePullSecrets }} |  | ||||||
|         - name: {{ .name }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- end }} |  | ||||||
| @@ -1,18 +0,0 @@ | |||||||
| replicaCount: 1 |  | ||||||
|  |  | ||||||
| image: |  | ||||||
|   repository: mongo-express |  | ||||||
|   tag: latest |  | ||||||
|   pullPolicy: IfNotPresent |  | ||||||
|  |  | ||||||
| service: |  | ||||||
|   port: 8081 |  | ||||||
|   targetPort: 8081 |  | ||||||
|   type: NodePort |  | ||||||
|  |  | ||||||
| imagePullSecrets: |  | ||||||
|   - name: my-registry-key |  | ||||||
|  |  | ||||||
| secret: |  | ||||||
|   usernameKey: mongo-username |  | ||||||
|   passwordKey: mongo-password |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| apiVersion: v2 |  | ||||||
| name: oc-mongo |  | ||||||
| description: A Helm chart for deploying the oc-mongo component |  | ||||||
| version: 0.1.0 |  | ||||||
| appVersion: "1.0" |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: PersistentVolumeClaim |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Values.persistence.name }} |  | ||||||
| spec: |  | ||||||
|   accessModes: |  | ||||||
|     - {{ .Values.persistence.accessMode }} |  | ||||||
|   resources: |  | ||||||
|     requests: |  | ||||||
|       storage: {{ .Values.persistence.size }} |  | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Secret |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-mongo-secret |  | ||||||
| type: Opaque |  | ||||||
| data: |  | ||||||
|   username: {{ .Values.secret.username }} |  | ||||||
|   password: {{ .Values.secret.password }} |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: mongo |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: mongo |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: {{ .Values.service.port }} |  | ||||||
|       targetPort: {{ .Values.service.port }} |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: StatefulSet |  | ||||||
| metadata: |  | ||||||
|   name: {{ .Release.Name }}-mongo |  | ||||||
|   labels: |  | ||||||
|     app: mongo |  | ||||||
| spec: |  | ||||||
|   serviceName: "{{ .Release.Name }}-mongo" |  | ||||||
|   replicas: {{ .Values.replicaCount }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: mongo |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: mongo |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: mongo |  | ||||||
|         image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |  | ||||||
|         ports: |  | ||||||
|         - containerPort: 27017 |  | ||||||
|         volumeMounts: |  | ||||||
|         - name: mongo-persistent-storage |  | ||||||
|           mountPath: /data/db |  | ||||||
|         - name: mongo-persistent-storage |  | ||||||
|           mountPath: /data/configdb |  | ||||||
|       volumes: |  | ||||||
|       - name: mongo-persistent-storage |  | ||||||
|         persistentVolumeClaim: |  | ||||||
|           claimName: {{ .Values.persistence.name }} |  | ||||||
| @@ -1,19 +0,0 @@ | |||||||
| replicaCount: 1 |  | ||||||
|  |  | ||||||
| image: |  | ||||||
|   repository: mongo |  | ||||||
|   tag: latest |  | ||||||
|   pullPolicy: IfNotPresent |  | ||||||
|  |  | ||||||
| service: |  | ||||||
|   port: 27017 |  | ||||||
|  |  | ||||||
| persistence: |  | ||||||
|   name: mongo-pvc-helm |  | ||||||
|   enabled: true |  | ||||||
|   accessMode: ReadWriteOnce |  | ||||||
|   size: 1Gi |  | ||||||
|  |  | ||||||
| secret: |  | ||||||
|   username: dGVzdA==  # base64 encoding of 'test' |  | ||||||
|   password: dGVzdA==  # base64 encoding of 'test' |  | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| # 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/ |  | ||||||
| @@ -1,24 +0,0 @@ | |||||||
| apiVersion: v2 |  | ||||||
| name: occhart |  | ||||||
| description: A Helm chart for Kubernetes |  | ||||||
|  |  | ||||||
| # A chart can be either an 'application' or a 'library' chart. |  | ||||||
| # |  | ||||||
| # Application charts are a collection of templates that can be packaged into versioned archives |  | ||||||
| # to be deployed. |  | ||||||
| # |  | ||||||
| # Library charts provide useful utilities or functions for the chart developer. They're included as |  | ||||||
| # a dependency of application charts to inject those utilities and functions into the rendering |  | ||||||
| # pipeline. Library charts do not define any templates and therefore cannot be deployed. |  | ||||||
| type: application |  | ||||||
|  |  | ||||||
| # This is the chart version. This version number should be incremented each time you make changes |  | ||||||
| # to the chart and its templates, including the app version. |  | ||||||
| # Versions are expected to follow Semantic Versioning (https://semver.org/) |  | ||||||
| version: 0.1.0 |  | ||||||
|  |  | ||||||
| # This is the version number of the application being deployed. This version number should be |  | ||||||
| # incremented each time you make changes to the application. Versions are not expected to |  | ||||||
| # follow Semantic Versioning. They should reflect the version the application is using. |  | ||||||
| # It is recommended to use it with quotes. |  | ||||||
| appVersion: "1.16.0" |  | ||||||
| @@ -1,32 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: dex |  | ||||||
|   labels: |  | ||||||
|     app: dex |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: dex |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: dex |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: dex |  | ||||||
|           image: quay.io/dexidp/dex:v2.27.0 |  | ||||||
|           ports: |  | ||||||
|             - containerPort: 5556 |  | ||||||
|           args: |  | ||||||
|             - serve |  | ||||||
|             - /etc/dex/cfg/config.yaml |  | ||||||
|           volumeMounts: |  | ||||||
|             - mountPath: /etc/dex/cfg |  | ||||||
|               name: config |  | ||||||
|       volumes: |  | ||||||
|         - name: config |  | ||||||
|           configMap: |  | ||||||
|             name: dex-config |  | ||||||
|    |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: dex |  | ||||||
|   labels: |  | ||||||
|     app: dex |  | ||||||
| spec: |  | ||||||
|   ports: |  | ||||||
|     - port: 5556 |  | ||||||
|   selector: |  | ||||||
|     app: dex |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: grafana |  | ||||||
|   labels: |  | ||||||
|     app: grafana |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: grafana |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: grafana |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: grafana |  | ||||||
|           image: grafana/grafana:7.5.0 |  | ||||||
|           ports: |  | ||||||
|             - containerPort: 3000 |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: grafana |  | ||||||
|   labels: |  | ||||||
|     app: grafana |  | ||||||
| spec: |  | ||||||
|   ports: |  | ||||||
|     - port: 3000 |  | ||||||
|   selector: |  | ||||||
|     app: grafana |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: ldap |  | ||||||
|   labels: |  | ||||||
|     app: ldap |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: ldap |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: ldap |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: ldap |  | ||||||
|           image: osixia/openldap:1.5.0 |  | ||||||
|           ports: |  | ||||||
|             - containerPort: 389 |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: ldap |  | ||||||
|   labels: |  | ||||||
|     app: ldap |  | ||||||
| spec: |  | ||||||
|   ports: |  | ||||||
|     - port: 389 |  | ||||||
|   selector: |  | ||||||
|     app: ldap |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: loki |  | ||||||
|   labels: |  | ||||||
|     app: loki |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: loki |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: loki |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: loki |  | ||||||
|           image: grafana/loki:2.2.0 |  | ||||||
|           ports: |  | ||||||
|             - containerPort: 3100 |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: loki |  | ||||||
|   labels: |  | ||||||
|     app: loki |  | ||||||
| spec: |  | ||||||
|   ports: |  | ||||||
|     - port: 3100 |  | ||||||
|   selector: |  | ||||||
|     app: loki |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: mongo |  | ||||||
|   labels: |  | ||||||
|     app: mongo |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: mongo |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: mongo |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: mongo |  | ||||||
|           image: mongo:4.4 |  | ||||||
|           ports: |  | ||||||
|             - containerPort: 27017 |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: mongo |  | ||||||
|   labels: |  | ||||||
|     app: mongo |  | ||||||
| spec: |  | ||||||
|   ports: |  | ||||||
|     - port: 27017 |  | ||||||
|   selector: |  | ||||||
|     app: mongo |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: nats |  | ||||||
|   labels: |  | ||||||
|     app: nats |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: nats |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: nats |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: nats |  | ||||||
|           image: nats:2.1.9 |  | ||||||
|           ports: |  | ||||||
|             - containerPort: 4222 |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: nats |  | ||||||
|   labels: |  | ||||||
|     app: nats |  | ||||||
| spec: |  | ||||||
|   ports: |  | ||||||
|     - port: 4222 |  | ||||||
|   selector: |  | ||||||
|     app: nats |  | ||||||
| @@ -1,37 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: traefik |  | ||||||
|   labels: |  | ||||||
|     app: traefik |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: traefik |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: traefik |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: traefik |  | ||||||
|           image: traefik:v2.4 |  | ||||||
|           ports: |  | ||||||
|             - name: web |  | ||||||
|               containerPort: 80 |  | ||||||
|             - name: admin |  | ||||||
|               containerPort: 8080 |  | ||||||
|           args: |  | ||||||
|             - --entrypoints.web.address=:80 |  | ||||||
|             - --entrypoints.websecure.address=:443 |  | ||||||
|             - --providers.kubernetescrd |  | ||||||
|             - --api |  | ||||||
|           volumeMounts: |  | ||||||
|             - mountPath: /etc/traefik |  | ||||||
|               name: traefik-config |  | ||||||
|       volumes: |  | ||||||
|         - name: traefik-config |  | ||||||
|           configMap: |  | ||||||
|             name: traefik-config |  | ||||||
|  |  | ||||||
| @@ -1,81 +0,0 @@ | |||||||
| apiVersion: networking.k8s.io/v1 |  | ||||||
| kind: Ingress |  | ||||||
| metadata: |  | ||||||
|   name: traefik-ingress |  | ||||||
|   annotations: |  | ||||||
|     traefik.ingress.kubernetes.io/router.entrypoints: web |  | ||||||
| spec: |  | ||||||
|   rules: |  | ||||||
|     - host: <your-domain> |  | ||||||
|       http: |  | ||||||
|         paths: |  | ||||||
|           - path: /front |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: front-service |  | ||||||
|                 port: |  | ||||||
|                   number: 80 |  | ||||||
|           - path: /back1 |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: back1-service |  | ||||||
|                 port: |  | ||||||
|                   number: 80 |  | ||||||
|           - path: /back2 |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: back2-service |  | ||||||
|                 port: |  | ||||||
|                   number: 80 |  | ||||||
|           - path: /mongo |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: mongo |  | ||||||
|                 port: |  | ||||||
|                   number: 27017 |  | ||||||
|           - path: /nats |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: nats |  | ||||||
|                 port: |  | ||||||
|                   number: 4222 |  | ||||||
|           - path: /zinc |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: zinc |  | ||||||
|                 port: |  | ||||||
|                   number: 4080 |  | ||||||
|           - path: /dex |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: dex |  | ||||||
|                 port: |  | ||||||
|                   number: 5556 |  | ||||||
|           - path: /ldap |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: ldap |  | ||||||
|                 port: |  | ||||||
|                   number: 389 |  | ||||||
|           - path: /grafana |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: grafana |  | ||||||
|                 port: |  | ||||||
|                   number: 3000 |  | ||||||
|           - path: /loki |  | ||||||
|             pathType: Prefix |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: loki |  | ||||||
|                 port: |  | ||||||
|                   number: 3100 |  | ||||||
| @@ -1,17 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: traefik |  | ||||||
|   labels: |  | ||||||
|     app: traefik |  | ||||||
| spec: |  | ||||||
|   type: LoadBalancer |  | ||||||
|   ports: |  | ||||||
|     - port: 80 |  | ||||||
|       name: web |  | ||||||
|       targetPort: 80 |  | ||||||
|     - port: 8080 |  | ||||||
|       name: admin |  | ||||||
|       targetPort: 8080 |  | ||||||
|   selector: |  | ||||||
|     app: traefik |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: zinc |  | ||||||
|   labels: |  | ||||||
|     app: zinc |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: zinc |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: zinc |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: zinc |  | ||||||
|           image: public.ecr.aws/zinclabs/zinc:latest |  | ||||||
|           ports: |  | ||||||
|             - containerPort: 4080 |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: zinc |  | ||||||
|   labels: |  | ||||||
|     app: zinc |  | ||||||
| spec: |  | ||||||
|   ports: |  | ||||||
|     - port: 4080 |  | ||||||
|   selector: |  | ||||||
|     app: zinc |  | ||||||
| @@ -1,22 +0,0 @@ | |||||||
| 1. Get the application URL by running these commands: |  | ||||||
| {{- if .Values.ingress.enabled }} |  | ||||||
| {{- range $host := .Values.ingress.hosts }} |  | ||||||
|   {{- range .paths }} |  | ||||||
|   http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} |  | ||||||
|   {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- else if contains "NodePort" .Values.service.type }} |  | ||||||
|   export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "occhart.fullname" . }}) |  | ||||||
|   export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") |  | ||||||
|   echo http://$NODE_IP:$NODE_PORT |  | ||||||
| {{- else if contains "LoadBalancer" .Values.service.type }} |  | ||||||
|      NOTE: It may take a few minutes for the LoadBalancer IP to be available. |  | ||||||
|            You can watch its status by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "occhart.fullname" . }}' |  | ||||||
|   export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "occhart.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") |  | ||||||
|   echo http://$SERVICE_IP:{{ .Values.service.port }} |  | ||||||
| {{- else if contains "ClusterIP" .Values.service.type }} |  | ||||||
|   export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "occhart.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") |  | ||||||
|   export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") |  | ||||||
|   echo "Visit http://127.0.0.1:8080 to use your application" |  | ||||||
|   kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,62 +0,0 @@ | |||||||
| {{/* |  | ||||||
| Expand the name of the chart. |  | ||||||
| */}} |  | ||||||
| {{- define "occhart.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). |  | ||||||
| If release name contains chart name it will be used as a full name. |  | ||||||
| */}} |  | ||||||
| {{- define "occhart.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 "occhart.chart" -}} |  | ||||||
| {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} |  | ||||||
| {{- end }} |  | ||||||
|  |  | ||||||
| {{/* |  | ||||||
| Common labels |  | ||||||
| */}} |  | ||||||
| {{- define "occhart.labels" -}} |  | ||||||
| helm.sh/chart: {{ include "occhart.chart" . }} |  | ||||||
| {{ include "occhart.selectorLabels" . }} |  | ||||||
| {{- if .Chart.AppVersion }} |  | ||||||
| app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} |  | ||||||
| {{- end }} |  | ||||||
| app.kubernetes.io/managed-by: {{ .Release.Service }} |  | ||||||
| {{- end }} |  | ||||||
|  |  | ||||||
| {{/* |  | ||||||
| Selector labels |  | ||||||
| */}} |  | ||||||
| {{- define "occhart.selectorLabels" -}} |  | ||||||
| app.kubernetes.io/name: {{ include "occhart.name" . }} |  | ||||||
| app.kubernetes.io/instance: {{ .Release.Name }} |  | ||||||
| {{- end }} |  | ||||||
|  |  | ||||||
| {{/* |  | ||||||
| Create the name of the service account to use |  | ||||||
| */}} |  | ||||||
| {{- define "occhart.serviceAccountName" -}} |  | ||||||
| {{- if .Values.serviceAccount.create }} |  | ||||||
| {{- default (include "occhart.fullname" .) .Values.serviceAccount.name }} |  | ||||||
| {{- else }} |  | ||||||
| {{- default "default" .Values.serviceAccount.name }} |  | ||||||
| {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,68 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: {{ include "occhart.fullname" . }} |  | ||||||
|   labels: |  | ||||||
|     {{- include "occhart.labels" . | nindent 4 }} |  | ||||||
| spec: |  | ||||||
|   {{- if not .Values.autoscaling.enabled }} |  | ||||||
|   replicas: {{ .Values.replicaCount }} |  | ||||||
|   {{- end }} |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       {{- include "occhart.selectorLabels" . | nindent 6 }} |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       {{- with .Values.podAnnotations }} |  | ||||||
|       annotations: |  | ||||||
|         {{- toYaml . | nindent 8 }} |  | ||||||
|       {{- end }} |  | ||||||
|       labels: |  | ||||||
|         {{- include "occhart.labels" . | nindent 8 }} |  | ||||||
|         {{- with .Values.podLabels }} |  | ||||||
|         {{- toYaml . | nindent 8 }} |  | ||||||
|         {{- end }} |  | ||||||
|     spec: |  | ||||||
|       {{- with .Values.imagePullSecrets }} |  | ||||||
|       imagePullSecrets: |  | ||||||
|         {{- toYaml . | nindent 8 }} |  | ||||||
|       {{- end }} |  | ||||||
|       serviceAccountName: {{ include "occhart.serviceAccountName" . }} |  | ||||||
|       securityContext: |  | ||||||
|         {{- toYaml .Values.podSecurityContext | nindent 8 }} |  | ||||||
|       containers: |  | ||||||
|         - name: {{ .Chart.Name }} |  | ||||||
|           securityContext: |  | ||||||
|             {{- toYaml .Values.securityContext | nindent 12 }} |  | ||||||
|           image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" |  | ||||||
|           imagePullPolicy: {{ .Values.image.pullPolicy }} |  | ||||||
|           ports: |  | ||||||
|             - name: http |  | ||||||
|               containerPort: {{ .Values.service.port }} |  | ||||||
|               protocol: TCP |  | ||||||
|           livenessProbe: |  | ||||||
|             {{- toYaml .Values.livenessProbe | nindent 12 }} |  | ||||||
|           readinessProbe: |  | ||||||
|             {{- toYaml .Values.readinessProbe | nindent 12 }} |  | ||||||
|           resources: |  | ||||||
|             {{- toYaml .Values.resources | nindent 12 }} |  | ||||||
|           {{- with .Values.volumeMounts }} |  | ||||||
|           volumeMounts: |  | ||||||
|             {{- toYaml . | nindent 12 }} |  | ||||||
|           {{- end }} |  | ||||||
|       {{- with .Values.volumes }} |  | ||||||
|       volumes: |  | ||||||
|         {{- toYaml . | nindent 8 }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- with .Values.nodeSelector }} |  | ||||||
|       nodeSelector: |  | ||||||
|         {{- toYaml . | nindent 8 }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- with .Values.affinity }} |  | ||||||
|       affinity: |  | ||||||
|         {{- toYaml . | nindent 8 }} |  | ||||||
|       {{- end }} |  | ||||||
|       {{- with .Values.tolerations }} |  | ||||||
|       tolerations: |  | ||||||
|         {{- toYaml . | nindent 8 }} |  | ||||||
|       {{- end }} |  | ||||||
| @@ -1,32 +0,0 @@ | |||||||
| {{- if .Values.autoscaling.enabled }} |  | ||||||
| apiVersion: autoscaling/v2 |  | ||||||
| kind: HorizontalPodAutoscaler |  | ||||||
| metadata: |  | ||||||
|   name: {{ include "occhart.fullname" . }} |  | ||||||
|   labels: |  | ||||||
|     {{- include "occhart.labels" . | nindent 4 }} |  | ||||||
| spec: |  | ||||||
|   scaleTargetRef: |  | ||||||
|     apiVersion: apps/v1 |  | ||||||
|     kind: Deployment |  | ||||||
|     name: {{ include "occhart.fullname" . }} |  | ||||||
|   minReplicas: {{ .Values.autoscaling.minReplicas }} |  | ||||||
|   maxReplicas: {{ .Values.autoscaling.maxReplicas }} |  | ||||||
|   metrics: |  | ||||||
|     {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} |  | ||||||
|     - type: Resource |  | ||||||
|       resource: |  | ||||||
|         name: cpu |  | ||||||
|         target: |  | ||||||
|           type: Utilization |  | ||||||
|           averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} |  | ||||||
|     {{- end }} |  | ||||||
|     {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} |  | ||||||
|     - type: Resource |  | ||||||
|       resource: |  | ||||||
|         name: memory |  | ||||||
|         target: |  | ||||||
|           type: Utilization |  | ||||||
|           averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} |  | ||||||
|     {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,61 +0,0 @@ | |||||||
| {{- if .Values.ingress.enabled -}} |  | ||||||
| {{- $fullName := include "occhart.fullname" . -}} |  | ||||||
| {{- $svcPort := .Values.service.port -}} |  | ||||||
| {{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} |  | ||||||
|   {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} |  | ||||||
|   {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} |  | ||||||
|   {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| {{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} |  | ||||||
| apiVersion: networking.k8s.io/v1 |  | ||||||
| {{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} |  | ||||||
| apiVersion: networking.k8s.io/v1beta1 |  | ||||||
| {{- else -}} |  | ||||||
| apiVersion: extensions/v1beta1 |  | ||||||
| {{- end }} |  | ||||||
| kind: Ingress |  | ||||||
| metadata: |  | ||||||
|   name: {{ $fullName }} |  | ||||||
|   labels: |  | ||||||
|     {{- include "occhart.labels" . | nindent 4 }} |  | ||||||
|   {{- with .Values.ingress.annotations }} |  | ||||||
|   annotations: |  | ||||||
|     {{- toYaml . | nindent 4 }} |  | ||||||
|   {{- end }} |  | ||||||
| spec: |  | ||||||
|   {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} |  | ||||||
|   ingressClassName: {{ .Values.ingress.className }} |  | ||||||
|   {{- end }} |  | ||||||
|   {{- if .Values.ingress.tls }} |  | ||||||
|   tls: |  | ||||||
|     {{- range .Values.ingress.tls }} |  | ||||||
|     - hosts: |  | ||||||
|         {{- range .hosts }} |  | ||||||
|         - {{ . | quote }} |  | ||||||
|         {{- end }} |  | ||||||
|       secretName: {{ .secretName }} |  | ||||||
|     {{- end }} |  | ||||||
|   {{- end }} |  | ||||||
|   rules: |  | ||||||
|     {{- range .Values.ingress.hosts }} |  | ||||||
|     - host: {{ .host | quote }} |  | ||||||
|       http: |  | ||||||
|         paths: |  | ||||||
|           {{- range .paths }} |  | ||||||
|           - path: {{ .path }} |  | ||||||
|             {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} |  | ||||||
|             pathType: {{ .pathType }} |  | ||||||
|             {{- end }} |  | ||||||
|             backend: |  | ||||||
|               {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} |  | ||||||
|               service: |  | ||||||
|                 name: {{ $fullName }} |  | ||||||
|                 port: |  | ||||||
|                   number: {{ $svcPort }} |  | ||||||
|               {{- else }} |  | ||||||
|               serviceName: {{ $fullName }} |  | ||||||
|               servicePort: {{ $svcPort }} |  | ||||||
|               {{- end }} |  | ||||||
|           {{- end }} |  | ||||||
|     {{- end }} |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,15 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: {{ include "occhart.fullname" . }} |  | ||||||
|   labels: |  | ||||||
|     {{- include "occhart.labels" . | nindent 4 }} |  | ||||||
| spec: |  | ||||||
|   type: {{ .Values.service.type }} |  | ||||||
|   ports: |  | ||||||
|     - port: {{ .Values.service.port }} |  | ||||||
|       targetPort: http |  | ||||||
|       protocol: TCP |  | ||||||
|       name: http |  | ||||||
|   selector: |  | ||||||
|     {{- include "occhart.selectorLabels" . | nindent 4 }} |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| {{- if .Values.serviceAccount.create -}} |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: ServiceAccount |  | ||||||
| metadata: |  | ||||||
|   name: {{ include "occhart.serviceAccountName" . }} |  | ||||||
|   labels: |  | ||||||
|     {{- include "occhart.labels" . | nindent 4 }} |  | ||||||
|   {{- with .Values.serviceAccount.annotations }} |  | ||||||
|   annotations: |  | ||||||
|     {{- toYaml . | nindent 4 }} |  | ||||||
|   {{- end }} |  | ||||||
| automountServiceAccountToken: {{ .Values.serviceAccount.automount }} |  | ||||||
| {{- end }} |  | ||||||
| @@ -1,15 +0,0 @@ | |||||||
| apiVersion: v1 |  | ||||||
| kind: Pod |  | ||||||
| metadata: |  | ||||||
|   name: "{{ include "occhart.fullname" . }}-test-connection" |  | ||||||
|   labels: |  | ||||||
|     {{- include "occhart.labels" . | nindent 4 }} |  | ||||||
|   annotations: |  | ||||||
|     "helm.sh/hook": test |  | ||||||
| spec: |  | ||||||
|   containers: |  | ||||||
|     - name: wget |  | ||||||
|       image: busybox |  | ||||||
|       command: ['wget'] |  | ||||||
|       args: ['{{ include "occhart.fullname" . }}:{{ .Values.service.port }}'] |  | ||||||
|   restartPolicy: Never |  | ||||||
| @@ -1,107 +0,0 @@ | |||||||
| # Default values for occhart. |  | ||||||
| # This is a YAML-formatted file. |  | ||||||
| # Declare variables to be passed into your templates. |  | ||||||
|  |  | ||||||
| replicaCount: 1 |  | ||||||
|  |  | ||||||
| image: |  | ||||||
|   repository: nginx |  | ||||||
|   pullPolicy: IfNotPresent |  | ||||||
|   # Overrides the image tag whose default is the chart appVersion. |  | ||||||
|   tag: "" |  | ||||||
|  |  | ||||||
| imagePullSecrets: [] |  | ||||||
| nameOverride: "" |  | ||||||
| fullnameOverride: "" |  | ||||||
|  |  | ||||||
| serviceAccount: |  | ||||||
|   # Specifies whether a service account should be created |  | ||||||
|   create: true |  | ||||||
|   # Automatically mount a ServiceAccount's API credentials? |  | ||||||
|   automount: true |  | ||||||
|   # Annotations to add to the service account |  | ||||||
|   annotations: {} |  | ||||||
|   # The name of the service account to use. |  | ||||||
|   # If not set and create is true, a name is generated using the fullname template |  | ||||||
|   name: "" |  | ||||||
|  |  | ||||||
| podAnnotations: {} |  | ||||||
| podLabels: {} |  | ||||||
|  |  | ||||||
| podSecurityContext: {} |  | ||||||
|   # fsGroup: 2000 |  | ||||||
|  |  | ||||||
| securityContext: {} |  | ||||||
|   # capabilities: |  | ||||||
|   #   drop: |  | ||||||
|   #   - ALL |  | ||||||
|   # readOnlyRootFilesystem: true |  | ||||||
|   # runAsNonRoot: true |  | ||||||
|   # runAsUser: 1000 |  | ||||||
|  |  | ||||||
| service: |  | ||||||
|   type: ClusterIP |  | ||||||
|   port: 80 |  | ||||||
|  |  | ||||||
| ingress: |  | ||||||
|   enabled: false |  | ||||||
|   className: "" |  | ||||||
|   annotations: {} |  | ||||||
|     # kubernetes.io/ingress.class: nginx |  | ||||||
|     # kubernetes.io/tls-acme: "true" |  | ||||||
|   hosts: |  | ||||||
|     - host: chart-example.local |  | ||||||
|       paths: |  | ||||||
|         - path: / |  | ||||||
|           pathType: ImplementationSpecific |  | ||||||
|   tls: [] |  | ||||||
|   #  - secretName: chart-example-tls |  | ||||||
|   #    hosts: |  | ||||||
|   #      - chart-example.local |  | ||||||
|  |  | ||||||
| resources: {} |  | ||||||
|   # We usually recommend not to specify default resources and to leave this as a conscious |  | ||||||
|   # choice for the user. This also increases chances charts run on environments with little |  | ||||||
|   # resources, such as Minikube. If you do want to specify resources, uncomment the following |  | ||||||
|   # lines, adjust them as necessary, and remove the curly braces after 'resources:'. |  | ||||||
|   # limits: |  | ||||||
|   #   cpu: 100m |  | ||||||
|   #   memory: 128Mi |  | ||||||
|   # requests: |  | ||||||
|   #   cpu: 100m |  | ||||||
|   #   memory: 128Mi |  | ||||||
|  |  | ||||||
| livenessProbe: |  | ||||||
|   httpGet: |  | ||||||
|     path: / |  | ||||||
|     port: http |  | ||||||
| readinessProbe: |  | ||||||
|   httpGet: |  | ||||||
|     path: / |  | ||||||
|     port: http |  | ||||||
|  |  | ||||||
| autoscaling: |  | ||||||
|   enabled: false |  | ||||||
|   minReplicas: 1 |  | ||||||
|   maxReplicas: 100 |  | ||||||
|   targetCPUUtilizationPercentage: 80 |  | ||||||
|   # targetMemoryUtilizationPercentage: 80 |  | ||||||
|  |  | ||||||
| # Additional volumes on the output Deployment definition. |  | ||||||
| volumes: [] |  | ||||||
| # - name: foo |  | ||||||
| #   secret: |  | ||||||
| #     secretName: mysecret |  | ||||||
| #     optional: false |  | ||||||
|  |  | ||||||
| # Additional volumeMounts on the output Deployment definition. |  | ||||||
| volumeMounts: [] |  | ||||||
| # - name: foo |  | ||||||
| #   mountPath: "/etc/foo" |  | ||||||
| #   readOnly: true |  | ||||||
|  |  | ||||||
| nodeSelector: {} |  | ||||||
|  |  | ||||||
| tolerations: [] |  | ||||||
|  |  | ||||||
| affinity: {} |  | ||||||
| @@ -1,29 +0,0 @@ | |||||||
| # oc-catalog-deployment.yml |  | ||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: oc-catalog |  | ||||||
|   labels: |  | ||||||
|     app: oc-catalog |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: oc-catalog |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: oc-catalog |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: oc-catalog |  | ||||||
|         image: registry.dev.svc.cluster.local:5000/oc-catalog:latest |  | ||||||
|         ports: |  | ||||||
|         - containerPort: 8080 |  | ||||||
|         env: |  | ||||||
|         - name: MONGO_DATABASE |  | ||||||
|           value: "DC_myDC" |  | ||||||
|         - name: MONGO_URI |  | ||||||
|           value: "mongodb://mongo:27017" |  | ||||||
|       imagePullSecrets: |  | ||||||
|       - name: regcred |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| # oc-catalog-service.yml |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: oc-catalog |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: oc-catalog |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: 8087 |  | ||||||
|       targetPort: 8080 |  | ||||||
|   type: NodePort  # Optional, useful for accessing via Minikube IP and NodePort |  | ||||||
| @@ -1,32 +0,0 @@ | |||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: mongo-express |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: mongo-express |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: mongo-express |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: mongo-express |  | ||||||
|         image: mongo-express:latest |  | ||||||
|         ports: |  | ||||||
|         - containerPort: 8081 |  | ||||||
|         env: |  | ||||||
|         - name: ME_CONFIG_BASICAUTH_USERNAME |  | ||||||
|           valueFrom: |  | ||||||
|             secretKeyRef: |  | ||||||
|               name: mongo-secret |  | ||||||
|               key: mongo-username |  | ||||||
|         - name: ME_CONFIG_BASICAUTH_PASSWORD |  | ||||||
|           valueFrom: |  | ||||||
|             secretKeyRef: |  | ||||||
|               name: mongo-secret |  | ||||||
|               key: mongo-password |  | ||||||
|       imagePullSecrets: |  | ||||||
|       - name: my-registry-key |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| # mongo-express-service.yml |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: mongo-express |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: mongo-express |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: 8081 |  | ||||||
|       targetPort: 8081 |  | ||||||
|   type: NodePort  # Optional, useful for accessing via Minikube IP and NodePort |  | ||||||
| @@ -1,42 +0,0 @@ | |||||||
| # mongo-deployment.yml |  | ||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: mongo |  | ||||||
|   labels: |  | ||||||
|     app: mongo |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app: mongo |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app: mongo |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|       - name: mongo |  | ||||||
|         image: mongo:latest |  | ||||||
|         ports: |  | ||||||
|         - containerPort: 27017 |  | ||||||
|         volumeMounts: |  | ||||||
|         - name: mongo-persistent-storage |  | ||||||
|           mountPath: /data/db |  | ||||||
|         - name: mongo-persistent-storage |  | ||||||
|           mountPath: /data/configdb |  | ||||||
|       volumes: |  | ||||||
|       - name: mongo-persistent-storage |  | ||||||
|         persistentVolumeClaim: |  | ||||||
|           claimName: mongo-pvc |  | ||||||
| --- |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: PersistentVolumeClaim |  | ||||||
| metadata: |  | ||||||
|   name: mongo-pvc |  | ||||||
| spec: |  | ||||||
|   accessModes: |  | ||||||
|     - ReadWriteOnce |  | ||||||
|   resources: |  | ||||||
|     requests: |  | ||||||
|       storage: 1Gi |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| # mongo-secret.yml |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: Secret |  | ||||||
| metadata: |  | ||||||
|   name: mongo-secret |  | ||||||
| type: Opaque |  | ||||||
| data: |  | ||||||
|   username: dGVzdA==  # base64 encoding of 'test' |  | ||||||
|   password: dGVzdA==  # base64 encoding of 'test' |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| # mongo-service.yml |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: mongo |  | ||||||
| spec: |  | ||||||
|   selector: |  | ||||||
|     app: mongo |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: 27017 |  | ||||||
|       targetPort: 27017 |  | ||||||
							
								
								
									
										3
									
								
								offline/latest.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								offline/latest.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | --- | ||||||
|  |  | ||||||
|  | version: 0.1.0 | ||||||
							
								
								
									
										41
									
								
								offline/oc_1.0.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								offline/oc_1.0.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | --- | ||||||
|  | # Définition d'une version | ||||||
|  |  | ||||||
|  | version: 1.0 | ||||||
|  |  | ||||||
|  | tools: | ||||||
|  |   - name: kubectl | ||||||
|  |     url: https://dl.k8s.io/release/%s/bin/linux/amd64/kubectl | ||||||
|  |     version: v1.31.0 | ||||||
|  |   - name: helm | ||||||
|  |     url: https://get.helm.sh/helm-%s-linux-amd64.tar.gz | ||||||
|  |     version: v3.16.0 | ||||||
|  |  | ||||||
|  | # helm install my-release <repo>/<chart> | ||||||
|  | opencloud: | ||||||
|  |   - repository: | ||||||
|  |       name: bitnami | ||||||
|  |       url: https://charts.bitnami.com/bitnami      # Repository des Charts | ||||||
|  |     charts: | ||||||
|  |       - name: wordpress | ||||||
|  |         chart: bitnami/wordpress | ||||||
|  |         version: 23.1.0 | ||||||
|  |         values: {} | ||||||
|  |         helm_opts: --wait-for-jobs | ||||||
|  |         helm_filevalues: values-init.yml | ||||||
|  |  | ||||||
|  |       - name: phpmyadmin | ||||||
|  |         chart: bitnami/phpmyadmin | ||||||
|  |         version: 17.0.4 | ||||||
|  |         values: {} | ||||||
|  |  | ||||||
|  |   - charts: | ||||||
|  |      - name: mongo | ||||||
|  |        chart:  ../oc-mongo/mongo | ||||||
|  |   | ||||||
|  |   - charts: | ||||||
|  |       - name: myfirstrelease | ||||||
|  |         chart: myfirstchart-0.1.0.tgz | ||||||
|  |         url: https://zzzz/myfirstchart-0.1.0.tgz | ||||||
|  |  | ||||||
|  | # helm install myfirstrelease myfirstchart-0.1.0.tgz | ||||||
							
								
								
									
										3
									
								
								publish/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								publish/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | go.sum | ||||||
|  | *_ | ||||||
|  | .coverage.* | ||||||
							
								
								
									
										3
									
								
								publish/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								publish/go.mod
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | module oc-publish | ||||||
|  |  | ||||||
|  | go 1.22.2 | ||||||
							
								
								
									
										83
									
								
								publish/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								publish/main.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | |||||||
|  | package main | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "fmt" | ||||||
|  |     "os" | ||||||
|  |     "io/ioutil" | ||||||
|  |     "encoding/base64" | ||||||
|  |     "oc-publish/releases" | ||||||
|  |     "oc-publish/occonst" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func main() { | ||||||
|  |  | ||||||
|  |     version := os.Args[1] | ||||||
|  |  | ||||||
|  |     fmt.Printf(" >> oc-publish :\n") | ||||||
|  |  | ||||||
|  |     fmt.Printf(" <<   Url : %s/%s\n", occonst.PUBLISH_URL, occonst.PUBLISH_REPO) | ||||||
|  |  | ||||||
|  |     fmt.Printf(" <<   version : %s %s\n", version, occonst.PUBLISH_BRANCH) | ||||||
|  |  | ||||||
|  |     vversion := fmt.Sprintf("v%s", version) | ||||||
|  |     existe, _ := releases.CheckRelease(vversion) | ||||||
|  |  | ||||||
|  |     if existe == false { | ||||||
|  |         err := releases.CreateRelease(vversion, occonst.PUBLISH_BRANCH) | ||||||
|  |         if err != nil { | ||||||
|  |             fmt.Println(err) | ||||||
|  |             os.Exit(1) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     idRelease, _ := releases.GetReleaseId(vversion) | ||||||
|  |     if  existe == true { | ||||||
|  |         fmt.Println(fmt.Sprintf(" <<   Release existante : %d ", idRelease)) | ||||||
|  |     } else { | ||||||
|  |         fmt.Println(fmt.Sprintf(" <<   Release crée : %d ", idRelease)) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     assetname := "oc-deploy.base64" | ||||||
|  |     binary := fmt.Sprintf("../bin/oc-deploy") | ||||||
|  |     binary64 := fmt.Sprintf("../%s", assetname) | ||||||
|  |     err := createBinaryFile(binary, binary64) | ||||||
|  |     if err != nil { | ||||||
|  |         fmt.Println(err) | ||||||
|  |         os.Exit(1) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     idAsset, _ := releases.GetAssetId(idRelease, assetname) | ||||||
|  |     if idAsset == 0 { | ||||||
|  |         fmt.Println(fmt.Sprintf(" <<   Ajout Asset : %s", assetname)) | ||||||
|  |         err := releases.CreateAsset(idRelease, binary64, assetname) | ||||||
|  |         if err != nil { | ||||||
|  |             fmt.Println(err) | ||||||
|  |             os.Exit(1) | ||||||
|  |         }     | ||||||
|  |     } else { | ||||||
|  |         fmt.Println(fmt.Sprintf(" <<   Mise à jour : %s (idAsset=%d) ", assetname, idAsset)) | ||||||
|  |         err := releases.UpdateAsset(idRelease, idAsset, binary64, assetname) | ||||||
|  |         if err != nil { | ||||||
|  |             fmt.Println(err) | ||||||
|  |             os.Exit(1) | ||||||
|  |         }     | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | func createBinaryFile(source string, dest string) error { | ||||||
|  |     fout, _ := os.Create(dest) | ||||||
|  |     defer fout.Close() | ||||||
|  |  | ||||||
|  |     byteValue, err := ioutil.ReadFile(source) | ||||||
|  |     if err != nil { | ||||||
|  |         fmt.Println("64e", err) | ||||||
|  |  | ||||||
|  |         return err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     data64 := base64.StdEncoding.EncodeToString(byteValue) | ||||||
|  |     fout.Write([]byte(data64)) | ||||||
|  |     return nil | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								publish/occonst/variables.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								publish/occonst/variables.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | package occonst | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"os" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var PUBLISH_URL = getenv("PUBLISH_URL", "https://cloud.o-forge.io") | ||||||
|  | var PUBLISH_REPO = getenv("PUBLISH_REPO", "core/oc-deploy") | ||||||
|  | var PUBLISH_TOKEN = getenv("PUBLISH_TOKEN", "") | ||||||
|  | var PUBLISH_BRANCH = getenv("PUBLISH_BRANCH", "main") | ||||||
|  |  | ||||||
|  | func getenv(key string, defaut string) string { | ||||||
|  | 	value := os.Getenv(key) | ||||||
|  | 	if len(value) == 0 { | ||||||
|  | 		return defaut | ||||||
|  | 	} | ||||||
|  | 	return value | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								publish/release.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								publish/release.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | Version %s d'OpenCloud | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | wget %s/%s/releases/download/%s/oc-deploy.base64 -O - | base64 -d > oc-deploy | ||||||
|  | chmod u+x ./oc-deploy | ||||||
|  | ``` | ||||||
							
								
								
									
										145
									
								
								publish/releases/assets.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								publish/releases/assets.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | |||||||
|  | package releases | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "fmt" | ||||||
|  |     "os" | ||||||
|  |     "path/filepath" | ||||||
|  |     "mime/multipart" | ||||||
|  |     "io" | ||||||
|  |     "io/ioutil" | ||||||
|  |     "encoding/json" | ||||||
|  |     "net/http" | ||||||
|  |     "bytes" | ||||||
|  |  | ||||||
|  |     "oc-publish/occonst" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type assetStruct struct { | ||||||
|  |     Name string `json:"name"` | ||||||
|  |     Id int `json:"id"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetAssetId(idRelease int, name string) (int, error) { | ||||||
|  |     url := fmt.Sprintf("%s/api/v1/repos/%s/releases/%d/assets", | ||||||
|  |                         occonst.PUBLISH_URL, | ||||||
|  |                         occonst.PUBLISH_REPO, | ||||||
|  |                         idRelease) | ||||||
|  |  | ||||||
|  |     res, err := http.Get(url) | ||||||
|  |     if err != nil { | ||||||
|  |         return -1, err | ||||||
|  |     } | ||||||
|  |     body, err := io.ReadAll(res.Body) | ||||||
|  |     if err != nil { | ||||||
|  |         return -2, err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     var data []assetStruct | ||||||
|  |  | ||||||
|  |     err = json.Unmarshal(body, &data) | ||||||
|  |     if err != nil { | ||||||
|  |         return -3, err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for _, ele := range data { | ||||||
|  |         if ele.Name == name { | ||||||
|  |             return ele.Id, nil | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return 0, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // curl -X 'POST' \ | ||||||
|  | //   'https://cloud.o-forge.io/api/v1/repos/core/oc-deploy/releases/2/assets?name=zzzz' \ | ||||||
|  | //   -H 'accept: application/json' \ | ||||||
|  | //   -H 'Content-Type: multipart/form-data' \ | ||||||
|  | //   -F 'attachment=oc-deploy' | ||||||
|  | func CreateAsset(idRelease int, filename string, name string) (error) { | ||||||
|  |     url := fmt.Sprintf("%s/api/v1/repos/%s/releases/%d/assets?name=%s&token=%s", | ||||||
|  |                         occonst.PUBLISH_URL, | ||||||
|  |                         occonst.PUBLISH_REPO, | ||||||
|  |                         idRelease, | ||||||
|  |                         name, | ||||||
|  |                         occonst.PUBLISH_TOKEN) | ||||||
|  |  | ||||||
|  |     err := uploadFile(url, "attachment", filename) | ||||||
|  |  | ||||||
|  |     return err  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func UpdateAsset(idRelease int, idAsset int, filename string, name string) (error) { | ||||||
|  |  | ||||||
|  |   url := fmt.Sprintf("%s/api/v1/repos/%s/releases/%d/assets/%d?token=%s", | ||||||
|  |             occonst.PUBLISH_URL, | ||||||
|  |             occonst.PUBLISH_REPO, | ||||||
|  |             idRelease, | ||||||
|  |             idAsset, | ||||||
|  |             occonst.PUBLISH_TOKEN) | ||||||
|  |  | ||||||
|  |     // Create client | ||||||
|  |     client := &http.Client{} | ||||||
|  |  | ||||||
|  |     // Create request | ||||||
|  |     req, err := http.NewRequest("DELETE", url, nil) | ||||||
|  |     if err != nil { | ||||||
|  |         return err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Fetch Request | ||||||
|  |     resp, err := client.Do(req) | ||||||
|  |     if err != nil { | ||||||
|  |         return err | ||||||
|  |     } | ||||||
|  |     defer resp.Body.Close() | ||||||
|  |  | ||||||
|  |     // Read Response Body | ||||||
|  |     respBody, err := ioutil.ReadAll(resp.Body) | ||||||
|  |     if err != nil { | ||||||
|  |         return err | ||||||
|  |     } | ||||||
|  |     fmt.Println(string(respBody)) | ||||||
|  |  | ||||||
|  |   return CreateAsset(idRelease, filename, name) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func uploadFile(url string, paramName string, filePath string) error { | ||||||
|  |     file, err := os.Open(filePath) | ||||||
|  |     if err != nil { | ||||||
|  |       return err | ||||||
|  |     } | ||||||
|  |     defer file.Close() | ||||||
|  |  | ||||||
|  |     body := &bytes.Buffer{} | ||||||
|  |     writer := multipart.NewWriter(body) | ||||||
|  |     part, err := writer.CreateFormFile(paramName, filepath.Base(filePath)) | ||||||
|  |     if err != nil { | ||||||
|  |       return err | ||||||
|  |     } | ||||||
|  |     _, err = io.Copy(part, file) | ||||||
|  |    | ||||||
|  |     err = writer.Close() | ||||||
|  |     if err != nil { | ||||||
|  |       return err | ||||||
|  |     } | ||||||
|  |    | ||||||
|  |     request, err := http.NewRequest("POST", url, body) | ||||||
|  |     request.Header.Add("Content-Type", writer.FormDataContentType()) | ||||||
|  |     request.Header.Add("accept", "application/json") | ||||||
|  |     client := &http.Client{} | ||||||
|  |     response, err := client.Do(request) | ||||||
|  |  | ||||||
|  |     if err != nil { | ||||||
|  |       fmt.Println(109, err) | ||||||
|  |       return err | ||||||
|  |     } | ||||||
|  |     defer response.Body.Close() | ||||||
|  |    | ||||||
|  |     if response.StatusCode > 400 { | ||||||
|  |         return fmt.Errorf(response.Status) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |     _, err1 := io.ReadAll(response.Body) | ||||||
|  |  | ||||||
|  |     // Handle the server response... | ||||||
|  |     return err1 | ||||||
|  |   } | ||||||
							
								
								
									
										126
									
								
								publish/releases/release.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								publish/releases/release.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,126 @@ | |||||||
|  | package releases | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"io" | ||||||
|  | 	"io/ioutil" | ||||||
|  |     "strings" | ||||||
|  |     "encoding/json" | ||||||
|  |     "net/http" | ||||||
|  |  | ||||||
|  | 	"oc-publish/occonst" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type checkStruct struct { | ||||||
|  |     Name string `json:"name"` | ||||||
|  |     Id int `json:"id"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func CheckRelease(version string) (bool, error) { | ||||||
|  | 	url := fmt.Sprintf("%s/api/v1/repos/%s/releases", | ||||||
|  | 						occonst.PUBLISH_URL, | ||||||
|  | 						occonst.PUBLISH_REPO) | ||||||
|  |  | ||||||
|  |     res, err := http.Get(url) | ||||||
|  |     if err != nil { | ||||||
|  |         return false, err | ||||||
|  |     } | ||||||
|  |     body, err := io.ReadAll(res.Body) | ||||||
|  |     if err != nil { | ||||||
|  |         return false, err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | 	var data []checkStruct | ||||||
|  |     err = json.Unmarshal(body, &data) | ||||||
|  |     if err != nil { | ||||||
|  |         return false, err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for _, ele := range data { | ||||||
|  |         if ele.Name == version { | ||||||
|  |             return true, nil | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 	// return data.Name != "", nil | ||||||
|  |     return false, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func GetReleaseId(version string) (int, error) { | ||||||
|  | 	url := fmt.Sprintf("%s/api/v1/repos/%s/releases/tags/%s", | ||||||
|  | 						occonst.PUBLISH_URL, | ||||||
|  | 						occonst.PUBLISH_REPO, | ||||||
|  | 						version) | ||||||
|  |  | ||||||
|  |     res, err := http.Get(url) | ||||||
|  |     if err != nil { | ||||||
|  |         return 0, err | ||||||
|  |     } | ||||||
|  |     body, err := io.ReadAll(res.Body) | ||||||
|  |     if err != nil { | ||||||
|  |         return 0, err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | 	var data checkStruct | ||||||
|  |     err = json.Unmarshal(body, &data) | ||||||
|  |     if err != nil { | ||||||
|  |         return 0, err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | 	return data.Id, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // curl -X 'POST' \ | ||||||
|  | //   'https://cloud.o-forge.io/api/v1/repos/na/oc-version/releases?token=sss' \ | ||||||
|  | //   -H 'accept: application/json' \ | ||||||
|  | //   -H 'Content-Type: application/json' \ | ||||||
|  | //   -d '{ | ||||||
|  | //   "body": "string", | ||||||
|  | //   "draft": true, | ||||||
|  | //   "name": "string", | ||||||
|  | //   "prerelease": true, | ||||||
|  | //   "tag_name": "string", | ||||||
|  | //   "target_commitish": "string" | ||||||
|  | // }' | ||||||
|  | func CreateRelease(version string, branch string) (error) { | ||||||
|  | 	url := fmt.Sprintf("%s/api/v1/repos/%s/releases?token=%s", | ||||||
|  | 						occonst.PUBLISH_URL, | ||||||
|  | 						occonst.PUBLISH_REPO, | ||||||
|  | 						occonst.PUBLISH_TOKEN) | ||||||
|  |  | ||||||
|  |     releasebytes, err := ioutil.ReadFile("release.txt") | ||||||
|  |     releasetxt := string(releasebytes) | ||||||
|  |     releasetxt = strings.Replace(releasetxt, "\n", "\\n", -1) | ||||||
|  |     releasetxt = fmt.Sprintf(releasetxt, version, occonst.PUBLISH_URL, occonst.PUBLISH_REPO, version) | ||||||
|  |  | ||||||
|  |     body := fmt.Sprintf(`{ | ||||||
|  |     "body": "%s", | ||||||
|  |     "draft": false, | ||||||
|  |     "name": "%s", | ||||||
|  |     "prerelease": false, | ||||||
|  |     "tag_name": "%s", | ||||||
|  |     "target_commitish": "%s" | ||||||
|  | }`, releasetxt, version, version, branch) | ||||||
|  |  | ||||||
|  |     request, err := http.NewRequest("POST", url, strings.NewReader(body)) | ||||||
|  |     if err != nil { | ||||||
|  |         return err | ||||||
|  |     } | ||||||
|  |     request.Header.Add("accept", "application/json") | ||||||
|  |     request.Header.Add("Content-Type", "application/json") | ||||||
|  |  | ||||||
|  |     client := &http.Client{} | ||||||
|  |     response, err := client.Do(request) | ||||||
|  |     if err != nil { | ||||||
|  |         return err | ||||||
|  |     } | ||||||
|  |     defer response.Body.Close() | ||||||
|  |  | ||||||
|  |     _, err1 := io.ReadAll(response.Body) | ||||||
|  |     // cnt, err1 := io.ReadAll(response.Body) | ||||||
|  |     // fmt.Println(string(cnt)) | ||||||
|  |  | ||||||
|  |     if err1 != nil { | ||||||
|  |         return err1 | ||||||
|  |     } | ||||||
|  |     return nil | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								src/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | go.sum | ||||||
|  | *_ | ||||||
|  | .coverage.* | ||||||
|  | .*.log | ||||||
|  | workspace_* | ||||||
							
								
								
									
										101
									
								
								src/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								src/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | |||||||
|  |  | ||||||
|  | BIN_NAME := oc-deploy | ||||||
|  |  | ||||||
|  | BIN_OPTS :=  | ||||||
|  |  | ||||||
|  | ################## | ||||||
|  |  | ||||||
|  | SOURCES := $(wildcard *.go) $(wildcard */*.go) | ||||||
|  | BIN_DIR = ../bin/ | ||||||
|  |  | ||||||
|  | PLUGINS := $(wildcard ../plugins/*/*.go) | ||||||
|  | OBJS    := ${PLUGINS:.go=.so} | ||||||
|  |  | ||||||
|  | ################## | ||||||
|  | DATE := $(shell date) | ||||||
|  | GOVERSION := $(shell go version) | ||||||
|  | VERSION := $(shell git describe --tags --abbrev=8 --dirty --always --long) | ||||||
|  | PREFIX := "oc-deploy/version" | ||||||
|  |  | ||||||
|  | LDFLAGS := -X '${PREFIX}.Version=${VERSION}' | ||||||
|  |  | ||||||
|  | ################## | ||||||
|  |  | ||||||
|  | %.so: %.go | ||||||
|  | 	go build -buildmode=plugin -o $@ $< | ||||||
|  |  | ||||||
|  | help: | ||||||
|  | 		@echo | ||||||
|  | 		@echo 'Usage:' | ||||||
|  | 		@echo '    make build                Génère les exécutables.' | ||||||
|  | 		@echo '    make get-deps             Dependency download' | ||||||
|  |  | ||||||
|  | 		@echo '    make run BIN_OPTS=...     Go run' | ||||||
|  | 		@echo '    make run_install BIN_OPTS=...     Go run' | ||||||
|  | 		@echo '    make run_uninstall BIN_OPTS=...     Go run' | ||||||
|  | 		@echo '    make run_version          Go run' | ||||||
|  | 		@echo '    make exec BIN_OPTS=...    exécutable' | ||||||
|  | 		@echo '    make exec_install BIN_OPTS=...    exécutable' | ||||||
|  | 		@echo '    make exec_uninstall BIN_OPTS=...    exécutable' | ||||||
|  | 		@echo '    make exec_version         exécutable' | ||||||
|  | 		 | ||||||
|  | 		@echo '    make test                 Test' | ||||||
|  | 		@echo '    make clean                Clean the directory tree.' | ||||||
|  | 		@echo | ||||||
|  |  | ||||||
|  | 		@echo '    DATE                      ${DATE}' | ||||||
|  | 		@echo '    GOVERSION                 ${GOVERSION}' | ||||||
|  | 		@echo '    VERSION                   ${VERSION}' | ||||||
|  | 		@echo | ||||||
|  |  | ||||||
|  | ${BIN_DIR}/${BIN_NAME}: ${SOURCES} $(OBJS) | ||||||
|  | 	go build -o ${BIN_DIR}/${BIN_NAME} -ldflags "${LDFLAGS}" | ||||||
|  |  | ||||||
|  | get-deps: | ||||||
|  | 	@go mod tidy | ||||||
|  |  | ||||||
|  | build: ${BIN_DIR}/${BIN_NAME} | ||||||
|  |  | ||||||
|  | run: | ||||||
|  | 	@go run main.go ${BIN_OPTS} | ||||||
|  |  | ||||||
|  | run_generate: | ||||||
|  | 	@go run main.go generate ${BIN_OPTS} | ||||||
|  |  | ||||||
|  | run_install: | ||||||
|  | 	@go run main.go install ${BIN_OPTS} | ||||||
|  |  | ||||||
|  | run_uninstall: | ||||||
|  | 	@go run main.go uninstall ${BIN_OPTS} | ||||||
|  |  | ||||||
|  | run_version: | ||||||
|  | 	@go run main.go version | ||||||
|  |  | ||||||
|  | exec: ${BIN_DIR}/${BIN_NAME} $(OBJS) | ||||||
|  | 	@${BIN_DIR}/${BIN_NAME} ${BIN_OPTS} | ||||||
|  |  | ||||||
|  | exec_install: ${BIN_DIR}/${BIN_NAME} $(OBJS) | ||||||
|  | 	@${BIN_DIR}/${BIN_NAME} install ${BIN_OPTS} | ||||||
|  |  | ||||||
|  | exec_uninstall: ${BIN_DIR}/${BIN_NAME} $(OBJS) | ||||||
|  | 	@${BIN_DIR}/${BIN_NAME} uninstall ${BIN_OPTS} | ||||||
|  |  | ||||||
|  | exec_version: ${BIN_DIR}/${BIN_NAME} $(OBJS) | ||||||
|  | 	@${BIN_DIR}/${BIN_NAME} version | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	@test ! -e ${BIN_DIR}/${BIN_NAME} || rm ${BIN_DIR}/${BIN_NAME} | ||||||
|  | 	@test ! -e .coverage.out || rm .coverage.out | ||||||
|  | 	@test ! -e .coverage.html || rm .coverage.html | ||||||
|  | 	@test ! -e go.sum || rm go.sum | ||||||
|  | 	@test ! -e .oc-deploy.log || rm .oc-deploy.log | ||||||
|  | 	@rm -rf workspace_* | ||||||
|  |  | ||||||
|  | .PHONY: test | ||||||
|  | test_%: | ||||||
|  | 	go test oc-deploy/$(subst test_,,$@) -coverprofile=.coverage.out -v | ||||||
|  | 	@go tool cover -html=.coverage.out -o .coverage.html | ||||||
|  |  | ||||||
|  | test: | ||||||
|  | 	@go test ./... -coverprofile=.coverage.out -v | ||||||
|  | 	go tool cover -html=.coverage.out -o .coverage.html | ||||||
							
								
								
									
										58
									
								
								src/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | |||||||
|  | # Purpose | ||||||
|  |  | ||||||
|  | **oc-deploy** is a tool to deploy (with **helm**) all component of **OpenCloud**. | ||||||
|  |  | ||||||
|  | # Development | ||||||
|  |  | ||||||
|  | To init:  | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |   make get-deps | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## To build | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |   make build | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## To run | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |   make run_install [BIN_OPTS="<args>"] | ||||||
|  |   make run_uninstall [BIN_OPTS="<args>"] | ||||||
|  |   make run_generate [BIN_OPTS="<args>"] | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | or | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |   make exec_install [BIN_OPTS="<args>"] | ||||||
|  |   make exec_uninstall [BIN_OPTS="<args>"] | ||||||
|  |   make exec_generate [BIN_OPTS="<args>"] | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | # To Test | ||||||
|  |  | ||||||
|  | All packages: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |   make test | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | or to test an specific package: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |   make test_<package> | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Test generate _.coverage.html_ file to view the coverage of test. | ||||||
|  |  | ||||||
|  | ## To Publish | ||||||
|  |  | ||||||
|  | Cf : ../publish | ||||||
|  |  | ||||||
|  | ## Divers | ||||||
|  |  | ||||||
|  | * Latest version for _kubectl_: https://dl.k8s.io/release/stable.txt | ||||||
|  | * Release for _helm_: https://github.com/helm/helm/releases | ||||||
							
								
								
									
										46
									
								
								src/chart/conf.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/chart/conf.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | package chart | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "os" | ||||||
|  |     "gopkg.in/yaml.v2" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type ChartData struct { | ||||||
|  |     Name string `yaml:"name"` | ||||||
|  |     Chart string `yaml:"chart"` | ||||||
|  |     Url string `yaml:"url"` | ||||||
|  |     Version string `yaml:"version"` | ||||||
|  |  | ||||||
|  |     Opts string `yaml:"helm_opts"` | ||||||
|  |     Values map[string]string `yaml:"helm_values"` | ||||||
|  |     FileValues []string `yaml:"helm_filevalues"` | ||||||
|  |  | ||||||
|  |     Overwrite string `yaml:"helm_overwrite"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type repoData struct { | ||||||
|  |     Name string `yaml:"name"` | ||||||
|  |     Url string `yaml:"url"` | ||||||
|  |     ForceUpdate bool `yaml:"forceupdate"` | ||||||
|  |     Opts string `yaml:"opts"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ChartRepoData struct { | ||||||
|  |     Repository repoData `yaml:"repository"` | ||||||
|  |     Charts []ChartData `yaml:"charts"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type chartsRepoParse struct { | ||||||
|  |     Charts []ChartRepoData `yaml:"opencloud"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func FromConfigFile(filename string) ([]ChartRepoData, error) { | ||||||
|  |     yamlFile, _ := os.ReadFile(filename) | ||||||
|  |  | ||||||
|  |     var data chartsRepoParse | ||||||
|  |     err := yaml.Unmarshal(yamlFile, &data) | ||||||
|  |     if err != nil { | ||||||
|  |         return data.Charts, err | ||||||
|  |     } | ||||||
|  |     return data.Charts, nil | ||||||
|  | } | ||||||
							
								
								
									
										50
									
								
								src/chart/conf_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/chart/conf_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | |||||||
|  | package chart | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "testing" | ||||||
|  |     "path/filepath" | ||||||
|  |     "github.com/stretchr/testify/assert" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | func _TestReadConfChart(t *testing.T) { | ||||||
|  |     src := filepath.Join(TEST_SRC_DIR, "oc.yml") | ||||||
|  |  | ||||||
|  |     assert.FileExists(t, src, "FromConfigFile error") | ||||||
|  |  | ||||||
|  |     data, _ := FromConfigFile(src) | ||||||
|  |     assert.Equal(t, "bitnami", data[0].Repository.Name, "FromConfigFile error") | ||||||
|  |     assert.Equal(t, "https://charts.bitnami.com/bitnami", data[0].Repository.Url, "FromConfigFile error") | ||||||
|  |  | ||||||
|  |     wordpress := data[0].Charts[0] | ||||||
|  |     assert.Equal(t, "wordpress", wordpress.Name, "FromConfigFile error") | ||||||
|  |     assert.Equal(t, "bitnami/wordpress", wordpress.Chart, "FromConfigFile error") | ||||||
|  |     assert.Equal(t, "23.1.0", wordpress.Version, "FromConfigFile error") | ||||||
|  |     assert.Equal(t, 0, len(wordpress.FileValues), "FromConfigFile error") | ||||||
|  |     assert.Equal(t, 0, len(wordpress.Values), "FromConfigFile error") | ||||||
|  |  | ||||||
|  |     phpmyadmin := data[0].Charts[1] | ||||||
|  |     assert.Equal(t, "phpmyadmin", phpmyadmin.Name, "FromConfigFile error") | ||||||
|  |     assert.Equal(t, "bitnami/phpmyadmin", phpmyadmin.Chart,"FromConfigFile error") | ||||||
|  |     assert.Equal(t, "17.0.4", phpmyadmin.Version, "FromConfigFile error") | ||||||
|  |     assert.Equal(t, 2, len(phpmyadmin.FileValues), "FromConfigFile error") | ||||||
|  |     assert.Equal(t, 1, len(phpmyadmin.Values), "FromConfigFile error") | ||||||
|  |  | ||||||
|  |     data1 := data[1] | ||||||
|  |     assert.Equal(t, "", data1.Repository.Name, "FromConfigFile error") | ||||||
|  |     assert.Equal(t, "", data1.Repository.Url, "FromConfigFile error") | ||||||
|  |  | ||||||
|  |     myfirstrelease := data1.Charts[0] | ||||||
|  |     assert.Equal(t, "myfirstrelease", myfirstrelease.Name, "FromConfigFile error") | ||||||
|  |     assert.Equal(t, "https://zzzz/myfirstchart-0.1.0.tgz", myfirstrelease.Url, "FromConfigFile error") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestReadConfChartOverwrite(t *testing.T){ | ||||||
|  |     src := filepath.Join(TEST_SRC_DIR, "oc_overwrite.yml") | ||||||
|  |  | ||||||
|  |     assert.FileExists(t, src, "FromConfigFile error") | ||||||
|  |  | ||||||
|  |     data, _ := FromConfigFile(src) | ||||||
|  |     // Nombre de lettres | ||||||
|  |     assert.Equal(t, 70, len(data[0].Charts[0].Overwrite), "TestReadConfChartOverwrite error") | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								src/chart/main_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/chart/main_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | package chart | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "os" | ||||||
|  |     "testing" | ||||||
|  |     "path/filepath" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var TEST_DEST_DIR = "../wrk_chart" | ||||||
|  | var TEST_SRC_DIR = filepath.Join("../../test", "chart") | ||||||
|  |  | ||||||
|  | func TestMain(m *testing.M) { | ||||||
|  |     folderPath := TEST_DEST_DIR | ||||||
|  |  | ||||||
|  |     os.RemoveAll(folderPath) | ||||||
|  |     os.MkdirAll(folderPath, os.ModePerm) | ||||||
|  |  | ||||||
|  |     // call flag.Parse() here if TestMain uses flags | ||||||
|  |     exitCode := m.Run() | ||||||
|  |  | ||||||
|  |     os.RemoveAll(folderPath) | ||||||
|  |     os.Exit(exitCode) | ||||||
|  | } | ||||||
							
								
								
									
										103
									
								
								src/cmd/args.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								src/cmd/args.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | |||||||
|  | // Package cmd : Parse les arguments | ||||||
|  |  | ||||||
|  | // Arguments : version ==> version d'OpenCloud | ||||||
|  | // Argument : projet ==> nom du projet | ||||||
|  | package cmd | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "github.com/spf13/cobra" | ||||||
|  |  | ||||||
|  |     log "oc-deploy/log_wrapper" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  |     context string | ||||||
|  |     version string | ||||||
|  |     modules []string | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | func cobraInstallCmd() *cobra.Command { | ||||||
|  |   return &cobra.Command{ | ||||||
|  |     Use:   "install", | ||||||
|  |     Short: "install", | ||||||
|  |     Long: `deploy Charts`, | ||||||
|  |     Args: cobra.MaximumNArgs(0), | ||||||
|  |     RunE: func(cmd *cobra.Command, args []string) error { | ||||||
|  |       log.Log().Info().Msg("oc-deploy :") | ||||||
|  |       return InstallCmd(context, version, modules) | ||||||
|  |     }, | ||||||
|  |     Example: "oc-deploy install --version 0.1.0 --context ex1", | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func cobraUninstallCmd() *cobra.Command{ | ||||||
|  |   return &cobra.Command{ | ||||||
|  |     Use:   "uninstall", | ||||||
|  |     Short: "undeploy", | ||||||
|  |     Long: `Undeploy`, | ||||||
|  |     Args: cobra.MaximumNArgs(0), | ||||||
|  |     RunE: func(cmd *cobra.Command, args []string) error { | ||||||
|  |       log.Log().Info().Msg("oc-deploy :") | ||||||
|  |       return UninstallCmd(context) | ||||||
|  |     }, | ||||||
|  |     Example: "oc-deploy uninstall --context ex1", | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | func cobraGenerateCmd() *cobra.Command{ | ||||||
|  |   return &cobra.Command{ | ||||||
|  |     Use:   "generate", | ||||||
|  |     Short: "generate", | ||||||
|  |     Long: "generate", | ||||||
|  |     Args: cobra.MaximumNArgs(0), | ||||||
|  |     RunE: func(cmd *cobra.Command, args []string) error { | ||||||
|  |         log.Log().Info().Msg("oc-deploy :") | ||||||
|  |         return GenerateCmd(context, version) | ||||||
|  |     }, | ||||||
|  |     Example: "oc-deploy generate --version 0.1.0 --context ex1", | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func cobraVersionCmd() *cobra.Command{ | ||||||
|  |   return &cobra.Command{ | ||||||
|  |     Use:   "version", | ||||||
|  |     Short: "version", | ||||||
|  |     Long: "Get Version", | ||||||
|  |     Args: cobra.MaximumNArgs(0), | ||||||
|  |     RunE: func(cmd *cobra.Command, args []string) error { | ||||||
|  |         return VersionCmd() | ||||||
|  |     }, | ||||||
|  |     Example: "oc-deploy version", | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Execute() { | ||||||
|  |  | ||||||
|  |     log.Log().Debug().Msg("Execute") | ||||||
|  |  | ||||||
|  |     var rootCmd = &cobra.Command{Use: "oc-deploy"} | ||||||
|  |  | ||||||
|  |     var cmdInstall = cobraInstallCmd() | ||||||
|  |     var cmdUninstall = cobraUninstallCmd() | ||||||
|  |     var cmdGenerate = cobraGenerateCmd() | ||||||
|  |     var cmdVersion = cobraVersionCmd() | ||||||
|  |  | ||||||
|  |     cmdInstall.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context") | ||||||
|  |     cmdInstall.Flags().StringVarP(&version, "version", "v", "latest", "Version") | ||||||
|  |     cmdInstall.Flags().StringArrayVarP(&modules, "modules", "m", []string{}, "modules, ...") | ||||||
|  |  | ||||||
|  |     cmdUninstall.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context") | ||||||
|  |  | ||||||
|  |     cmdGenerate.Flags().StringVarP(&context, "context", "c", "opencloud", "Nom du context") | ||||||
|  |     cmdGenerate.Flags().StringVarP(&version, "version", "v", "latest", "Version") | ||||||
|  |  | ||||||
|  |     rootCmd.AddCommand(cmdInstall) | ||||||
|  |     rootCmd.AddCommand(cmdUninstall) | ||||||
|  |     rootCmd.AddCommand(cmdGenerate) | ||||||
|  |     rootCmd.AddCommand(cmdVersion) | ||||||
|  |  | ||||||
|  |     cobra.CheckErr(rootCmd.Execute()) | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								src/cmd/args_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/cmd/args_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | package cmd | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestExecute(t *testing.T) { | ||||||
|  |     Execute() | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								src/cmd/generateCmd.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/cmd/generateCmd.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | package cmd | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "fmt" | ||||||
|  |     log "oc-deploy/log_wrapper" | ||||||
|  |  | ||||||
|  |     // "oc-deploy/versionOc" | ||||||
|  |     "oc-deploy/install" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func GenerateCmd(prcontextoject string, version string) error { | ||||||
|  |     log.Log().Info().Msg("Generate >> ") | ||||||
|  |  | ||||||
|  |     workspace := fmt.Sprintf("workspace_%s", context) | ||||||
|  |  | ||||||
|  |     obj := install.InstallClass{Workspace: workspace, Version: version} | ||||||
|  |     _, err := obj.NewGenerate() | ||||||
|  |     if err != nil { | ||||||
|  |       log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return err | ||||||
|  | } | ||||||
							
								
								
									
										51
									
								
								src/cmd/installCmd.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								src/cmd/installCmd.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | package cmd | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "fmt" | ||||||
|  |     log "oc-deploy/log_wrapper" | ||||||
|  |  | ||||||
|  |     "oc-deploy/install" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func InstallCmd(context string, version string, modules []string) error { | ||||||
|  |     log.Log().Info().Msg("Install >> ") | ||||||
|  |  | ||||||
|  |     log.Log().Info().Msg("  << Contexte  : " + context) | ||||||
|  |     if len(modules) > 0 { | ||||||
|  |         log.Log().Info().Msg(fmt.Sprintf("  << Modules   : %s", modules)) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     workspace := fmt.Sprintf("workspace_%s", context) | ||||||
|  |     obj := install.InstallClass{Workspace: workspace, Version: version} | ||||||
|  |  | ||||||
|  |     file, err := obj.NewInstall() | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |     log.Log().Info().Msg(fmt.Sprintf("  << Version   : %s", obj.Version)) | ||||||
|  |     log.Log().Info().Msg(fmt.Sprintf("  >> Config    : %s", file)) | ||||||
|  |  | ||||||
|  |     err = obj.Tools() | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     obj.SetCommands() | ||||||
|  |  | ||||||
|  |     err = obj.ChartRepo() | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     err = obj.K8s(context) | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     err = obj.InstallCharts(modules) | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return err | ||||||
|  | } | ||||||
							
								
								
									
										41
									
								
								src/cmd/installCmd_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/cmd/installCmd_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | package cmd | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "bytes" | ||||||
|  |     "github.com/spf13/cobra" | ||||||
|  |  | ||||||
|  |     "testing" | ||||||
|  |  | ||||||
|  |     "github.com/stretchr/testify/assert" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestInstallCommand(t *testing.T) { | ||||||
|  |     cmd := cobraInstallCmd() | ||||||
|  |  | ||||||
|  |     inMock := false | ||||||
|  |     cmd.RunE = func(cmd *cobra.Command, args []string) error { | ||||||
|  |         inMock = true | ||||||
|  |         return nil | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     cmd.Execute() | ||||||
|  |     assert.Truef(t, inMock, "TestInstallCommand") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestInstallCommandErr(t *testing.T) { | ||||||
|  |     cmd := cobraUninstallCmd() | ||||||
|  |  | ||||||
|  |     inMock := false | ||||||
|  |     cmd.RunE = func(cmd *cobra.Command, args []string) error { | ||||||
|  |         inMock = true | ||||||
|  |         return nil | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     cmd.SetArgs([]string{"bad"}) | ||||||
|  |     b := bytes.NewBufferString("") | ||||||
|  |     cmd.SetOut(b) | ||||||
|  |  | ||||||
|  |     err := cmd.Execute() | ||||||
|  |     assert.Falsef(t, inMock, "TestInstallCommand args") | ||||||
|  |     assert.NotNilf(t, err, "TestInstallCommand args") | ||||||
|  | } | ||||||
							
								
								
									
										47
									
								
								src/cmd/uninstallCmd.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								src/cmd/uninstallCmd.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | package cmd | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "fmt" | ||||||
|  |     // "strings" | ||||||
|  |     // "github.com/spf13/cobra" | ||||||
|  |  | ||||||
|  |     log "oc-deploy/log_wrapper" | ||||||
|  |  | ||||||
|  |     // "oc-deploy/versionOc" | ||||||
|  |     "oc-deploy/install" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func UninstallCmd(context string) error { | ||||||
|  |     log.Log().Info().Msg("Uninstall >> ") | ||||||
|  |  | ||||||
|  |     log.Log().Info().Msg("  << Contexte  : " + context) | ||||||
|  |  | ||||||
|  |     workspace := fmt.Sprintf("workspace_%s", context) | ||||||
|  |     obj := install.InstallClass{Workspace: workspace} | ||||||
|  |  | ||||||
|  |     file, err := obj.NewUninstall() | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |     log.Log().Info().Msg(fmt.Sprintf("  << Version   : %s", obj.Version)) | ||||||
|  |     log.Log().Info().Msg(fmt.Sprintf("  >> Config    : %s", file)) | ||||||
|  |  | ||||||
|  |     err = obj.Tools() | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     obj.SetCommands() | ||||||
|  |  | ||||||
|  |     err = obj.K8s(context) | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     err = obj.UninstallCharts() | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Fatal().Msg("  >> " + err.Error()) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return err | ||||||
|  | } | ||||||
							
								
								
									
										41
									
								
								src/cmd/uninstallCmd_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/cmd/uninstallCmd_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | package cmd | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "bytes" | ||||||
|  |     "github.com/spf13/cobra" | ||||||
|  |  | ||||||
|  |     "testing" | ||||||
|  |  | ||||||
|  |     "github.com/stretchr/testify/assert" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestUninstallCommand(t *testing.T) { | ||||||
|  |     cmd := cobraUninstallCmd() | ||||||
|  |  | ||||||
|  |     inMock := false | ||||||
|  |     cmd.RunE = func(cmd *cobra.Command, args []string) error { | ||||||
|  |         inMock = true | ||||||
|  |         return nil | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     cmd.Execute() | ||||||
|  |     assert.Truef(t, inMock, "TestUninstallCommand") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestUninstallCommandErr(t *testing.T) { | ||||||
|  |     cmd := cobraUninstallCmd() | ||||||
|  |  | ||||||
|  |     inMock := false | ||||||
|  |     cmd.RunE = func(cmd *cobra.Command, args []string) error { | ||||||
|  |         inMock = true | ||||||
|  |         return nil | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     cmd.SetArgs([]string{"bad"}) | ||||||
|  |     b := bytes.NewBufferString("") | ||||||
|  |     cmd.SetOut(b) | ||||||
|  |  | ||||||
|  |     err := cmd.Execute() | ||||||
|  |     assert.Falsef(t, inMock, "TestUninstallCommand args") | ||||||
|  |     assert.NotNilf(t, err, "TestUninstallCommand args") | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								src/cmd/versionlCmd.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/cmd/versionlCmd.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | package cmd | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "fmt" | ||||||
|  |     log "oc-deploy/log_wrapper" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func VersionCmd() error { | ||||||
|  |  | ||||||
|  |     version := "0.1.0" | ||||||
|  |     log.Log().Debug().Msg(fmt.Sprintf("Version : %s", version)) | ||||||
|  |     fmt.Println(version) | ||||||
|  |  | ||||||
|  |     return nil | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								src/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/go.mod
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | module oc-deploy | ||||||
|  |  | ||||||
|  | go 1.22.0 | ||||||
|  |  | ||||||
|  | require ( | ||||||
|  | 	github.com/jarcoal/httpmock v1.3.1 | ||||||
|  | 	github.com/rs/zerolog v1.33.0 | ||||||
|  | 	github.com/spf13/cobra v1.8.1 | ||||||
|  | 	github.com/stretchr/testify v1.9.0 | ||||||
|  | 	gopkg.in/yaml.v2 v2.4.0 | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | require ( | ||||||
|  | 	github.com/davecgh/go-spew v1.1.1 // indirect | ||||||
|  | 	github.com/inconshreveable/mousetrap v1.1.0 // indirect | ||||||
|  | 	github.com/kr/pretty v0.3.1 // indirect | ||||||
|  | 	github.com/mattn/go-colorable v0.1.13 // indirect | ||||||
|  | 	github.com/mattn/go-isatty v0.0.20 // indirect | ||||||
|  | 	github.com/pmezard/go-difflib v1.0.0 // indirect | ||||||
|  | 	github.com/rogpeppe/go-internal v1.11.0 // indirect | ||||||
|  | 	github.com/spf13/pflag v1.0.5 // indirect | ||||||
|  | 	golang.org/x/sys v0.22.0 // indirect | ||||||
|  | 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect | ||||||
|  | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
|  | ) | ||||||
							
								
								
									
										165
									
								
								src/helm/chart.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								src/helm/chart.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | |||||||
|  | package helm | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  |     "fmt" | ||||||
|  |     "strconv" | ||||||
|  |     "os" | ||||||
|  |     "strings" | ||||||
|  |     "errors" | ||||||
|  |     "path/filepath" | ||||||
|  |     "encoding/json" | ||||||
|  |     log "oc-deploy/log_wrapper" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type HelmChart struct { | ||||||
|  |     Bin string | ||||||
|  |     Name string | ||||||
|  |     Chart string | ||||||
|  |     Version string | ||||||
|  |     Url string | ||||||
|  |  | ||||||
|  |     Workspace string | ||||||
|  |     Opts string | ||||||
|  |     Values map[string]string | ||||||
|  |     FileValues []string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type installInfoOutput struct { | ||||||
|  |     Description string  `json:"description"` | ||||||
|  |     Notes string  `json:"notes"` | ||||||
|  |     Status string  `json:"status"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type installOutput struct { | ||||||
|  |     Info installInfoOutput  `json:"info"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this HelmCommand) ChartInstall(data HelmChart) (string, error) { | ||||||
|  |     bin := this.Bin | ||||||
|  |  | ||||||
|  |     existe, err := this.chartExists(data) | ||||||
|  |     if err != nil { | ||||||
|  |         return "", err | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     if existe { | ||||||
|  |         return "Existe déjà", nil | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ficChart := data.Chart | ||||||
|  |     // Recherche locale | ||||||
|  |     if _, err := os.Stat(ficChart); err != nil { | ||||||
|  |     } else { | ||||||
|  |         // Recherche voa le Workspace | ||||||
|  |         ficChart := filepath.Join(data.Workspace, data.Chart) | ||||||
|  |         if _, err := os.Stat(ficChart); err == nil { | ||||||
|  |         } else { | ||||||
|  |             if data.Url != "" { | ||||||
|  |                 fmt.Println("============ 52 Télechargement", data.Url) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     msg := fmt.Sprintf("%s install %s %s %s --output json", bin, data.Name, ficChart, data.Opts) | ||||||
|  |  | ||||||
|  |     if data.Version != "" { | ||||||
|  |         msg = fmt.Sprintf("%s --version %s", msg, data.Version) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for key, value := range data.Values { | ||||||
|  |         msg = fmt.Sprintf("%s --set %s=%s", msg, key, value) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ficoverwrite := filepath.Join(data.Workspace, fmt.Sprintf("value-%s.yml", data.Name)) | ||||||
|  |     if _, err := os.Stat(ficoverwrite); err != nil { | ||||||
|  |         log.Log().Warn().Msg(ficoverwrite) | ||||||
|  |     } else { | ||||||
|  |         msg = fmt.Sprintf("%s --values %s", msg, ficoverwrite) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     for _, valuefilename := range data.FileValues { | ||||||
|  |         fic := filepath.Join(data.Workspace, valuefilename) | ||||||
|  |         if _, err := os.Stat(fic); err != nil { | ||||||
|  |             log.Log().Warn().Msg(fic) | ||||||
|  |         } else { | ||||||
|  |             msg = fmt.Sprintf("%s --values %s", msg, fic) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     msg = strings.Replace(msg, "  ", " ", -1) | ||||||
|  |  | ||||||
|  |     log.Log().Debug().Msg(msg) | ||||||
|  |  | ||||||
|  |     cmd_args := strings.Split(msg, " ") | ||||||
|  | 	cmd := this.Exec(cmd_args[0], cmd_args[1:]...) | ||||||
|  |     stdout, err := cmd.CombinedOutput() | ||||||
|  |  | ||||||
|  |     if err != nil { | ||||||
|  |         res := string(stdout) | ||||||
|  |         res = strings.TrimSuffix(res, "\n") | ||||||
|  |         return "", errors.New(res) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     var objmap installOutput | ||||||
|  |  | ||||||
|  |     err = json.Unmarshal(stdout, &objmap) | ||||||
|  |     if err != nil { | ||||||
|  |         return "", err | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     res := objmap.Info.Status | ||||||
|  |  | ||||||
|  |     return res, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (this HelmCommand) ChartUninstall(data HelmChart) (string, error) { | ||||||
|  |     bin := this.Bin | ||||||
|  |  | ||||||
|  |     log.Log().Info().Msg("  >> Chart : " + data.Name) | ||||||
|  |  | ||||||
|  |     existe, err := this.chartExists(data) | ||||||
|  |     if err != nil { | ||||||
|  |         return "", err | ||||||
|  |     } | ||||||
|  |     if ! existe { | ||||||
|  |         return "Non présent", nil | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     msg := fmt.Sprintf("%s uninstall %s", bin, data.Name) | ||||||
|  |     log.Log().Debug().Msg(msg) | ||||||
|  |  | ||||||
|  |     cmd_args := strings.Split(msg, " ") | ||||||
|  | 	cmd := this.Exec(cmd_args[0], cmd_args[1:]...) | ||||||
|  |     stdout, err := cmd.CombinedOutput() | ||||||
|  |  | ||||||
|  |     res := string(stdout) | ||||||
|  |     res = strings.TrimSuffix(res, "\n") | ||||||
|  |  | ||||||
|  |     log.Log().Debug().Msg(res) | ||||||
|  |  | ||||||
|  |     return res, err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // ../bin/helm list --filter phpmyadminm --short | ||||||
|  | func (this HelmCommand) chartExists(data HelmChart) (bool, error) { | ||||||
|  |     bin := this.Bin | ||||||
|  |  | ||||||
|  |     msg := fmt.Sprintf("%s list --filter %s --no-headers", bin, data.Name) | ||||||
|  |     log.Log().Debug().Msg(msg) | ||||||
|  |  | ||||||
|  |     cmd_args := strings.Split(msg, " ") | ||||||
|  | 	cmd := this.Exec(cmd_args[0], cmd_args[1:]...) | ||||||
|  |     stdout, err := cmd.CombinedOutput() | ||||||
|  |     if err != nil { | ||||||
|  |         log.Log().Debug().Msg(string(stdout)) | ||||||
|  |         return false, errors.New(string(stdout)) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     res := string(stdout) | ||||||
|  |     res = strings.TrimSuffix(res, "\n") | ||||||
|  |  | ||||||
|  |     log.Log().Debug().Msg(string(stdout)) | ||||||
|  |     log.Log().Debug().Msg(strconv.FormatBool(res != "")) | ||||||
|  |  | ||||||
|  |     return res != "", nil | ||||||
|  | } | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user