Browse Source

add application of applications example (#29)

* add application of applications example

* Add a link in the readme
Omer Kahani 5 years ago
parent
commit
08836bd970

+ 1 - 0
README.md

@@ -19,3 +19,4 @@ to explore ArgoCD and GitOps!
 | [plugins](plugins/) | Applications which demonstrate config management plugins usage |
 | [blue-green](blue-green/) | Demonstrates how to implement blue-green deployment using [Argo Rollouts](https://github.com/argoproj/argo-rollouts)
 | [applications](applications/) | An application composed of other applications |
+| [applications-helm](applications-helm/) | Demonstrates application composed of other applications using Helm chart and value files |

+ 10 - 0
applications-helm/Chart.yaml

@@ -0,0 +1,10 @@
+apiVersion: v1
+version: 1
+appVersion: "0.12"
+description: application of applications example
+name: application-of-applications
+keywords:
+  - argocd
+maintainers:
+  - name: Omer Kahani
+    email: omer@riskified.com

+ 32 - 0
applications-helm/templates/_helpers.tpl

@@ -0,0 +1,32 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "argo-cd.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 "argo-cd.fullname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "argo-cd.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}

+ 30 - 0
applications-helm/templates/applications.yaml

@@ -0,0 +1,30 @@
+{{- $namespace := .Values.argo_namespace -}}
+{{- $chart_name := include "argo-cd.name" . -}}
+{{- $chart := include "argo-cd.chart" . -}}
+
+{{- range .Values.applications }}
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+  name: {{ .name }}
+  namespace: {{ $namespace }}
+labels:
+  app.kubernetes.io/name: {{ $chart_name }}
+  helm.sh/chart: {{ $chart }}
+  app.kubernetes.io/instance: {{ $.Release.Name }}
+  app.kubernetes.io/managed-by: {{ $.Release.Service }}
+  app.kubernetes.io/part-of: {{ $chart_name }}
+spec:
+  project: {{ .project }}
+  source:
+    repoURL: {{ .git.url }}
+    targetRevision: {{ .git.branch }}
+    path: {{ .git.path }}
+    helm:
+      valueFiles:
+{{ toYaml .value_files | indent 6 }}
+  destination:
+    server: {{ .destination.server | default "https://kubernetes.default.svc"}}
+    namespace: {{ .destination.namespace }}
+---
+{{- end }}

+ 25 - 0
applications-helm/templates/argocd-cm.yaml

@@ -0,0 +1,25 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: argocd-cm
+  namespace: {{ .Values.argo_namespace}}
+  labels:
+    app.kubernetes.io/name: {{ include "argo-cd.name" . }}
+    helm.sh/chart: {{ include "argo-cd.chart" . }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    app.kubernetes.io/part-of: {{ include "argo-cd.name" . }}
+data:
+  url: {{ .Values.config.url }}
+{{- if .Values.config.helmRepositories }}
+  helm.repositories: |
+{{ toYaml .Values.config.helmRepositories | indent 4 }}
+{{- end }}
+{{- if .Values.config.repositories }}
+  repositories: |
+{{ toYaml .Values.config.repositories | indent 4 }}
+{{- end }}
+{{- if .Values.config.oidcConfig }}
+  oidc.config: |
+{{ toYaml .Values.config.oidcConfig | indent 4 }}
+{{- end }}

+ 19 - 0
applications-helm/templates/argocd-rbac-cm.yaml

@@ -0,0 +1,19 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: argocd-rbac-cm
+  namespace: {{ .Values.argo_namespace}}
+  labels:
+    app.kubernetes.io/name: {{ include "argo-cd.name" . }}
+    helm.sh/chart: {{ include "argo-cd.chart" . }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    app.kubernetes.io/part-of: {{ include "argo-cd.name" . }}
+data:
+{{- if .Values.rbac.policyDefault }}
+  policy.default: {{ .Values.rbac.policyDefault }}
+{{- end }}
+{{- if .Values.rbac.policyCsv }}
+  policy.csv:
+{{- toYaml .Values.rbac.policyCsv | indent 4 }}
+{{- end }}

+ 45 - 0
applications-helm/templates/project.yaml

@@ -0,0 +1,45 @@
+{{- $namespace := .Values.argo_namespace -}}
+{{- $chart_name := include "argo-cd.name" . -}}
+{{- $chart := include "argo-cd.chart" . -}}
+
+{{- range .Values.projects }}
+apiVersion: argoproj.io/v1alpha1
+kind: AppProject
+metadata:
+  name: {{ .name }}
+  namespace: {{ $namespace }}
+labels:
+  app.kubernetes.io/name: {{ $chart_name }}
+  helm.sh/chart: {{ $chart }}
+  app.kubernetes.io/instance: {{ $.Release.Name }}
+  app.kubernetes.io/managed-by: {{ $.Release.Service }}
+  app.kubernetes.io/part-of: {{ $chart_name }}
+spec:
+  description: {{ .description }}
+  sourceRepos:
+  {{ toYaml .sourceRepos | indent 2 -}}
+  destinations:
+  {{- range .destinations }}
+  - namespace: {{ .namespaces }}
+    server: {{.server | default "https://kubernetes.default.svc" }}
+  {{- end }}
+
+  {{-  if .clusterResourceWhitelist  }}
+  clusterResourceWhitelist:
+{{ toYaml .clusterResourceWhitelist| indent 2 }}
+  {{-  end }}
+
+  roles:
+  {{- range .roles }}
+  - name: {{ .name }}
+    description: {{ .description }}
+    policies:
+{{ toYaml .policies| indent 6 }}
+    jwtTokens:
+{{ toYaml .jwtTokens| indent 6 }}
+    groups:
+{{ toYaml .oidcGroups| indent 6 -}}
+  {{-  end }}
+
+---
+{{- end }}

+ 46 - 0
applications-helm/values-global.yaml

@@ -0,0 +1,46 @@
+argo_namespace: argocd
+
+config:
+  helmRepositories:
+    - name: private-helm-repo
+      url: https://private.repo/
+      usernameSecret:
+        name: secret_name
+        key: key_name
+      passwordSecret:
+        name: secret_name
+        key: key_name
+    - name: incubator
+      url: https://kubernetes-charts-incubator.storage.googleapis.com/
+  repositories:
+    - url: repo_url
+      sshPrivateKeySecret: #the chart doesn't install the secert
+        name: secret_name
+        key: key_name
+
+rbac:
+# See https://github.com/argoproj/argo-cd/blob/master/docs/rbac.md on how to write RBAC policies.
+# This will effacte on all argocd instances
+  policyCsv: |
+    g, role_name, role:admin
+  policyDefault: role:readonly
+
+projects:
+    - name: project_name
+      destinations:
+        - namespaces: [namespace]
+          #server: https://kubernetes.default.svc
+      description: description
+      sourceRepos:
+      - 'repo_url'
+      #clusterResourceWhitelist:
+      #- group: '*'
+      #  kind: '*'
+      roles:
+      - name: role_name
+        description: role_description
+        oidcGroups: [' grop_name']
+        policies: |
+
+        jwtTokens:
+        - iat: 123

+ 19 - 0
applications-helm/values-production.yaml

@@ -0,0 +1,19 @@
+config:
+  url: https://argocd_url
+  #idcConfig:
+  #  name: Okta
+  #  clientID:
+  #  clientSecret:
+  #  issuer:
+
+applications:
+  - name: app_name
+    project: project
+    destination:
+      namespace: namespace
+    git:
+      url: url
+      branch: branch
+      path: path #path to the value file
+    value_files:
+    - values-production.yaml

+ 19 - 0
applications-helm/values-staging.yaml

@@ -0,0 +1,19 @@
+config:
+  url: https://argocd_url
+  #idcConfig:
+  #  name: Okta
+  #  clientID:
+  #  clientSecret:
+  #  issuer:
+
+applications:
+  - name: app_name
+    project: project
+    destination:
+      namespace: namespace
+    git:
+      url: url
+      branch: branch
+      path: path #path to the value file
+    value_files:
+    - values-staging.yaml