feat(operator): Add ArgoCD Operator initial pass
Signed-off-by: sylus <sylus1984@gmail.com>
This commit is contained in:
parent
1ceb47ff76
commit
bb5aa01a0e
31 changed files with 5914 additions and 0 deletions
22
charts/argocd-operator/.helmignore
Normal file
22
charts/argocd-operator/.helmignore
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
20
charts/argocd-operator/Chart.yaml
Normal file
20
charts/argocd-operator/Chart.yaml
Normal file
|
@ -0,0 +1,20 @@
|
|||
apiVersion: v2
|
||||
description: A Helm chart for ArgoCD Operator
|
||||
name: argocd-operator
|
||||
version: 0.0.6
|
||||
appVersion: v0.0.15
|
||||
type: application
|
||||
keywords:
|
||||
- argocd
|
||||
- cd
|
||||
- gitops
|
||||
home: https://argocd-operator.readthedocs.io/
|
||||
icon: https://raw.githubusercontent.com/argoproj-labs/argocd-operator/master/deploy/argo-cd/icon.png
|
||||
sources:
|
||||
- https://github.com/argoproj-labs/argocd-operator
|
||||
maintainers:
|
||||
- name: sylus
|
||||
email: william.hearn@canada.ca
|
||||
- name: zachomedia
|
||||
email: zachary.seguin@canada.ca
|
||||
engine: gotpl
|
10
charts/argocd-operator/README.md
Normal file
10
charts/argocd-operator/README.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# ArgoCD Operator
|
||||
|
||||
A Kubernetes operator for managing Argo CD clusters.
|
||||
|
||||
For more detailed documentation please visit [here](https://argocd-operator.readthedocs.io/)
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
This chart bootstraps the ArgoCD Operator on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
1760
charts/argocd-operator/crds/argoproj.io_applications_crd.yaml
Normal file
1760
charts/argocd-operator/crds/argoproj.io_applications_crd.yaml
Normal file
File diff suppressed because it is too large
Load diff
1741
charts/argocd-operator/crds/argoproj.io_applicationsets.yaml
Normal file
1741
charts/argocd-operator/crds/argoproj.io_applicationsets.yaml
Normal file
File diff suppressed because it is too large
Load diff
257
charts/argocd-operator/crds/argoproj.io_appprojects_crd.yaml
Normal file
257
charts/argocd-operator/crds/argoproj.io_appprojects_crd.yaml
Normal file
|
@ -0,0 +1,257 @@
|
|||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: appprojects.argoproj.io
|
||||
app.kubernetes.io/part-of: argocd
|
||||
name: appprojects.argoproj.io
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: AppProject
|
||||
listKind: AppProjectList
|
||||
plural: appprojects
|
||||
shortNames:
|
||||
- appproj
|
||||
- appprojs
|
||||
singular: appproject
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: 'AppProject provides a logical grouping of applications, providing controls for: * where the apps may deploy to (cluster whitelist) * what may be deployed (repository whitelist, resource whitelist/blacklist) * who can access these applications (roles, OIDC group claims bindings) * and what they can do (RBAC policies) * automation access to these roles (JWT tokens)'
|
||||
properties:
|
||||
apiVersion:
|
||||
description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
description: AppProjectSpec is the specification of an AppProject
|
||||
properties:
|
||||
clusterResourceBlacklist:
|
||||
description: ClusterResourceBlacklist contains list of blacklisted cluster level resources
|
||||
items:
|
||||
description: GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types
|
||||
properties:
|
||||
group:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
required:
|
||||
- group
|
||||
- kind
|
||||
type: object
|
||||
type: array
|
||||
clusterResourceWhitelist:
|
||||
description: ClusterResourceWhitelist contains list of whitelisted cluster level resources
|
||||
items:
|
||||
description: GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types
|
||||
properties:
|
||||
group:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
required:
|
||||
- group
|
||||
- kind
|
||||
type: object
|
||||
type: array
|
||||
description:
|
||||
description: Description contains optional project description
|
||||
type: string
|
||||
destinations:
|
||||
description: Destinations contains list of destinations available for deployment
|
||||
items:
|
||||
description: ApplicationDestination holds information about the application's destination
|
||||
properties:
|
||||
name:
|
||||
description: Name is an alternate way of specifying the target cluster by its symbolic name
|
||||
type: string
|
||||
namespace:
|
||||
description: Namespace specifies the target namespace for the application's resources. The namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace
|
||||
type: string
|
||||
server:
|
||||
description: Server specifies the URL of the target cluster and must be set to the Kubernetes control plane API
|
||||
type: string
|
||||
type: object
|
||||
type: array
|
||||
namespaceResourceBlacklist:
|
||||
description: NamespaceResourceBlacklist contains list of blacklisted namespace level resources
|
||||
items:
|
||||
description: GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types
|
||||
properties:
|
||||
group:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
required:
|
||||
- group
|
||||
- kind
|
||||
type: object
|
||||
type: array
|
||||
namespaceResourceWhitelist:
|
||||
description: NamespaceResourceWhitelist contains list of whitelisted namespace level resources
|
||||
items:
|
||||
description: GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types
|
||||
properties:
|
||||
group:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
required:
|
||||
- group
|
||||
- kind
|
||||
type: object
|
||||
type: array
|
||||
orphanedResources:
|
||||
description: OrphanedResources specifies if controller should monitor orphaned resources of apps in this project
|
||||
properties:
|
||||
ignore:
|
||||
description: Ignore contains a list of resources that are to be excluded from orphaned resources monitoring
|
||||
items:
|
||||
description: OrphanedResourceKey is a reference to a resource to be ignored from
|
||||
properties:
|
||||
group:
|
||||
type: string
|
||||
kind:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
type: object
|
||||
type: array
|
||||
warn:
|
||||
description: Warn indicates if warning condition should be created for apps which have orphaned resources
|
||||
type: boolean
|
||||
type: object
|
||||
roles:
|
||||
description: Roles are user defined RBAC roles associated with this project
|
||||
items:
|
||||
description: ProjectRole represents a role that has access to a project
|
||||
properties:
|
||||
description:
|
||||
description: Description is a description of the role
|
||||
type: string
|
||||
groups:
|
||||
description: Groups are a list of OIDC group claims bound to this role
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
jwtTokens:
|
||||
description: JWTTokens are a list of generated JWT tokens bound to this role
|
||||
items:
|
||||
description: JWTToken holds the issuedAt and expiresAt values of a token
|
||||
properties:
|
||||
exp:
|
||||
format: int64
|
||||
type: integer
|
||||
iat:
|
||||
format: int64
|
||||
type: integer
|
||||
id:
|
||||
type: string
|
||||
required:
|
||||
- iat
|
||||
type: object
|
||||
type: array
|
||||
name:
|
||||
description: Name is a name for this role
|
||||
type: string
|
||||
policies:
|
||||
description: Policies Stores a list of casbin formated strings that define access policies for the role in the project
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
required:
|
||||
- name
|
||||
type: object
|
||||
type: array
|
||||
signatureKeys:
|
||||
description: SignatureKeys contains a list of PGP key IDs that commits in Git must be signed with in order to be allowed for sync
|
||||
items:
|
||||
description: SignatureKey is the specification of a key required to verify commit signatures with
|
||||
properties:
|
||||
keyID:
|
||||
description: The ID of the key in hexadecimal notation
|
||||
type: string
|
||||
required:
|
||||
- keyID
|
||||
type: object
|
||||
type: array
|
||||
sourceRepos:
|
||||
description: SourceRepos contains list of repository URLs which can be used for deployment
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
syncWindows:
|
||||
description: SyncWindows controls when syncs can be run for apps in this project
|
||||
items:
|
||||
description: SyncWindow contains the kind, time, duration and attributes that are used to assign the syncWindows to apps
|
||||
properties:
|
||||
applications:
|
||||
description: Applications contains a list of applications that the window will apply to
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
clusters:
|
||||
description: Clusters contains a list of clusters that the window will apply to
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
duration:
|
||||
description: Duration is the amount of time the sync window will be open
|
||||
type: string
|
||||
kind:
|
||||
description: Kind defines if the window allows or blocks syncs
|
||||
type: string
|
||||
manualSync:
|
||||
description: ManualSync enables manual syncs when they would otherwise be blocked
|
||||
type: boolean
|
||||
namespaces:
|
||||
description: Namespaces contains a list of namespaces that the window will apply to
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
schedule:
|
||||
description: Schedule is the time the window will begin, specified in cron format
|
||||
type: string
|
||||
type: object
|
||||
type: array
|
||||
type: object
|
||||
status:
|
||||
description: AppProjectStatus contains status information for AppProject CRs
|
||||
properties:
|
||||
jwtTokensByRole:
|
||||
additionalProperties:
|
||||
description: JWTTokens represents a list of JWT tokens
|
||||
properties:
|
||||
items:
|
||||
items:
|
||||
description: JWTToken holds the issuedAt and expiresAt values of a token
|
||||
properties:
|
||||
exp:
|
||||
format: int64
|
||||
type: integer
|
||||
iat:
|
||||
format: int64
|
||||
type: integer
|
||||
id:
|
||||
type: string
|
||||
required:
|
||||
- iat
|
||||
type: object
|
||||
type: array
|
||||
type: object
|
||||
description: JWTTokensByRole contains a list of JWT tokens issued for a given role
|
||||
type: object
|
||||
type: object
|
||||
required:
|
||||
- metadata
|
||||
- spec
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
219
charts/argocd-operator/crds/argoproj.io_argocdexports_crd.yaml
Normal file
219
charts/argocd-operator/crds/argoproj.io_argocdexports_crd.yaml
Normal file
|
@ -0,0 +1,219 @@
|
|||
|
||||
---
|
||||
apiVersion: apiextensions.k8s.io/v1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
annotations:
|
||||
controller-gen.kubebuilder.io/version: v0.6.1
|
||||
creationTimestamp: null
|
||||
name: argocdexports.argoproj.io
|
||||
spec:
|
||||
group: argoproj.io
|
||||
names:
|
||||
kind: ArgoCDExport
|
||||
listKind: ArgoCDExportList
|
||||
plural: argocdexports
|
||||
singular: argocdexport
|
||||
scope: Namespaced
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
schema:
|
||||
openAPIV3Schema:
|
||||
description: ArgoCDExport is the Schema for the argocdexports API
|
||||
properties:
|
||||
apiVersion:
|
||||
description: 'APIVersion defines the versioned schema of this representation
|
||||
of an object. Servers should convert recognized schemas to the latest
|
||||
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||
type: string
|
||||
kind:
|
||||
description: 'Kind is a string value representing the REST resource this
|
||||
object represents. Servers may infer this from the endpoint the client
|
||||
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||
type: string
|
||||
metadata:
|
||||
type: object
|
||||
spec:
|
||||
description: ArgoCDExportSpec defines the desired state of ArgoCDExport
|
||||
properties:
|
||||
argocd:
|
||||
description: Argocd is the name of the ArgoCD instance to export.
|
||||
type: string
|
||||
image:
|
||||
description: Image is the container image to use for the export Job.
|
||||
type: string
|
||||
schedule:
|
||||
description: Schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.
|
||||
type: string
|
||||
storage:
|
||||
description: Storage defines the storage configuration options.
|
||||
properties:
|
||||
backend:
|
||||
description: Backend defines the storage backend to use, must
|
||||
be "local" (the default), "aws", "azure" or "gcp".
|
||||
type: string
|
||||
pvc:
|
||||
description: PVC is the desired characteristics for a PersistentVolumeClaim.
|
||||
properties:
|
||||
accessModes:
|
||||
description: 'AccessModes contains the desired access modes
|
||||
the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1'
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
dataSource:
|
||||
description: 'This field can be used to specify either: *
|
||||
An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot)
|
||||
* An existing PVC (PersistentVolumeClaim) * An existing
|
||||
custom resource that implements data population (Alpha)
|
||||
In order to use custom resource types that implement data
|
||||
population, the AnyVolumeDataSource feature gate must be
|
||||
enabled. If the provisioner or an external controller can
|
||||
support the specified data source, it will create a new
|
||||
volume based on the contents of the specified data source.'
|
||||
properties:
|
||||
apiGroup:
|
||||
description: APIGroup is the group for the resource being
|
||||
referenced. If APIGroup is not specified, the specified
|
||||
Kind must be in the core API group. For any other third-party
|
||||
types, APIGroup is required.
|
||||
type: string
|
||||
kind:
|
||||
description: Kind is the type of resource being referenced
|
||||
type: string
|
||||
name:
|
||||
description: Name is the name of resource being referenced
|
||||
type: string
|
||||
required:
|
||||
- kind
|
||||
- name
|
||||
type: object
|
||||
resources:
|
||||
description: 'Resources represents the minimum resources the
|
||||
volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources'
|
||||
properties:
|
||||
limits:
|
||||
additionalProperties:
|
||||
anyOf:
|
||||
- type: integer
|
||||
- type: string
|
||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||
x-kubernetes-int-or-string: true
|
||||
description: 'Limits describes the maximum amount of compute
|
||||
resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
|
||||
type: object
|
||||
requests:
|
||||
additionalProperties:
|
||||
anyOf:
|
||||
- type: integer
|
||||
- type: string
|
||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
||||
x-kubernetes-int-or-string: true
|
||||
description: 'Requests describes the minimum amount of
|
||||
compute resources required. If Requests is omitted for
|
||||
a container, it defaults to Limits if that is explicitly
|
||||
specified, otherwise to an implementation-defined value.
|
||||
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
|
||||
type: object
|
||||
type: object
|
||||
selector:
|
||||
description: A label query over volumes to consider for binding.
|
||||
properties:
|
||||
matchExpressions:
|
||||
description: matchExpressions is a list of label selector
|
||||
requirements. The requirements are ANDed.
|
||||
items:
|
||||
description: A label selector requirement is a selector
|
||||
that contains values, a key, and an operator that
|
||||
relates the key and values.
|
||||
properties:
|
||||
key:
|
||||
description: key is the label key that the selector
|
||||
applies to.
|
||||
type: string
|
||||
operator:
|
||||
description: operator represents a key's relationship
|
||||
to a set of values. Valid operators are In, NotIn,
|
||||
Exists and DoesNotExist.
|
||||
type: string
|
||||
values:
|
||||
description: values is an array of string values.
|
||||
If the operator is In or NotIn, the values array
|
||||
must be non-empty. If the operator is Exists or
|
||||
DoesNotExist, the values array must be empty.
|
||||
This array is replaced during a strategic merge
|
||||
patch.
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
required:
|
||||
- key
|
||||
- operator
|
||||
type: object
|
||||
type: array
|
||||
matchLabels:
|
||||
additionalProperties:
|
||||
type: string
|
||||
description: matchLabels is a map of {key,value} pairs.
|
||||
A single {key,value} in the matchLabels map is equivalent
|
||||
to an element of matchExpressions, whose key field is
|
||||
"key", the operator is "In", and the values array contains
|
||||
only "value". The requirements are ANDed.
|
||||
type: object
|
||||
type: object
|
||||
storageClassName:
|
||||
description: 'Name of the StorageClass required by the claim.
|
||||
More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1'
|
||||
type: string
|
||||
volumeMode:
|
||||
description: volumeMode defines what type of volume is required
|
||||
by the claim. Value of Filesystem is implied when not included
|
||||
in claim spec.
|
||||
type: string
|
||||
volumeName:
|
||||
description: VolumeName is the binding reference to the PersistentVolume
|
||||
backing this claim.
|
||||
type: string
|
||||
type: object
|
||||
secretName:
|
||||
description: SecretName is the name of a Secret with encryption
|
||||
key, credentials, etc.
|
||||
type: string
|
||||
type: object
|
||||
version:
|
||||
description: Version is the tag/digest to use for the export Job container
|
||||
image.
|
||||
type: string
|
||||
required:
|
||||
- argocd
|
||||
type: object
|
||||
status:
|
||||
description: ArgoCDExportStatus defines the observed state of ArgoCDExport
|
||||
properties:
|
||||
phase:
|
||||
description: 'Phase is a simple, high-level summary of where the ArgoCDExport
|
||||
is in its lifecycle. There are five possible phase values: Pending:
|
||||
The ArgoCDExport has been accepted by the Kubernetes system, but
|
||||
one or more of the required resources have not been created. Running:
|
||||
All of the containers for the ArgoCDExport are still running, or
|
||||
in the process of starting or restarting. Succeeded: All containers
|
||||
for the ArgoCDExport have terminated in success, and will not be
|
||||
restarted. Failed: At least one container has terminated in failure,
|
||||
either exited with non-zero status or was terminated by the system.
|
||||
Unknown: For some reason the state of the ArgoCDExport could not
|
||||
be obtained.'
|
||||
type: string
|
||||
required:
|
||||
- phase
|
||||
type: object
|
||||
type: object
|
||||
served: true
|
||||
storage: true
|
||||
subresources:
|
||||
status: {}
|
||||
status:
|
||||
acceptedNames:
|
||||
kind: ""
|
||||
plural: ""
|
||||
conditions: []
|
||||
storedVersions: []
|
1236
charts/argocd-operator/crds/argoproj.io_argocds_crd.yaml
Normal file
1236
charts/argocd-operator/crds/argoproj.io_argocds_crd.yaml
Normal file
File diff suppressed because it is too large
Load diff
5
charts/argocd-operator/templates/NOTES.txt
Normal file
5
charts/argocd-operator/templates/NOTES.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
**********************
|
||||
** CONGRATULATIONS! **
|
||||
**********************
|
||||
|
||||
The ArgoCD Operator and associated Argo Projects have been installed.
|
58
charts/argocd-operator/templates/_helpers.tpl
Normal file
58
charts/argocd-operator/templates/_helpers.tpl
Normal file
|
@ -0,0 +1,58 @@
|
|||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "argocd-operator.name" -}}
|
||||
{{- default .Chart.Name | 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 "argocd-operator.fullname" -}}
|
||||
{{- $name := default .Chart.Name -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "argocd-operator.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Common labels for operator
|
||||
*/}}
|
||||
{{- define "argocd-operator.labels" -}}
|
||||
helm.sh/chart: {{ include "argocd-operator.chart" . }}
|
||||
{{ include "argocd-operator.selectorLabels" . }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Selector labels Operator
|
||||
*/}}
|
||||
{{- define "argocd-operator.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "argocd-operator.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
ArgoCD Vault plugin validation
|
||||
*/}}
|
||||
{{- if .Values.vault.enabled }}
|
||||
{{- if ne .Values.vault.auth.type "k8s" }}
|
||||
{{- fail "This chart currently only supports k8s auth for the argocd-vault-plugin" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
24
charts/argocd-operator/templates/argocd_editor_role.yaml
Normal file
24
charts/argocd-operator/templates/argocd_editor_role.yaml
Normal file
|
@ -0,0 +1,24 @@
|
|||
# permissions for end users to edit argocds.
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: argocd-editor-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocds
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocds/status
|
||||
verbs:
|
||||
- get
|
20
charts/argocd-operator/templates/argocd_viewer_role.yaml
Normal file
20
charts/argocd-operator/templates/argocd_viewer_role.yaml
Normal file
|
@ -0,0 +1,20 @@
|
|||
# permissions for end users to view argocds.
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: argocd-viewer-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocds
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocds/status
|
||||
verbs:
|
||||
- get
|
|
@ -0,0 +1,24 @@
|
|||
# permissions for end users to edit argocdexports.
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: argocdexport-editor-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocdexports
|
||||
verbs:
|
||||
- create
|
||||
- delete
|
||||
- get
|
||||
- list
|
||||
- patch
|
||||
- update
|
||||
- watch
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocdexports/status
|
||||
verbs:
|
||||
- get
|
|
@ -0,0 +1,20 @@
|
|||
# permissions for end users to view argocdexports.
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: argocdexport-viewer-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocdexports
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocdexports/status
|
||||
verbs:
|
||||
- get
|
|
@ -0,0 +1,9 @@
|
|||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: metrics-reader
|
||||
rules:
|
||||
- nonResourceURLs:
|
||||
- "/metrics"
|
||||
verbs:
|
||||
- get
|
17
charts/argocd-operator/templates/auth_proxy_role.yaml
Normal file
17
charts/argocd-operator/templates/auth_proxy_role.yaml
Normal file
|
@ -0,0 +1,17 @@
|
|||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: proxy-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- authentication.k8s.io
|
||||
resources:
|
||||
- tokenreviews
|
||||
verbs:
|
||||
- create
|
||||
- apiGroups:
|
||||
- authorization.k8s.io
|
||||
resources:
|
||||
- subjectaccessreviews
|
||||
verbs:
|
||||
- create
|
|
@ -0,0 +1,12 @@
|
|||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: proxy-rolebinding
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: proxy-role
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: argocd-operator
|
||||
namespace: argocd-operator-system
|
14
charts/argocd-operator/templates/auth_proxy_service.yaml
Normal file
14
charts/argocd-operator/templates/auth_proxy_service.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
control-plane: controller-manager
|
||||
name: controller-manager-metrics-service
|
||||
namespace: argocd-operator-system
|
||||
spec:
|
||||
ports:
|
||||
- name: https
|
||||
port: 8443
|
||||
targetPort: https
|
||||
selector:
|
||||
control-plane: controller-manager
|
37
charts/argocd-operator/templates/leader_election_role.yaml
Normal file
37
charts/argocd-operator/templates/leader_election_role.yaml
Normal file
|
@ -0,0 +1,37 @@
|
|||
# permissions to do leader election.
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: leader-election-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- create
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- coordination.k8s.io
|
||||
resources:
|
||||
- leases
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- create
|
||||
- update
|
||||
- patch
|
||||
- delete
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- events
|
||||
verbs:
|
||||
- create
|
||||
- patch
|
|
@ -0,0 +1,12 @@
|
|||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: leader-election-rolebinding
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: leader-election-role
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: argocd-operator
|
||||
namespace: argocd-operator-system
|
45
charts/argocd-operator/templates/operator.yaml
Normal file
45
charts/argocd-operator/templates/operator.yaml
Normal file
|
@ -0,0 +1,45 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: "argocd-operator"
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{- include "argocd-operator.labels" . | nindent 4 }}
|
||||
spec:
|
||||
replicas: {{ .Values.operator.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "argocd-operator.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "argocd-operator.selectorLabels" . | nindent 8 }}
|
||||
spec:
|
||||
{{- with .Values.operator.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: argocd-operator
|
||||
{{- with .Values.operator.securityContext }}
|
||||
securityContext:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
image: "{{ .Values.operator.image.repository }}:{{ .Values.operator.image.tag }}"
|
||||
command:
|
||||
- /manager
|
||||
args:
|
||||
- --leader-elect
|
||||
imagePullPolicy: {{ .Values.operator.image.pullPolicy }}
|
||||
env:
|
||||
- name: WATCH_NAMESPACE
|
||||
value: {{ .Values.operator.nsToWatch }}
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: OPERATOR_NAME
|
||||
value: "argocd-operator"
|
||||
resources:
|
||||
{{- toYaml .Values.operator.resources | nindent 12 }}
|
23
charts/argocd-operator/templates/projects.yaml
Normal file
23
charts/argocd-operator/templates/projects.yaml
Normal file
|
@ -0,0 +1,23 @@
|
|||
{{ range .Values.projects }}
|
||||
---
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: ArgoCD
|
||||
metadata:
|
||||
name: {{ .name }}
|
||||
namespace: {{ .namespace }}
|
||||
## Annotations for ArgoCD Project Pods
|
||||
annotations:
|
||||
{{- with .podAnnotations }}
|
||||
{{- . | toYaml | nindent 4 }}
|
||||
{{- end }}
|
||||
## Optionally pass labels to be applied to the statefulset pods
|
||||
labels:
|
||||
app: argocd
|
||||
{{- with .podLabels }}
|
||||
{{- . | toYaml | nindent 4 }}
|
||||
{{- end }}
|
||||
spec: {{- with .spec }}
|
||||
# See https://argocd-operator.readthedocs.io/en/latest/reference/api.html/#argoproj.io/v1alpha1.ArgoCDSpec
|
||||
{{ toYaml . | nindent 2 }}
|
||||
{{ end }}
|
||||
{{ end }}
|
120
charts/argocd-operator/templates/role.yaml
Normal file
120
charts/argocd-operator/templates/role.yaml
Normal file
|
@ -0,0 +1,120 @@
|
|||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: manager-role
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
- endpoints
|
||||
- events
|
||||
- namespaces
|
||||
- persistentvolumeclaims
|
||||
- pods
|
||||
- secrets
|
||||
- serviceaccounts
|
||||
- services
|
||||
- services/finalizers
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- pods
|
||||
- pods/log
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- apps
|
||||
resources:
|
||||
- daemonsets
|
||||
- deployments
|
||||
- replicasets
|
||||
- statefulsets
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- apps
|
||||
resourceNames:
|
||||
- argocd-operator
|
||||
resources:
|
||||
- deployments/finalizers
|
||||
verbs:
|
||||
- update
|
||||
- apiGroups:
|
||||
- apps.openshift.io
|
||||
resources:
|
||||
- deploymentconfigs
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- applications
|
||||
- appprojects
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocdexports
|
||||
- argocdexports/finalizers
|
||||
- argocdexports/status
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- argoproj.io
|
||||
resources:
|
||||
- argocds
|
||||
- argocds/finalizers
|
||||
- argocds/status
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- autoscaling
|
||||
resources:
|
||||
- horizontalpodautoscalers
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- batch
|
||||
resources:
|
||||
- cronjobs
|
||||
- jobs
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- extensions
|
||||
resources:
|
||||
- ingresses
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- monitoring.coreos.com
|
||||
resources:
|
||||
- prometheuses
|
||||
- servicemonitors
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- rbac.authorization.k8s.io
|
||||
resources:
|
||||
- '*'
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- rbac.authorization.k8s.io
|
||||
resources:
|
||||
- clusterrolebindings
|
||||
- clusterroles
|
||||
verbs:
|
||||
- '*'
|
||||
- apiGroups:
|
||||
- route.openshift.io
|
||||
resources:
|
||||
- routes
|
||||
- routes/custom-host
|
||||
verbs:
|
||||
- '*'
|
12
charts/argocd-operator/templates/role_binding.yaml
Normal file
12
charts/argocd-operator/templates/role_binding.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: manager-rolebinding
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: manager-role
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: argocd-operator
|
||||
namespace: argocd-operator-system
|
7
charts/argocd-operator/templates/service_account.yaml
Normal file
7
charts/argocd-operator/templates/service_account.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: argocd-operator
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "argocd-operator.labels" . | nindent 4 }}
|
|
@ -0,0 +1,18 @@
|
|||
{{- if .Values.vault.enabled }}
|
||||
{{ range .Values.projects }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1beta1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: role-tokenreview-binding-{{ .namespace }}
|
||||
namespace: {{ .namespace }}
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: system:auth-delegator
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: argocd-repo-server-vault
|
||||
namespace: {{ .namespace }}
|
||||
{{ end }}
|
||||
{{- end }}
|
|
@ -0,0 +1,18 @@
|
|||
{{- if .Values.vault.enabled }}
|
||||
{{ range .Values.projects }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
type: Opaque
|
||||
metadata:
|
||||
name: argocd-vault-secret
|
||||
namespace: {{ .namespace }}
|
||||
stringData:
|
||||
VAULT_ADDR: {{ $.Values.vault.auth.url }}
|
||||
AVP_AUTH_TYPE: {{ $.Values.vault.auth.type }}
|
||||
AVP_TYPE: vault
|
||||
# The kubernetes role in vault
|
||||
# https://github.com/IBM/argocd-vault-plugin/blob/main/docs/config.md#full-list-of-supported-parameters
|
||||
AVP_K8S_ROLE: {{ $.Values.vault.auth.rolePrefix }}{{ .namespace | replace "-" "_" }}
|
||||
{{ end }}
|
||||
{{- end }}
|
|
@ -0,0 +1,18 @@
|
|||
{{- if .Values.vault.enabled }}
|
||||
{{ range .Values.projects }}
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: argocd-repo-server-vault
|
||||
namespace: {{ .namespace }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: argocd-repo-server-vault
|
||||
namespace: {{ .namespace }}
|
||||
roleRef:
|
||||
kind: Role
|
||||
name: secret-reader
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
{{ end }}
|
||||
{{- end }}
|
15
charts/argocd-operator/templates/vault-plugin/role.yaml
Normal file
15
charts/argocd-operator/templates/vault-plugin/role.yaml
Normal file
|
@ -0,0 +1,15 @@
|
|||
{{- if .Values.vault.enabled }}
|
||||
{{ range .Values.projects }}
|
||||
---
|
||||
# This is to get the argocd-vault-secret
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: secret-reader
|
||||
namespace: {{ .namespace }}
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["secrets"]
|
||||
verbs: ["get"]
|
||||
{{ end }}
|
||||
{{- end }}
|
|
@ -0,0 +1,13 @@
|
|||
# This is created regardless of whether or not
|
||||
# Vault is being used (so that nothing fails)
|
||||
# if the service account doesn't exist.
|
||||
# This is OK, since the serviceaccount doesn't
|
||||
# get a RoleBinding unless Vault is enabled.
|
||||
{{ range .Values.projects }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: argocd-repo-server-vault
|
||||
namespace: {{ .namespace }}
|
||||
{{ end }}
|
108
charts/argocd-operator/values.yaml
Normal file
108
charts/argocd-operator/values.yaml
Normal file
|
@ -0,0 +1,108 @@
|
|||
# Default values for argocd-operator.
|
||||
|
||||
operator:
|
||||
clusterDomain: ""
|
||||
nsToWatch: "argocd-operator-system,argocd-system"
|
||||
image:
|
||||
repository: statcan/argocd-operator
|
||||
tag: v0.0.16
|
||||
pullPolicy: IfNotPresent
|
||||
imagePullSecrets: []
|
||||
podAnnotations: {}
|
||||
podLabels: {}
|
||||
replicaCount: 1
|
||||
securityContext:
|
||||
runAsUser: 1000
|
||||
runAsGroup: 1000
|
||||
runAsNonRoot: true
|
||||
fsGroup: 1000
|
||||
resources:
|
||||
requests:
|
||||
cpu: 200m
|
||||
memory: 256Mi
|
||||
ephemeral-storage: 500Mi
|
||||
|
||||
# For the argocd-vault-plugin
|
||||
vault:
|
||||
enabled: false
|
||||
auth:
|
||||
url: http://vault.default:8200
|
||||
# https://github.com/IBM/argocd-vault-plugin/blob/main/docs/config.md
|
||||
type: k8s
|
||||
# You need to create this kubernetes role in vault
|
||||
# The end role is `{prefix}{namespace}`, like `argocd_dscd_system`.
|
||||
# This is to isolate Vault spaces from eachother.
|
||||
# NOTE: The namespace will have "-"s replaced with "_"s
|
||||
rolePrefix: argocd_
|
||||
|
||||
pluginConfig: &pluginConfig |
|
||||
# If the argocd-vault-plugin is not enabled,
|
||||
# then obviously these will not work.
|
||||
- name: argocd-vault-plugin
|
||||
generate:
|
||||
command: ["argocd-vault-plugin"]
|
||||
args: ["-s", "argocd-vault-secret", "generate", "./"]
|
||||
- name: argocd-vault-plugin-helm
|
||||
generate:
|
||||
command: ["sh", "-c"]
|
||||
args: ["helm template . > all.yaml && argocd-vault-plugin -s argocd-vault-secret generate all.yaml"]
|
||||
- name: argocd-vault-plugin-kustomize
|
||||
generate:
|
||||
command: ["sh", "-c"]
|
||||
args: ["kustomize build . > all.yaml && argocd-vault-plugin -s argocd-vault-secret generate all.yaml"]
|
||||
|
||||
# ## ArgoCD Projects Definition
|
||||
# projects:
|
||||
# # Project name
|
||||
# - name: argprojo01
|
||||
# namespace: "argocd-operator-system"
|
||||
# podAnnotations: {}
|
||||
# podLabels: {}
|
||||
# spec:
|
||||
# oidcConfig: |
|
||||
# name: myoidc
|
||||
# issuer: OIDC_FQDN
|
||||
# clientID: id
|
||||
# clientSecret: secret
|
||||
# requestedIDTokenClaims:
|
||||
# groups:
|
||||
# essential: true
|
||||
# requestedScopes: ["openid", "profile", "email"]
|
||||
# rbac:
|
||||
# defaultPolicy: 'role:readonly'
|
||||
# policy: |
|
||||
# g, system:cluster-admins, role:admin
|
||||
# scopes: '[groups]'
|
||||
# server:
|
||||
# autoscale:
|
||||
# enabled: true
|
||||
# host: ARGOCD_FQDN
|
||||
# insecure: false
|
||||
# configManagementPlugins: *pluginConfig
|
||||
|
||||
# # Project name
|
||||
# - name: argprojo02
|
||||
# namespace: argocd-system
|
||||
# podAnnotations: {}
|
||||
# podLabels: {}
|
||||
# spec:
|
||||
# oidcConfig: |
|
||||
# name: myoidc
|
||||
# issuer: OIDC_FQDN
|
||||
# clientID: id
|
||||
# clientSecret: secret
|
||||
# requestedIDTokenClaims:
|
||||
# groups:
|
||||
# essential: true
|
||||
# requestedScopes: ["openid", "profile", "email"]
|
||||
# rbac:
|
||||
# defaultPolicy: 'role:readonly'
|
||||
# policy: |
|
||||
# g, system:cluster-admins, role:admin
|
||||
# scopes: '[groups]'
|
||||
# server:
|
||||
# autoscale:
|
||||
# enabled: true
|
||||
# host: ARGOCD_FQDN
|
||||
# insecure: false
|
||||
# configManagementPlugins: *pluginConfig
|
Loading…
Reference in a new issue