├── LICENSE ├── README.md ├── argocd └── application-capi.yaml ├── charts └── capi-aws │ ├── Chart.yaml │ ├── templates │ ├── aws-cluster.yaml │ ├── cluster.yaml │ ├── kubeadm-control-plane.yaml │ ├── kubeadm-nodes.yaml │ ├── machine-deployment-nodes.yaml │ ├── machine-template-control-plane.yaml │ └── machine-template-nodes.yaml │ ├── values-demo.yaml │ └── values.yaml ├── flux └── capi │ ├── README.md │ ├── capi-release.yaml │ ├── capi-source.yaml │ └── flux-system │ ├── gotk-components.yaml │ ├── gotk-sync.yaml │ └── kustomization.yaml └── test ├── capi-quickstart-v1.18.8.yaml └── capi-quickstart-v1.19.1.yaml /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cluster API Helm Chart 2 | A Helm chart to install Cluster API manifests 3 | 4 | * Installs the [cluster API Manifests](cluster-api.sigs.k8s.io). 5 | 6 | *Note: Currently the chart install a target cluster in AWS. However it is intended to incude the support for other Cluster API providers.* 7 | 8 | 9 | ## Installing the Chart using ArgoCD 10 | 11 | More details: https://github.com/kgamanji/cluster-api-argocd 12 | 13 | To install the chart using ArgoCD use the following command: 14 | ``` 15 | kubectl apply -f argocd/application-capi.yaml 16 | ``` 17 | 18 | ## Installing the Chart 19 | 20 | To install the chart with the release name `my-release`: 21 | 22 | ***TO BE IMEPMELENTED*** 23 | ```bash 24 | ## helm install kgamanji/cluster-api-aws 25 | ``` 26 | 27 | 28 | ## Configuration 29 | 30 | | Parameter | Description | Default | 31 | |:---------------------------------------------|:--------------------------------------------------------------------------------------|:-------------------------------------------| 32 | | `kube.version` | Kubernetes version to be installed on the target clusters | `v1.24.0` | 33 | | `controlPlane.replicas` | Amount of master nodes in the target cluster | `3` | 34 | | `workers.replica` | Amount of worker nodes in the target cluster | `1` | 35 | -------------------------------------------------------------------------------- /argocd/application-capi.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: cluster-api 5 | namespace: argocd 6 | spec: 7 | destination: 8 | namespace: 'default' 9 | server: https://kubernetes.default.svc 10 | project: default 11 | source: 12 | helm: 13 | valueFiles: 14 | - values-demo.yaml 15 | path: charts/capi-aws 16 | repoURL: https://github.com/kgamanji/cluster-api-helm-chart.git 17 | targetRevision: HEAD 18 | syncPolicy: {} 19 | -------------------------------------------------------------------------------- /charts/capi-aws/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | name: cluster-api 3 | description: Install Cluster API manifests to generate a fully working Kubernetes cluster 4 | keywords: 5 | - clusterapi 6 | - provisioning 7 | - bootstrapping 8 | - kubernetes 9 | version: 1.0.22 10 | home: https://cluster-api.sigs.k8s.io/ 11 | sources: 12 | - https://cluster-api.sigs.k8s.io/ 13 | maintainers: 14 | - name: kgamanji 15 | email: gamanjie@gmail.com 16 | -------------------------------------------------------------------------------- /charts/capi-aws/templates/aws-cluster.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 2 | kind: AWSCluster 3 | metadata: 4 | name: capi-quickstart 5 | namespace: default 6 | spec: 7 | region: eu-west-1 8 | sshKeyName: default 9 | -------------------------------------------------------------------------------- /charts/capi-aws/templates/cluster.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cluster.x-k8s.io/v1beta1 2 | kind: Cluster 3 | metadata: 4 | name: capi-quickstart 5 | namespace: default 6 | spec: 7 | clusterNetwork: 8 | pods: 9 | cidrBlocks: 10 | - 192.168.0.0/16 11 | controlPlaneRef: 12 | apiVersion: controlplane.cluster.x-k8s.io/v1beta1 13 | kind: KubeadmControlPlane 14 | name: capi-quickstart-control-plane 15 | infrastructureRef: 16 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 17 | kind: AWSCluster 18 | name: capi-quickstart 19 | -------------------------------------------------------------------------------- /charts/capi-aws/templates/kubeadm-control-plane.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: controlplane.cluster.x-k8s.io/v1beta1 2 | kind: KubeadmControlPlane 3 | metadata: 4 | name: capi-quickstart-control-plane 5 | namespace: default 6 | spec: 7 | kubeadmConfigSpec: 8 | clusterConfiguration: 9 | apiServer: 10 | extraArgs: 11 | cloud-provider: aws 12 | controllerManager: 13 | extraArgs: 14 | cloud-provider: aws 15 | initConfiguration: 16 | nodeRegistration: 17 | kubeletExtraArgs: 18 | cloud-provider: aws 19 | name: {{`'{{ ds.meta_data.local_hostname }}'`}} 20 | joinConfiguration: 21 | nodeRegistration: 22 | kubeletExtraArgs: 23 | cloud-provider: aws 24 | name: {{`'{{ ds.meta_data.local_hostname }}'`}} 25 | machineTemplate: 26 | infrastructureRef: 27 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 28 | kind: AWSMachineTemplate 29 | name: capi-quickstart-control-plane 30 | replicas: {{ .Values.controlPlane.replicas }} 31 | version: {{ .Values.kube.version }} 32 | -------------------------------------------------------------------------------- /charts/capi-aws/templates/kubeadm-nodes.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 2 | kind: KubeadmConfigTemplate 3 | metadata: 4 | name: capi-quickstart-md-0 5 | namespace: default 6 | spec: 7 | template: 8 | spec: 9 | joinConfiguration: 10 | nodeRegistration: 11 | kubeletExtraArgs: 12 | cloud-provider: aws 13 | name: {{`'{{ ds.meta_data.local_hostname }}'`}} 14 | -------------------------------------------------------------------------------- /charts/capi-aws/templates/machine-deployment-nodes.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cluster.x-k8s.io/v1beta1 2 | kind: MachineDeployment 3 | metadata: 4 | name: capi-quickstart-md-0 5 | namespace: default 6 | spec: 7 | clusterName: capi-quickstart 8 | replicas: {{ .Values.workers.replicas }} 9 | selector: 10 | matchLabels: null 11 | template: 12 | spec: 13 | bootstrap: 14 | configRef: 15 | apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 16 | kind: KubeadmConfigTemplate 17 | name: capi-quickstart-md-0 18 | clusterName: capi-quickstart 19 | infrastructureRef: 20 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 21 | kind: AWSMachineTemplate 22 | name: capi-quickstart-md-0 23 | version: {{ .Values.kube.version }} 24 | -------------------------------------------------------------------------------- /charts/capi-aws/templates/machine-template-control-plane.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 2 | kind: AWSMachineTemplate 3 | metadata: 4 | name: capi-quickstart-control-plane 5 | namespace: default 6 | spec: 7 | template: 8 | spec: 9 | iamInstanceProfile: control-plane.cluster-api-provider-aws.sigs.k8s.io 10 | instanceType: t3.large 11 | sshKeyName: default 12 | -------------------------------------------------------------------------------- /charts/capi-aws/templates/machine-template-nodes.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 2 | kind: AWSMachineTemplate 3 | metadata: 4 | name: capi-quickstart-md-0 5 | namespace: default 6 | spec: 7 | template: 8 | spec: 9 | iamInstanceProfile: nodes.cluster-api-provider-aws.sigs.k8s.io 10 | instanceType: t3.large 11 | sshKeyName: default 12 | -------------------------------------------------------------------------------- /charts/capi-aws/values-demo.yaml: -------------------------------------------------------------------------------- 1 | kube: 2 | version: v1.24.0 3 | 4 | controlPlane: 5 | replicas: 3 6 | 7 | workers: 8 | replicas: 5 9 | -------------------------------------------------------------------------------- /charts/capi-aws/values.yaml: -------------------------------------------------------------------------------- 1 | kube: 2 | version: v1.24.0 3 | 4 | controlPlane: 5 | replicas: 3 6 | 7 | workers: 8 | replicas: 1 9 | -------------------------------------------------------------------------------- /flux/capi/README.md: -------------------------------------------------------------------------------- 1 | ## Initialize Flux 2 | 3 | ```yaml 4 | flux bootstrap github \ 5 | --owner=$GITHUB_USER \ 6 | --repository=cluster-api-helm-chart \ 7 | --branch=main \ 8 | --path=./flux/capi \ 9 | --personal 10 | ``` 11 | 12 | FYI: Flux identified changes whithin a Helm chart if the chart version is bumped. Issue [here](https://github.com/fluxcd/flux2/discussions/965). 13 | -------------------------------------------------------------------------------- /flux/capi/capi-release.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: helm.toolkit.fluxcd.io/v2beta1 2 | kind: HelmRelease 3 | metadata: 4 | name: capi-aws 5 | spec: 6 | interval: 30s 7 | chart: 8 | spec: 9 | chart: ./charts/capi-aws 10 | sourceRef: 11 | kind: GitRepository 12 | name: capi-aws 13 | interval: 1m 14 | valuesFiles: 15 | - charts/capi-aws/values-demo.yaml 16 | -------------------------------------------------------------------------------- /flux/capi/capi-source.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: source.toolkit.fluxcd.io/v1beta1 3 | kind: GitRepository 4 | metadata: 5 | name: capi-aws 6 | spec: 7 | interval: 29s 8 | ref: 9 | branch: main 10 | url: https://github.com/kgamanji/cluster-api-helm-chart 11 | -------------------------------------------------------------------------------- /flux/capi/flux-system/gotk-components.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | labels: 5 | app.kubernetes.io/instance: flux-system 6 | app.kubernetes.io/part-of: flux 7 | app.kubernetes.io/version: v0.13.1 8 | name: flux-system 9 | --- 10 | apiVersion: apiextensions.k8s.io/v1 11 | kind: CustomResourceDefinition 12 | metadata: 13 | annotations: 14 | controller-gen.kubebuilder.io/version: v0.4.1 15 | creationTimestamp: null 16 | labels: 17 | app.kubernetes.io/instance: flux-system 18 | app.kubernetes.io/part-of: flux 19 | app.kubernetes.io/version: v0.13.1 20 | name: alerts.notification.toolkit.fluxcd.io 21 | spec: 22 | group: notification.toolkit.fluxcd.io 23 | names: 24 | kind: Alert 25 | listKind: AlertList 26 | plural: alerts 27 | singular: alert 28 | scope: Namespaced 29 | versions: 30 | - additionalPrinterColumns: 31 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 32 | name: Ready 33 | type: string 34 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 35 | name: Status 36 | type: string 37 | - jsonPath: .metadata.creationTimestamp 38 | name: Age 39 | type: date 40 | name: v1beta1 41 | schema: 42 | openAPIV3Schema: 43 | description: Alert is the Schema for the alerts API 44 | properties: 45 | apiVersion: 46 | 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' 47 | type: string 48 | kind: 49 | 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' 50 | type: string 51 | metadata: 52 | type: object 53 | spec: 54 | description: AlertSpec defines an alerting rule for events involving a list of objects 55 | properties: 56 | eventSeverity: 57 | default: info 58 | description: Filter events based on severity, defaults to ('info'). If set to 'info' no events will be filtered. 59 | enum: 60 | - info 61 | - error 62 | type: string 63 | eventSources: 64 | description: Filter events based on the involved objects. 65 | items: 66 | description: CrossNamespaceObjectReference contains enough information to let you locate the typed referenced object at cluster level 67 | properties: 68 | apiVersion: 69 | description: API version of the referent 70 | type: string 71 | kind: 72 | description: Kind of the referent 73 | enum: 74 | - Bucket 75 | - GitRepository 76 | - Kustomization 77 | - HelmRelease 78 | - HelmChart 79 | - HelmRepository 80 | - ImageRepository 81 | - ImagePolicy 82 | - ImageUpdateAutomation 83 | type: string 84 | name: 85 | description: Name of the referent 86 | maxLength: 53 87 | minLength: 1 88 | type: string 89 | namespace: 90 | description: Namespace of the referent 91 | maxLength: 53 92 | minLength: 1 93 | type: string 94 | required: 95 | - name 96 | type: object 97 | type: array 98 | exclusionList: 99 | description: A list of Golang regular expressions to be used for excluding messages. 100 | items: 101 | type: string 102 | type: array 103 | providerRef: 104 | description: Send events using this provider. 105 | properties: 106 | name: 107 | description: Name of the referent 108 | type: string 109 | required: 110 | - name 111 | type: object 112 | summary: 113 | description: Short description of the impact and affected cluster. 114 | type: string 115 | suspend: 116 | description: This flag tells the controller to suspend subsequent events dispatching. Defaults to false. 117 | type: boolean 118 | required: 119 | - eventSources 120 | - providerRef 121 | type: object 122 | status: 123 | description: AlertStatus defines the observed state of Alert 124 | properties: 125 | conditions: 126 | items: 127 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 128 | properties: 129 | lastTransitionTime: 130 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 131 | format: date-time 132 | type: string 133 | message: 134 | description: message is a human readable message indicating details about the transition. This may be an empty string. 135 | maxLength: 32768 136 | type: string 137 | observedGeneration: 138 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 139 | format: int64 140 | minimum: 0 141 | type: integer 142 | reason: 143 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 144 | maxLength: 1024 145 | minLength: 1 146 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 147 | type: string 148 | status: 149 | description: status of the condition, one of True, False, Unknown. 150 | enum: 151 | - "True" 152 | - "False" 153 | - Unknown 154 | type: string 155 | type: 156 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 157 | maxLength: 316 158 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 159 | type: string 160 | required: 161 | - lastTransitionTime 162 | - message 163 | - reason 164 | - status 165 | - type 166 | type: object 167 | type: array 168 | observedGeneration: 169 | description: ObservedGeneration is the last observed generation. 170 | format: int64 171 | type: integer 172 | type: object 173 | type: object 174 | served: true 175 | storage: true 176 | subresources: 177 | status: {} 178 | status: 179 | acceptedNames: 180 | kind: "" 181 | plural: "" 182 | conditions: [] 183 | storedVersions: [] 184 | --- 185 | apiVersion: apiextensions.k8s.io/v1 186 | kind: CustomResourceDefinition 187 | metadata: 188 | annotations: 189 | controller-gen.kubebuilder.io/version: v0.4.1 190 | creationTimestamp: null 191 | labels: 192 | app.kubernetes.io/instance: flux-system 193 | app.kubernetes.io/part-of: flux 194 | app.kubernetes.io/version: v0.13.1 195 | name: buckets.source.toolkit.fluxcd.io 196 | spec: 197 | group: source.toolkit.fluxcd.io 198 | names: 199 | kind: Bucket 200 | listKind: BucketList 201 | plural: buckets 202 | singular: bucket 203 | scope: Namespaced 204 | versions: 205 | - additionalPrinterColumns: 206 | - jsonPath: .spec.url 207 | name: URL 208 | type: string 209 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 210 | name: Ready 211 | type: string 212 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 213 | name: Status 214 | type: string 215 | - jsonPath: .metadata.creationTimestamp 216 | name: Age 217 | type: date 218 | name: v1beta1 219 | schema: 220 | openAPIV3Schema: 221 | description: Bucket is the Schema for the buckets API 222 | properties: 223 | apiVersion: 224 | 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' 225 | type: string 226 | kind: 227 | 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' 228 | type: string 229 | metadata: 230 | type: object 231 | spec: 232 | description: BucketSpec defines the desired state of an S3 compatible bucket 233 | properties: 234 | bucketName: 235 | description: The bucket name. 236 | type: string 237 | endpoint: 238 | description: The bucket endpoint address. 239 | type: string 240 | ignore: 241 | description: Ignore overrides the set of excluded patterns in the .sourceignore format (which is the same as .gitignore). If not provided, a default will be used, consult the documentation for your version to find out what those are. 242 | type: string 243 | insecure: 244 | description: Insecure allows connecting to a non-TLS S3 HTTP endpoint. 245 | type: boolean 246 | interval: 247 | description: The interval at which to check for bucket updates. 248 | type: string 249 | provider: 250 | default: generic 251 | description: The S3 compatible storage provider name, default ('generic'). 252 | enum: 253 | - generic 254 | - aws 255 | type: string 256 | region: 257 | description: The bucket region. 258 | type: string 259 | secretRef: 260 | description: The name of the secret containing authentication credentials for the Bucket. 261 | properties: 262 | name: 263 | description: Name of the referent 264 | type: string 265 | required: 266 | - name 267 | type: object 268 | suspend: 269 | description: This flag tells the controller to suspend the reconciliation of this source. 270 | type: boolean 271 | timeout: 272 | default: 20s 273 | description: The timeout for download operations, defaults to 20s. 274 | type: string 275 | required: 276 | - bucketName 277 | - endpoint 278 | - interval 279 | type: object 280 | status: 281 | description: BucketStatus defines the observed state of a bucket 282 | properties: 283 | artifact: 284 | description: Artifact represents the output of the last successful Bucket sync. 285 | properties: 286 | checksum: 287 | description: Checksum is the SHA1 checksum of the artifact. 288 | type: string 289 | lastUpdateTime: 290 | description: LastUpdateTime is the timestamp corresponding to the last update of this artifact. 291 | format: date-time 292 | type: string 293 | path: 294 | description: Path is the relative file path of this artifact. 295 | type: string 296 | revision: 297 | description: Revision is a human readable identifier traceable in the origin source system. It can be a Git commit SHA, Git tag, a Helm index timestamp, a Helm chart version, etc. 298 | type: string 299 | url: 300 | description: URL is the HTTP address of this artifact. 301 | type: string 302 | required: 303 | - path 304 | - url 305 | type: object 306 | conditions: 307 | description: Conditions holds the conditions for the Bucket. 308 | items: 309 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 310 | properties: 311 | lastTransitionTime: 312 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 313 | format: date-time 314 | type: string 315 | message: 316 | description: message is a human readable message indicating details about the transition. This may be an empty string. 317 | maxLength: 32768 318 | type: string 319 | observedGeneration: 320 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 321 | format: int64 322 | minimum: 0 323 | type: integer 324 | reason: 325 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 326 | maxLength: 1024 327 | minLength: 1 328 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 329 | type: string 330 | status: 331 | description: status of the condition, one of True, False, Unknown. 332 | enum: 333 | - "True" 334 | - "False" 335 | - Unknown 336 | type: string 337 | type: 338 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 339 | maxLength: 316 340 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 341 | type: string 342 | required: 343 | - lastTransitionTime 344 | - message 345 | - reason 346 | - status 347 | - type 348 | type: object 349 | type: array 350 | lastHandledReconcileAt: 351 | description: LastHandledReconcileAt holds the value of the most recent reconcile request value, so a change can be detected. 352 | type: string 353 | observedGeneration: 354 | description: ObservedGeneration is the last observed generation. 355 | format: int64 356 | type: integer 357 | url: 358 | description: URL is the download link for the artifact output of the last Bucket sync. 359 | type: string 360 | type: object 361 | type: object 362 | served: true 363 | storage: true 364 | subresources: 365 | status: {} 366 | status: 367 | acceptedNames: 368 | kind: "" 369 | plural: "" 370 | conditions: [] 371 | storedVersions: [] 372 | --- 373 | apiVersion: apiextensions.k8s.io/v1 374 | kind: CustomResourceDefinition 375 | metadata: 376 | annotations: 377 | controller-gen.kubebuilder.io/version: v0.4.1 378 | creationTimestamp: null 379 | labels: 380 | app.kubernetes.io/instance: flux-system 381 | app.kubernetes.io/part-of: flux 382 | app.kubernetes.io/version: v0.13.1 383 | name: gitrepositories.source.toolkit.fluxcd.io 384 | spec: 385 | group: source.toolkit.fluxcd.io 386 | names: 387 | kind: GitRepository 388 | listKind: GitRepositoryList 389 | plural: gitrepositories 390 | shortNames: 391 | - gitrepo 392 | singular: gitrepository 393 | scope: Namespaced 394 | versions: 395 | - additionalPrinterColumns: 396 | - jsonPath: .spec.url 397 | name: URL 398 | type: string 399 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 400 | name: Ready 401 | type: string 402 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 403 | name: Status 404 | type: string 405 | - jsonPath: .metadata.creationTimestamp 406 | name: Age 407 | type: date 408 | name: v1beta1 409 | schema: 410 | openAPIV3Schema: 411 | description: GitRepository is the Schema for the gitrepositories API 412 | properties: 413 | apiVersion: 414 | 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' 415 | type: string 416 | kind: 417 | 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' 418 | type: string 419 | metadata: 420 | type: object 421 | spec: 422 | description: GitRepositorySpec defines the desired state of a Git repository. 423 | properties: 424 | gitImplementation: 425 | default: go-git 426 | description: Determines which git client library to use. Defaults to go-git, valid values are ('go-git', 'libgit2'). 427 | enum: 428 | - go-git 429 | - libgit2 430 | type: string 431 | ignore: 432 | description: Ignore overrides the set of excluded patterns in the .sourceignore format (which is the same as .gitignore). If not provided, a default will be used, consult the documentation for your version to find out what those are. 433 | type: string 434 | interval: 435 | description: The interval at which to check for repository updates. 436 | type: string 437 | recurseSubmodules: 438 | description: When enabled, after the clone is created, initializes all submodules within, using their default settings. This option is available only when using the 'go-git' GitImplementation. 439 | type: boolean 440 | ref: 441 | description: The Git reference to checkout and monitor for changes, defaults to master branch. 442 | properties: 443 | branch: 444 | default: master 445 | description: The Git branch to checkout, defaults to master. 446 | type: string 447 | commit: 448 | description: The Git commit SHA to checkout, if specified Tag filters will be ignored. 449 | type: string 450 | semver: 451 | description: The Git tag semver expression, takes precedence over Tag. 452 | type: string 453 | tag: 454 | description: The Git tag to checkout, takes precedence over Branch. 455 | type: string 456 | type: object 457 | secretRef: 458 | description: The secret name containing the Git credentials. For HTTPS repositories the secret must contain username and password fields. For SSH repositories the secret must contain identity, identity.pub and known_hosts fields. 459 | properties: 460 | name: 461 | description: Name of the referent 462 | type: string 463 | required: 464 | - name 465 | type: object 466 | suspend: 467 | description: This flag tells the controller to suspend the reconciliation of this source. 468 | type: boolean 469 | timeout: 470 | default: 20s 471 | description: The timeout for remote Git operations like cloning, defaults to 20s. 472 | type: string 473 | url: 474 | description: The repository URL, can be a HTTP/S or SSH address. 475 | pattern: ^(http|https|ssh):// 476 | type: string 477 | verify: 478 | description: Verify OpenPGP signature for the Git commit HEAD points to. 479 | properties: 480 | mode: 481 | description: Mode describes what git object should be verified, currently ('head'). 482 | enum: 483 | - head 484 | type: string 485 | secretRef: 486 | description: The secret name containing the public keys of all trusted Git authors. 487 | properties: 488 | name: 489 | description: Name of the referent 490 | type: string 491 | required: 492 | - name 493 | type: object 494 | required: 495 | - mode 496 | type: object 497 | required: 498 | - interval 499 | - url 500 | type: object 501 | status: 502 | description: GitRepositoryStatus defines the observed state of a Git repository. 503 | properties: 504 | artifact: 505 | description: Artifact represents the output of the last successful repository sync. 506 | properties: 507 | checksum: 508 | description: Checksum is the SHA1 checksum of the artifact. 509 | type: string 510 | lastUpdateTime: 511 | description: LastUpdateTime is the timestamp corresponding to the last update of this artifact. 512 | format: date-time 513 | type: string 514 | path: 515 | description: Path is the relative file path of this artifact. 516 | type: string 517 | revision: 518 | description: Revision is a human readable identifier traceable in the origin source system. It can be a Git commit SHA, Git tag, a Helm index timestamp, a Helm chart version, etc. 519 | type: string 520 | url: 521 | description: URL is the HTTP address of this artifact. 522 | type: string 523 | required: 524 | - path 525 | - url 526 | type: object 527 | conditions: 528 | description: Conditions holds the conditions for the GitRepository. 529 | items: 530 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 531 | properties: 532 | lastTransitionTime: 533 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 534 | format: date-time 535 | type: string 536 | message: 537 | description: message is a human readable message indicating details about the transition. This may be an empty string. 538 | maxLength: 32768 539 | type: string 540 | observedGeneration: 541 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 542 | format: int64 543 | minimum: 0 544 | type: integer 545 | reason: 546 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 547 | maxLength: 1024 548 | minLength: 1 549 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 550 | type: string 551 | status: 552 | description: status of the condition, one of True, False, Unknown. 553 | enum: 554 | - "True" 555 | - "False" 556 | - Unknown 557 | type: string 558 | type: 559 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 560 | maxLength: 316 561 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 562 | type: string 563 | required: 564 | - lastTransitionTime 565 | - message 566 | - reason 567 | - status 568 | - type 569 | type: object 570 | type: array 571 | lastHandledReconcileAt: 572 | description: LastHandledReconcileAt holds the value of the most recent reconcile request value, so a change can be detected. 573 | type: string 574 | observedGeneration: 575 | description: ObservedGeneration is the last observed generation. 576 | format: int64 577 | type: integer 578 | url: 579 | description: URL is the download link for the artifact output of the last repository sync. 580 | type: string 581 | type: object 582 | type: object 583 | served: true 584 | storage: true 585 | subresources: 586 | status: {} 587 | status: 588 | acceptedNames: 589 | kind: "" 590 | plural: "" 591 | conditions: [] 592 | storedVersions: [] 593 | --- 594 | apiVersion: apiextensions.k8s.io/v1 595 | kind: CustomResourceDefinition 596 | metadata: 597 | annotations: 598 | controller-gen.kubebuilder.io/version: v0.4.1 599 | creationTimestamp: null 600 | labels: 601 | app.kubernetes.io/instance: flux-system 602 | app.kubernetes.io/part-of: flux 603 | app.kubernetes.io/version: v0.13.1 604 | name: helmcharts.source.toolkit.fluxcd.io 605 | spec: 606 | group: source.toolkit.fluxcd.io 607 | names: 608 | kind: HelmChart 609 | listKind: HelmChartList 610 | plural: helmcharts 611 | shortNames: 612 | - hc 613 | singular: helmchart 614 | scope: Namespaced 615 | versions: 616 | - additionalPrinterColumns: 617 | - jsonPath: .spec.chart 618 | name: Chart 619 | type: string 620 | - jsonPath: .spec.version 621 | name: Version 622 | type: string 623 | - jsonPath: .spec.sourceRef.kind 624 | name: Source Kind 625 | type: string 626 | - jsonPath: .spec.sourceRef.name 627 | name: Source Name 628 | type: string 629 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 630 | name: Ready 631 | type: string 632 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 633 | name: Status 634 | type: string 635 | - jsonPath: .metadata.creationTimestamp 636 | name: Age 637 | type: date 638 | name: v1beta1 639 | schema: 640 | openAPIV3Schema: 641 | description: HelmChart is the Schema for the helmcharts API 642 | properties: 643 | apiVersion: 644 | 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' 645 | type: string 646 | kind: 647 | 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' 648 | type: string 649 | metadata: 650 | type: object 651 | spec: 652 | description: HelmChartSpec defines the desired state of a Helm chart. 653 | properties: 654 | chart: 655 | description: The name or path the Helm chart is available at in the SourceRef. 656 | type: string 657 | interval: 658 | description: The interval at which to check the Source for updates. 659 | type: string 660 | sourceRef: 661 | description: The reference to the Source the chart is available at. 662 | properties: 663 | apiVersion: 664 | description: APIVersion of the referent. 665 | type: string 666 | kind: 667 | description: Kind of the referent, valid values are ('HelmRepository', 'GitRepository', 'Bucket'). 668 | enum: 669 | - HelmRepository 670 | - GitRepository 671 | - Bucket 672 | type: string 673 | name: 674 | description: Name of the referent. 675 | type: string 676 | required: 677 | - kind 678 | - name 679 | type: object 680 | suspend: 681 | description: This flag tells the controller to suspend the reconciliation of this source. 682 | type: boolean 683 | valuesFile: 684 | description: Alternative values file to use as the default chart values, expected to be a relative path in the SourceRef. Deprecated in favor of ValuesFiles, for backwards compatibility the file defined here is merged before the ValuesFiles items. Ignored when omitted. 685 | type: string 686 | valuesFiles: 687 | description: Alternative list of values files to use as the chart values (values.yaml is not included by default), expected to be a relative path in the SourceRef. Values files are merged in the order of this list with the last file overriding the first. Ignored when omitted. 688 | items: 689 | type: string 690 | type: array 691 | version: 692 | default: '*' 693 | description: The chart version semver expression, ignored for charts from GitRepository and Bucket sources. Defaults to latest when omitted. 694 | type: string 695 | required: 696 | - chart 697 | - interval 698 | - sourceRef 699 | type: object 700 | status: 701 | description: HelmChartStatus defines the observed state of the HelmChart. 702 | properties: 703 | artifact: 704 | description: Artifact represents the output of the last successful chart sync. 705 | properties: 706 | checksum: 707 | description: Checksum is the SHA1 checksum of the artifact. 708 | type: string 709 | lastUpdateTime: 710 | description: LastUpdateTime is the timestamp corresponding to the last update of this artifact. 711 | format: date-time 712 | type: string 713 | path: 714 | description: Path is the relative file path of this artifact. 715 | type: string 716 | revision: 717 | description: Revision is a human readable identifier traceable in the origin source system. It can be a Git commit SHA, Git tag, a Helm index timestamp, a Helm chart version, etc. 718 | type: string 719 | url: 720 | description: URL is the HTTP address of this artifact. 721 | type: string 722 | required: 723 | - path 724 | - url 725 | type: object 726 | conditions: 727 | description: Conditions holds the conditions for the HelmChart. 728 | items: 729 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 730 | properties: 731 | lastTransitionTime: 732 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 733 | format: date-time 734 | type: string 735 | message: 736 | description: message is a human readable message indicating details about the transition. This may be an empty string. 737 | maxLength: 32768 738 | type: string 739 | observedGeneration: 740 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 741 | format: int64 742 | minimum: 0 743 | type: integer 744 | reason: 745 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 746 | maxLength: 1024 747 | minLength: 1 748 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 749 | type: string 750 | status: 751 | description: status of the condition, one of True, False, Unknown. 752 | enum: 753 | - "True" 754 | - "False" 755 | - Unknown 756 | type: string 757 | type: 758 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 759 | maxLength: 316 760 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 761 | type: string 762 | required: 763 | - lastTransitionTime 764 | - message 765 | - reason 766 | - status 767 | - type 768 | type: object 769 | type: array 770 | lastHandledReconcileAt: 771 | description: LastHandledReconcileAt holds the value of the most recent reconcile request value, so a change can be detected. 772 | type: string 773 | observedGeneration: 774 | description: ObservedGeneration is the last observed generation. 775 | format: int64 776 | type: integer 777 | url: 778 | description: URL is the download link for the last chart pulled. 779 | type: string 780 | type: object 781 | type: object 782 | served: true 783 | storage: true 784 | subresources: 785 | status: {} 786 | status: 787 | acceptedNames: 788 | kind: "" 789 | plural: "" 790 | conditions: [] 791 | storedVersions: [] 792 | --- 793 | apiVersion: apiextensions.k8s.io/v1 794 | kind: CustomResourceDefinition 795 | metadata: 796 | annotations: 797 | controller-gen.kubebuilder.io/version: v0.4.1 798 | creationTimestamp: null 799 | labels: 800 | app.kubernetes.io/instance: flux-system 801 | app.kubernetes.io/part-of: flux 802 | app.kubernetes.io/version: v0.13.1 803 | name: helmreleases.helm.toolkit.fluxcd.io 804 | spec: 805 | group: helm.toolkit.fluxcd.io 806 | names: 807 | kind: HelmRelease 808 | listKind: HelmReleaseList 809 | plural: helmreleases 810 | shortNames: 811 | - hr 812 | singular: helmrelease 813 | scope: Namespaced 814 | versions: 815 | - additionalPrinterColumns: 816 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 817 | name: Ready 818 | type: string 819 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 820 | name: Status 821 | type: string 822 | - jsonPath: .metadata.creationTimestamp 823 | name: Age 824 | type: date 825 | name: v2beta1 826 | schema: 827 | openAPIV3Schema: 828 | description: HelmRelease is the Schema for the helmreleases API 829 | properties: 830 | apiVersion: 831 | 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' 832 | type: string 833 | kind: 834 | 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' 835 | type: string 836 | metadata: 837 | type: object 838 | spec: 839 | description: HelmReleaseSpec defines the desired state of a Helm release. 840 | properties: 841 | chart: 842 | description: Chart defines the template of the v1beta1.HelmChart that should be created for this HelmRelease. 843 | properties: 844 | spec: 845 | description: Spec holds the template for the v1beta1.HelmChartSpec for this HelmRelease. 846 | properties: 847 | chart: 848 | description: The name or path the Helm chart is available at in the SourceRef. 849 | type: string 850 | interval: 851 | description: Interval at which to check the v1beta1.Source for updates. Defaults to 'HelmReleaseSpec.Interval'. 852 | type: string 853 | sourceRef: 854 | description: The name and namespace of the v1beta1.Source the chart is available at. 855 | properties: 856 | apiVersion: 857 | description: APIVersion of the referent. 858 | type: string 859 | kind: 860 | description: Kind of the referent. 861 | enum: 862 | - HelmRepository 863 | - GitRepository 864 | - Bucket 865 | type: string 866 | name: 867 | description: Name of the referent. 868 | maxLength: 253 869 | minLength: 1 870 | type: string 871 | namespace: 872 | description: Namespace of the referent. 873 | maxLength: 63 874 | minLength: 1 875 | type: string 876 | required: 877 | - name 878 | type: object 879 | valuesFile: 880 | description: Alternative values file to use as the default chart values, expected to be a relative path in the SourceRef. Deprecated in favor of ValuesFiles, for backwards compatibility the file defined here is merged before the ValuesFiles items. Ignored when omitted. 881 | type: string 882 | valuesFiles: 883 | description: Alternative list of values files to use as the chart values (values.yaml is not included by default), expected to be a relative path in the SourceRef. Values files are merged in the order of this list with the last file overriding the first. Ignored when omitted. 884 | items: 885 | type: string 886 | type: array 887 | version: 888 | default: '*' 889 | description: Version semver expression, ignored for charts from v1beta1.GitRepository and v1beta1.Bucket sources. Defaults to latest when omitted. 890 | type: string 891 | required: 892 | - chart 893 | - sourceRef 894 | type: object 895 | required: 896 | - spec 897 | type: object 898 | dependsOn: 899 | description: DependsOn may contain a dependency.CrossNamespaceDependencyReference slice with references to HelmRelease resources that must be ready before this HelmRelease can be reconciled. 900 | items: 901 | description: CrossNamespaceDependencyReference holds the reference to a dependency. 902 | properties: 903 | name: 904 | description: Name holds the name reference of a dependency. 905 | type: string 906 | namespace: 907 | description: Namespace holds the namespace reference of a dependency. 908 | type: string 909 | required: 910 | - name 911 | type: object 912 | type: array 913 | install: 914 | description: Install holds the configuration for Helm install actions for this HelmRelease. 915 | properties: 916 | crds: 917 | description: "CRDs upgrade CRDs from the Helm Chart's crds directory according to the CRD upgrade policy provided here. Valid values are `Skip`, `Create` or `CreateReplace`. Default is `Create` and if omitted CRDs are installed but not updated. \n Skip: do neither install nor replace (update) any CRDs. \n Create: new CRDs are created, existing CRDs are neither updated nor deleted. \n CreateReplace: new CRDs are created, existing CRDs are updated (replaced) but not deleted. \n By default, CRDs are applied (installed) during Helm install action. With this option users can opt-in to CRD replace existing CRDs on Helm install actions, which is not (yet) natively supported by Helm. https://helm.sh/docs/chart_best_practices/custom_resource_definitions." 918 | enum: 919 | - Skip 920 | - Create 921 | - CreateReplace 922 | type: string 923 | createNamespace: 924 | description: CreateNamespace tells the Helm install action to create the HelmReleaseSpec.TargetNamespace if it does not exist yet. On uninstall, the namespace will not be garbage collected. 925 | type: boolean 926 | disableHooks: 927 | description: DisableHooks prevents hooks from running during the Helm install action. 928 | type: boolean 929 | disableOpenAPIValidation: 930 | description: DisableOpenAPIValidation prevents the Helm install action from validating rendered templates against the Kubernetes OpenAPI Schema. 931 | type: boolean 932 | disableWait: 933 | description: DisableWait disables the waiting for resources to be ready after a Helm install has been performed. 934 | type: boolean 935 | remediation: 936 | description: Remediation holds the remediation configuration for when the Helm install action for the HelmRelease fails. The default is to not perform any action. 937 | properties: 938 | ignoreTestFailures: 939 | description: IgnoreTestFailures tells the controller to skip remediation when the Helm tests are run after an install action but fail. Defaults to 'Test.IgnoreFailures'. 940 | type: boolean 941 | remediateLastFailure: 942 | description: RemediateLastFailure tells the controller to remediate the last failure, when no retries remain. Defaults to 'false'. 943 | type: boolean 944 | retries: 945 | description: Retries is the number of retries that should be attempted on failures before bailing. Remediation, using an uninstall, is performed between each attempt. Defaults to '0', a negative integer equals to unlimited retries. 946 | type: integer 947 | type: object 948 | replace: 949 | description: Replace tells the Helm install action to re-use the 'ReleaseName', but only if that name is a deleted release which remains in the history. 950 | type: boolean 951 | skipCRDs: 952 | description: "SkipCRDs tells the Helm install action to not install any CRDs. By default, CRDs are installed if not already present. \n Deprecated use CRD policy (`crds`) attribute with value `Skip` instead." 953 | type: boolean 954 | timeout: 955 | description: Timeout is the time to wait for any individual Kubernetes operation (like Jobs for hooks) during the performance of a Helm install action. Defaults to 'HelmReleaseSpec.Timeout'. 956 | type: string 957 | type: object 958 | interval: 959 | description: Interval at which to reconcile the Helm release. 960 | type: string 961 | kubeConfig: 962 | description: KubeConfig for reconciling the HelmRelease on a remote cluster. When specified, KubeConfig takes precedence over ServiceAccountName. 963 | properties: 964 | secretRef: 965 | description: SecretRef holds the name to a secret that contains a 'value' key with the kubeconfig file as the value. It must be in the same namespace as the HelmRelease. It is recommended that the kubeconfig is self-contained, and the secret is regularly updated if credentials such as a cloud-access-token expire. Cloud specific `cmd-path` auth helpers will not function without adding binaries and credentials to the Pod that is responsible for reconciling the HelmRelease. 966 | properties: 967 | name: 968 | description: Name of the referent 969 | type: string 970 | required: 971 | - name 972 | type: object 973 | type: object 974 | maxHistory: 975 | description: MaxHistory is the number of revisions saved by Helm for this HelmRelease. Use '0' for an unlimited number of revisions; defaults to '10'. 976 | type: integer 977 | postRenderers: 978 | description: PostRenderers holds an array of Helm PostRenderers, which will be applied in order of their definition. 979 | items: 980 | description: PostRenderer contains a Helm PostRenderer specification. 981 | properties: 982 | kustomize: 983 | description: Kustomization to apply as PostRenderer. 984 | properties: 985 | images: 986 | description: Images is a list of (image name, new name, new tag or digest) for changing image names, tags or digests. This can also be achieved with a patch, but this operator is simpler to specify. 987 | items: 988 | description: Image contains an image name, a new name, a new tag or digest, which will replace the original name and tag. 989 | properties: 990 | digest: 991 | description: Digest is the value used to replace the original image tag. If digest is present NewTag value is ignored. 992 | type: string 993 | name: 994 | description: Name is a tag-less image name. 995 | type: string 996 | newName: 997 | description: NewName is the value used to replace the original name. 998 | type: string 999 | newTag: 1000 | description: NewTag is the value used to replace the original tag. 1001 | type: string 1002 | required: 1003 | - name 1004 | type: object 1005 | type: array 1006 | patchesJson6902: 1007 | description: JSON 6902 patches, defined as inline YAML objects. 1008 | items: 1009 | description: JSON6902Patch contains a JSON6902 patch and the target the patch should be applied to. 1010 | properties: 1011 | patch: 1012 | description: Patch contains the JSON6902 patch document with an array of operation objects. 1013 | items: 1014 | description: JSON6902 is a JSON6902 operation object. https://tools.ietf.org/html/rfc6902#section-4 1015 | properties: 1016 | from: 1017 | type: string 1018 | op: 1019 | enum: 1020 | - test 1021 | - remove 1022 | - add 1023 | - replace 1024 | - move 1025 | - copy 1026 | type: string 1027 | path: 1028 | type: string 1029 | value: 1030 | x-kubernetes-preserve-unknown-fields: true 1031 | required: 1032 | - op 1033 | - path 1034 | type: object 1035 | type: array 1036 | target: 1037 | description: Target points to the resources that the patch document should be applied to. 1038 | properties: 1039 | annotationSelector: 1040 | description: AnnotationSelector is a string that follows the label selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api It matches with the resource annotations. 1041 | type: string 1042 | group: 1043 | description: Group is the API group to select resources from. Together with Version and Kind it is capable of unambiguously identifying and/or selecting resources. https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md 1044 | type: string 1045 | kind: 1046 | description: Kind of the API Group to select resources from. Together with Group and Version it is capable of unambiguously identifying and/or selecting resources. https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md 1047 | type: string 1048 | labelSelector: 1049 | description: LabelSelector is a string that follows the label selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api It matches with the resource labels. 1050 | type: string 1051 | name: 1052 | description: Name to match resources with. 1053 | type: string 1054 | namespace: 1055 | description: Namespace to select resources from. 1056 | type: string 1057 | version: 1058 | description: Version of the API Group to select resources from. Together with Group and Kind it is capable of unambiguously identifying and/or selecting resources. https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md 1059 | type: string 1060 | type: object 1061 | required: 1062 | - patch 1063 | - target 1064 | type: object 1065 | type: array 1066 | patchesStrategicMerge: 1067 | description: Strategic merge patches, defined as inline YAML objects. 1068 | items: 1069 | x-kubernetes-preserve-unknown-fields: true 1070 | type: array 1071 | type: object 1072 | type: object 1073 | type: array 1074 | releaseName: 1075 | description: ReleaseName used for the Helm release. Defaults to a composition of '[TargetNamespace-]Name'. 1076 | maxLength: 53 1077 | minLength: 1 1078 | type: string 1079 | rollback: 1080 | description: Rollback holds the configuration for Helm rollback actions for this HelmRelease. 1081 | properties: 1082 | cleanupOnFail: 1083 | description: CleanupOnFail allows deletion of new resources created during the Helm rollback action when it fails. 1084 | type: boolean 1085 | disableHooks: 1086 | description: DisableHooks prevents hooks from running during the Helm rollback action. 1087 | type: boolean 1088 | disableWait: 1089 | description: DisableWait disables the waiting for resources to be ready after a Helm rollback has been performed. 1090 | type: boolean 1091 | force: 1092 | description: Force forces resource updates through a replacement strategy. 1093 | type: boolean 1094 | recreate: 1095 | description: Recreate performs pod restarts for the resource if applicable. 1096 | type: boolean 1097 | timeout: 1098 | description: Timeout is the time to wait for any individual Kubernetes operation (like Jobs for hooks) during the performance of a Helm rollback action. Defaults to 'HelmReleaseSpec.Timeout'. 1099 | type: string 1100 | type: object 1101 | serviceAccountName: 1102 | description: The name of the Kubernetes service account to impersonate when reconciling this HelmRelease. 1103 | type: string 1104 | storageNamespace: 1105 | description: StorageNamespace used for the Helm storage. Defaults to the namespace of the HelmRelease. 1106 | maxLength: 63 1107 | minLength: 1 1108 | type: string 1109 | suspend: 1110 | description: Suspend tells the controller to suspend reconciliation for this HelmRelease, it does not apply to already started reconciliations. Defaults to false. 1111 | type: boolean 1112 | targetNamespace: 1113 | description: TargetNamespace to target when performing operations for the HelmRelease. Defaults to the namespace of the HelmRelease. 1114 | maxLength: 63 1115 | minLength: 1 1116 | type: string 1117 | test: 1118 | description: Test holds the configuration for Helm test actions for this HelmRelease. 1119 | properties: 1120 | enable: 1121 | description: Enable enables Helm test actions for this HelmRelease after an Helm install or upgrade action has been performed. 1122 | type: boolean 1123 | ignoreFailures: 1124 | description: IgnoreFailures tells the controller to skip remediation when the Helm tests are run but fail. Can be overwritten for tests run after install or upgrade actions in 'Install.IgnoreTestFailures' and 'Upgrade.IgnoreTestFailures'. 1125 | type: boolean 1126 | timeout: 1127 | description: Timeout is the time to wait for any individual Kubernetes operation during the performance of a Helm test action. Defaults to 'HelmReleaseSpec.Timeout'. 1128 | type: string 1129 | type: object 1130 | timeout: 1131 | description: Timeout is the time to wait for any individual Kubernetes operation (like Jobs for hooks) during the performance of a Helm action. Defaults to '5m0s'. 1132 | type: string 1133 | uninstall: 1134 | description: Uninstall holds the configuration for Helm uninstall actions for this HelmRelease. 1135 | properties: 1136 | disableHooks: 1137 | description: DisableHooks prevents hooks from running during the Helm rollback action. 1138 | type: boolean 1139 | keepHistory: 1140 | description: KeepHistory tells Helm to remove all associated resources and mark the release as deleted, but retain the release history. 1141 | type: boolean 1142 | timeout: 1143 | description: Timeout is the time to wait for any individual Kubernetes operation (like Jobs for hooks) during the performance of a Helm uninstall action. Defaults to 'HelmReleaseSpec.Timeout'. 1144 | type: string 1145 | type: object 1146 | upgrade: 1147 | description: Upgrade holds the configuration for Helm upgrade actions for this HelmRelease. 1148 | properties: 1149 | cleanupOnFail: 1150 | description: CleanupOnFail allows deletion of new resources created during the Helm upgrade action when it fails. 1151 | type: boolean 1152 | crds: 1153 | description: "CRDs upgrade CRDs from the Helm Chart's crds directory according to the CRD upgrade policy provided here. Valid values are `Skip`, `Create` or `CreateReplace`. Default is `Skip` and if omitted CRDs are neither installed nor upgraded. \n Skip: do neither install nor replace (update) any CRDs. \n Create: new CRDs are created, existing CRDs are neither updated nor deleted. \n CreateReplace: new CRDs are created, existing CRDs are updated (replaced) but not deleted. \n By default, CRDs are not applied during Helm upgrade action. With this option users can opt-in to CRD upgrade, which is not (yet) natively supported by Helm. https://helm.sh/docs/chart_best_practices/custom_resource_definitions." 1154 | enum: 1155 | - Skip 1156 | - Create 1157 | - CreateReplace 1158 | type: string 1159 | disableHooks: 1160 | description: DisableHooks prevents hooks from running during the Helm upgrade action. 1161 | type: boolean 1162 | disableOpenAPIValidation: 1163 | description: DisableOpenAPIValidation prevents the Helm upgrade action from validating rendered templates against the Kubernetes OpenAPI Schema. 1164 | type: boolean 1165 | disableWait: 1166 | description: DisableWait disables the waiting for resources to be ready after a Helm upgrade has been performed. 1167 | type: boolean 1168 | force: 1169 | description: Force forces resource updates through a replacement strategy. 1170 | type: boolean 1171 | preserveValues: 1172 | description: PreserveValues will make Helm reuse the last release's values and merge in overrides from 'Values'. Setting this flag makes the HelmRelease non-declarative. 1173 | type: boolean 1174 | remediation: 1175 | description: Remediation holds the remediation configuration for when the Helm upgrade action for the HelmRelease fails. The default is to not perform any action. 1176 | properties: 1177 | ignoreTestFailures: 1178 | description: IgnoreTestFailures tells the controller to skip remediation when the Helm tests are run after an upgrade action but fail. Defaults to 'Test.IgnoreFailures'. 1179 | type: boolean 1180 | remediateLastFailure: 1181 | description: RemediateLastFailure tells the controller to remediate the last failure, when no retries remain. Defaults to 'false' unless 'Retries' is greater than 0. 1182 | type: boolean 1183 | retries: 1184 | description: Retries is the number of retries that should be attempted on failures before bailing. Remediation, using 'Strategy', is performed between each attempt. Defaults to '0', a negative integer equals to unlimited retries. 1185 | type: integer 1186 | strategy: 1187 | description: Strategy to use for failure remediation. Defaults to 'rollback'. 1188 | enum: 1189 | - rollback 1190 | - uninstall 1191 | type: string 1192 | type: object 1193 | timeout: 1194 | description: Timeout is the time to wait for any individual Kubernetes operation (like Jobs for hooks) during the performance of a Helm upgrade action. Defaults to 'HelmReleaseSpec.Timeout'. 1195 | type: string 1196 | type: object 1197 | values: 1198 | description: Values holds the values for this Helm release. 1199 | x-kubernetes-preserve-unknown-fields: true 1200 | valuesFrom: 1201 | description: ValuesFrom holds references to resources containing Helm values for this HelmRelease, and information about how they should be merged. 1202 | items: 1203 | description: ValuesReference contains a reference to a resource containing Helm values, and optionally the key they can be found at. 1204 | properties: 1205 | kind: 1206 | description: Kind of the values referent, valid values are ('Secret', 'ConfigMap'). 1207 | enum: 1208 | - Secret 1209 | - ConfigMap 1210 | type: string 1211 | name: 1212 | description: Name of the values referent. Should reside in the same namespace as the referring resource. 1213 | maxLength: 253 1214 | minLength: 1 1215 | type: string 1216 | optional: 1217 | description: Optional marks this ValuesReference as optional. When set, a not found error for the values reference is ignored, but any ValuesKey, TargetPath or transient error will still result in a reconciliation failure. 1218 | type: boolean 1219 | targetPath: 1220 | description: TargetPath is the YAML dot notation path the value should be merged at. When set, the ValuesKey is expected to be a single flat value. Defaults to 'None', which results in the values getting merged at the root. 1221 | type: string 1222 | valuesKey: 1223 | description: ValuesKey is the data key where the values.yaml or a specific value can be found at. Defaults to 'values.yaml'. 1224 | type: string 1225 | required: 1226 | - kind 1227 | - name 1228 | type: object 1229 | type: array 1230 | required: 1231 | - chart 1232 | - interval 1233 | type: object 1234 | status: 1235 | description: HelmReleaseStatus defines the observed state of a HelmRelease. 1236 | properties: 1237 | conditions: 1238 | description: Conditions holds the conditions for the HelmRelease. 1239 | items: 1240 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 1241 | properties: 1242 | lastTransitionTime: 1243 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 1244 | format: date-time 1245 | type: string 1246 | message: 1247 | description: message is a human readable message indicating details about the transition. This may be an empty string. 1248 | maxLength: 32768 1249 | type: string 1250 | observedGeneration: 1251 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 1252 | format: int64 1253 | minimum: 0 1254 | type: integer 1255 | reason: 1256 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 1257 | maxLength: 1024 1258 | minLength: 1 1259 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 1260 | type: string 1261 | status: 1262 | description: status of the condition, one of True, False, Unknown. 1263 | enum: 1264 | - "True" 1265 | - "False" 1266 | - Unknown 1267 | type: string 1268 | type: 1269 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 1270 | maxLength: 316 1271 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 1272 | type: string 1273 | required: 1274 | - lastTransitionTime 1275 | - message 1276 | - reason 1277 | - status 1278 | - type 1279 | type: object 1280 | type: array 1281 | failures: 1282 | description: Failures is the reconciliation failure count against the latest desired state. It is reset after a successful reconciliation. 1283 | format: int64 1284 | type: integer 1285 | helmChart: 1286 | description: HelmChart is the namespaced name of the HelmChart resource created by the controller for the HelmRelease. 1287 | type: string 1288 | installFailures: 1289 | description: InstallFailures is the install failure count against the latest desired state. It is reset after a successful reconciliation. 1290 | format: int64 1291 | type: integer 1292 | lastAppliedRevision: 1293 | description: LastAppliedRevision is the revision of the last successfully applied source. 1294 | type: string 1295 | lastAttemptedRevision: 1296 | description: LastAttemptedRevision is the revision of the last reconciliation attempt. 1297 | type: string 1298 | lastAttemptedValuesChecksum: 1299 | description: LastAttemptedValuesChecksum is the SHA1 checksum of the values of the last reconciliation attempt. 1300 | type: string 1301 | lastHandledReconcileAt: 1302 | description: LastHandledReconcileAt holds the value of the most recent reconcile request value, so a change can be detected. 1303 | type: string 1304 | lastReleaseRevision: 1305 | description: LastReleaseRevision is the revision of the last successful Helm release. 1306 | type: integer 1307 | observedGeneration: 1308 | description: ObservedGeneration is the last observed generation. 1309 | format: int64 1310 | type: integer 1311 | upgradeFailures: 1312 | description: UpgradeFailures is the upgrade failure count against the latest desired state. It is reset after a successful reconciliation. 1313 | format: int64 1314 | type: integer 1315 | type: object 1316 | type: object 1317 | served: true 1318 | storage: true 1319 | subresources: 1320 | status: {} 1321 | status: 1322 | acceptedNames: 1323 | kind: "" 1324 | plural: "" 1325 | conditions: [] 1326 | storedVersions: [] 1327 | --- 1328 | apiVersion: apiextensions.k8s.io/v1 1329 | kind: CustomResourceDefinition 1330 | metadata: 1331 | annotations: 1332 | controller-gen.kubebuilder.io/version: v0.4.1 1333 | creationTimestamp: null 1334 | labels: 1335 | app.kubernetes.io/instance: flux-system 1336 | app.kubernetes.io/part-of: flux 1337 | app.kubernetes.io/version: v0.13.1 1338 | name: helmrepositories.source.toolkit.fluxcd.io 1339 | spec: 1340 | group: source.toolkit.fluxcd.io 1341 | names: 1342 | kind: HelmRepository 1343 | listKind: HelmRepositoryList 1344 | plural: helmrepositories 1345 | shortNames: 1346 | - helmrepo 1347 | singular: helmrepository 1348 | scope: Namespaced 1349 | versions: 1350 | - additionalPrinterColumns: 1351 | - jsonPath: .spec.url 1352 | name: URL 1353 | type: string 1354 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 1355 | name: Ready 1356 | type: string 1357 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 1358 | name: Status 1359 | type: string 1360 | - jsonPath: .metadata.creationTimestamp 1361 | name: Age 1362 | type: date 1363 | name: v1beta1 1364 | schema: 1365 | openAPIV3Schema: 1366 | description: HelmRepository is the Schema for the helmrepositories API 1367 | properties: 1368 | apiVersion: 1369 | 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' 1370 | type: string 1371 | kind: 1372 | 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' 1373 | type: string 1374 | metadata: 1375 | type: object 1376 | spec: 1377 | description: HelmRepositorySpec defines the reference to a Helm repository. 1378 | properties: 1379 | interval: 1380 | description: The interval at which to check the upstream for updates. 1381 | type: string 1382 | secretRef: 1383 | description: The name of the secret containing authentication credentials for the Helm repository. For HTTP/S basic auth the secret must contain username and password fields. For TLS the secret must contain a certFile and keyFile, and/or caCert fields. 1384 | properties: 1385 | name: 1386 | description: Name of the referent 1387 | type: string 1388 | required: 1389 | - name 1390 | type: object 1391 | suspend: 1392 | description: This flag tells the controller to suspend the reconciliation of this source. 1393 | type: boolean 1394 | timeout: 1395 | default: 60s 1396 | description: The timeout of index downloading, defaults to 60s. 1397 | type: string 1398 | url: 1399 | description: The Helm repository URL, a valid URL contains at least a protocol and host. 1400 | type: string 1401 | required: 1402 | - interval 1403 | - url 1404 | type: object 1405 | status: 1406 | description: HelmRepositoryStatus defines the observed state of the HelmRepository. 1407 | properties: 1408 | artifact: 1409 | description: Artifact represents the output of the last successful repository sync. 1410 | properties: 1411 | checksum: 1412 | description: Checksum is the SHA1 checksum of the artifact. 1413 | type: string 1414 | lastUpdateTime: 1415 | description: LastUpdateTime is the timestamp corresponding to the last update of this artifact. 1416 | format: date-time 1417 | type: string 1418 | path: 1419 | description: Path is the relative file path of this artifact. 1420 | type: string 1421 | revision: 1422 | description: Revision is a human readable identifier traceable in the origin source system. It can be a Git commit SHA, Git tag, a Helm index timestamp, a Helm chart version, etc. 1423 | type: string 1424 | url: 1425 | description: URL is the HTTP address of this artifact. 1426 | type: string 1427 | required: 1428 | - path 1429 | - url 1430 | type: object 1431 | conditions: 1432 | description: Conditions holds the conditions for the HelmRepository. 1433 | items: 1434 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 1435 | properties: 1436 | lastTransitionTime: 1437 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 1438 | format: date-time 1439 | type: string 1440 | message: 1441 | description: message is a human readable message indicating details about the transition. This may be an empty string. 1442 | maxLength: 32768 1443 | type: string 1444 | observedGeneration: 1445 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 1446 | format: int64 1447 | minimum: 0 1448 | type: integer 1449 | reason: 1450 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 1451 | maxLength: 1024 1452 | minLength: 1 1453 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 1454 | type: string 1455 | status: 1456 | description: status of the condition, one of True, False, Unknown. 1457 | enum: 1458 | - "True" 1459 | - "False" 1460 | - Unknown 1461 | type: string 1462 | type: 1463 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 1464 | maxLength: 316 1465 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 1466 | type: string 1467 | required: 1468 | - lastTransitionTime 1469 | - message 1470 | - reason 1471 | - status 1472 | - type 1473 | type: object 1474 | type: array 1475 | lastHandledReconcileAt: 1476 | description: LastHandledReconcileAt holds the value of the most recent reconcile request value, so a change can be detected. 1477 | type: string 1478 | observedGeneration: 1479 | description: ObservedGeneration is the last observed generation. 1480 | format: int64 1481 | type: integer 1482 | url: 1483 | description: URL is the download link for the last index fetched. 1484 | type: string 1485 | type: object 1486 | type: object 1487 | served: true 1488 | storage: true 1489 | subresources: 1490 | status: {} 1491 | status: 1492 | acceptedNames: 1493 | kind: "" 1494 | plural: "" 1495 | conditions: [] 1496 | storedVersions: [] 1497 | --- 1498 | apiVersion: apiextensions.k8s.io/v1 1499 | kind: CustomResourceDefinition 1500 | metadata: 1501 | annotations: 1502 | controller-gen.kubebuilder.io/version: v0.4.1 1503 | creationTimestamp: null 1504 | labels: 1505 | app.kubernetes.io/instance: flux-system 1506 | app.kubernetes.io/part-of: flux 1507 | app.kubernetes.io/version: v0.13.1 1508 | name: kustomizations.kustomize.toolkit.fluxcd.io 1509 | spec: 1510 | group: kustomize.toolkit.fluxcd.io 1511 | names: 1512 | kind: Kustomization 1513 | listKind: KustomizationList 1514 | plural: kustomizations 1515 | shortNames: 1516 | - ks 1517 | singular: kustomization 1518 | scope: Namespaced 1519 | versions: 1520 | - additionalPrinterColumns: 1521 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 1522 | name: Ready 1523 | type: string 1524 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 1525 | name: Status 1526 | type: string 1527 | - jsonPath: .metadata.creationTimestamp 1528 | name: Age 1529 | type: date 1530 | name: v1beta1 1531 | schema: 1532 | openAPIV3Schema: 1533 | description: Kustomization is the Schema for the kustomizations API. 1534 | properties: 1535 | apiVersion: 1536 | 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' 1537 | type: string 1538 | kind: 1539 | 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' 1540 | type: string 1541 | metadata: 1542 | type: object 1543 | spec: 1544 | description: KustomizationSpec defines the desired state of a kustomization. 1545 | properties: 1546 | decryption: 1547 | description: Decrypt Kubernetes secrets before applying them on the cluster. 1548 | properties: 1549 | provider: 1550 | description: Provider is the name of the decryption engine. 1551 | enum: 1552 | - sops 1553 | type: string 1554 | secretRef: 1555 | description: The secret name containing the private OpenPGP keys used for decryption. 1556 | properties: 1557 | name: 1558 | description: Name of the referent 1559 | type: string 1560 | required: 1561 | - name 1562 | type: object 1563 | required: 1564 | - provider 1565 | type: object 1566 | dependsOn: 1567 | description: DependsOn may contain a dependency.CrossNamespaceDependencyReference slice with references to Kustomization resources that must be ready before this Kustomization can be reconciled. 1568 | items: 1569 | description: CrossNamespaceDependencyReference holds the reference to a dependency. 1570 | properties: 1571 | name: 1572 | description: Name holds the name reference of a dependency. 1573 | type: string 1574 | namespace: 1575 | description: Namespace holds the namespace reference of a dependency. 1576 | type: string 1577 | required: 1578 | - name 1579 | type: object 1580 | type: array 1581 | force: 1582 | default: false 1583 | description: Force instructs the controller to recreate resources when patching fails due to an immutable field change. 1584 | type: boolean 1585 | healthChecks: 1586 | description: A list of resources to be included in the health assessment. 1587 | items: 1588 | description: NamespacedObjectKindReference contains enough information to let you locate the typed referenced object in any namespace 1589 | properties: 1590 | apiVersion: 1591 | description: API version of the referent, if not specified the Kubernetes preferred version will be used 1592 | type: string 1593 | kind: 1594 | description: Kind of the referent 1595 | type: string 1596 | name: 1597 | description: Name of the referent 1598 | type: string 1599 | namespace: 1600 | description: Namespace of the referent, when not specified it acts as LocalObjectReference 1601 | type: string 1602 | required: 1603 | - kind 1604 | - name 1605 | type: object 1606 | type: array 1607 | images: 1608 | description: Images is a list of (image name, new name, new tag or digest) for changing image names, tags or digests. This can also be achieved with a patch, but this operator is simpler to specify. 1609 | items: 1610 | description: Image contains an image name, a new name, a new tag or digest, which will replace the original name and tag. 1611 | properties: 1612 | digest: 1613 | description: Digest is the value used to replace the original image tag. If digest is present NewTag value is ignored. 1614 | type: string 1615 | name: 1616 | description: Name is a tag-less image name. 1617 | type: string 1618 | newName: 1619 | description: NewName is the value used to replace the original name. 1620 | type: string 1621 | newTag: 1622 | description: NewTag is the value used to replace the original tag. 1623 | type: string 1624 | required: 1625 | - name 1626 | type: object 1627 | type: array 1628 | interval: 1629 | description: The interval at which to reconcile the Kustomization. 1630 | type: string 1631 | kubeConfig: 1632 | description: The KubeConfig for reconciling the Kustomization on a remote cluster. When specified, KubeConfig takes precedence over ServiceAccountName. 1633 | properties: 1634 | secretRef: 1635 | description: SecretRef holds the name to a secret that contains a 'value' key with the kubeconfig file as the value. It must be in the same namespace as the Kustomization. It is recommended that the kubeconfig is self-contained, and the secret is regularly updated if credentials such as a cloud-access-token expire. Cloud specific `cmd-path` auth helpers will not function without adding binaries and credentials to the Pod that is responsible for reconciling the Kustomization. 1636 | properties: 1637 | name: 1638 | description: Name of the referent 1639 | type: string 1640 | required: 1641 | - name 1642 | type: object 1643 | type: object 1644 | patchesJson6902: 1645 | description: JSON 6902 patches, defined as inline YAML objects. 1646 | items: 1647 | description: JSON6902Patch contains a JSON6902 patch and the target the patch should be applied to. 1648 | properties: 1649 | patch: 1650 | description: Patch contains the JSON6902 patch document with an array of operation objects. 1651 | items: 1652 | description: JSON6902 is a JSON6902 operation object. https://tools.ietf.org/html/rfc6902#section-4 1653 | properties: 1654 | from: 1655 | type: string 1656 | op: 1657 | enum: 1658 | - test 1659 | - remove 1660 | - add 1661 | - replace 1662 | - move 1663 | - copy 1664 | type: string 1665 | path: 1666 | type: string 1667 | value: 1668 | x-kubernetes-preserve-unknown-fields: true 1669 | required: 1670 | - op 1671 | - path 1672 | type: object 1673 | type: array 1674 | target: 1675 | description: Target points to the resources that the patch document should be applied to. 1676 | properties: 1677 | annotationSelector: 1678 | description: AnnotationSelector is a string that follows the label selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api It matches with the resource annotations. 1679 | type: string 1680 | group: 1681 | description: Group is the API group to select resources from. Together with Version and Kind it is capable of unambiguously identifying and/or selecting resources. https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md 1682 | type: string 1683 | kind: 1684 | description: Kind of the API Group to select resources from. Together with Group and Version it is capable of unambiguously identifying and/or selecting resources. https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md 1685 | type: string 1686 | labelSelector: 1687 | description: LabelSelector is a string that follows the label selection expression https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api It matches with the resource labels. 1688 | type: string 1689 | name: 1690 | description: Name to match resources with. 1691 | type: string 1692 | namespace: 1693 | description: Namespace to select resources from. 1694 | type: string 1695 | version: 1696 | description: Version of the API Group to select resources from. Together with Group and Kind it is capable of unambiguously identifying and/or selecting resources. https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md 1697 | type: string 1698 | type: object 1699 | required: 1700 | - patch 1701 | - target 1702 | type: object 1703 | type: array 1704 | patchesStrategicMerge: 1705 | description: Strategic merge patches, defined as inline YAML objects. 1706 | items: 1707 | x-kubernetes-preserve-unknown-fields: true 1708 | type: array 1709 | path: 1710 | description: Path to the directory containing the kustomization.yaml file, or the set of plain YAMLs a kustomization.yaml should be generated for. Defaults to 'None', which translates to the root path of the SourceRef. 1711 | type: string 1712 | postBuild: 1713 | description: PostBuild describes which actions to perform on the YAML manifest generated by building the kustomize overlay. 1714 | properties: 1715 | substitute: 1716 | additionalProperties: 1717 | type: string 1718 | description: Substitute holds a map of key/value pairs. The variables defined in your YAML manifests that match any of the keys defined in the map will be substituted with the set value. Includes support for bash string replacement functions e.g. ${var:=default}, ${var:position} and ${var/substring/replacement}. 1719 | type: object 1720 | substituteFrom: 1721 | description: SubstituteFrom holds references to ConfigMaps and Secrets containing the variables and their values to be substituted in the YAML manifests. The ConfigMap and the Secret data keys represent the var names and they must match the vars declared in the manifests for the substitution to happen. 1722 | items: 1723 | description: SubstituteReference contains a reference to a resource containing the variables name and value. 1724 | properties: 1725 | kind: 1726 | description: Kind of the values referent, valid values are ('Secret', 'ConfigMap'). 1727 | enum: 1728 | - Secret 1729 | - ConfigMap 1730 | type: string 1731 | name: 1732 | description: Name of the values referent. Should reside in the same namespace as the referring resource. 1733 | maxLength: 253 1734 | minLength: 1 1735 | type: string 1736 | required: 1737 | - kind 1738 | - name 1739 | type: object 1740 | type: array 1741 | type: object 1742 | prune: 1743 | description: Prune enables garbage collection. 1744 | type: boolean 1745 | retryInterval: 1746 | description: The interval at which to retry a previously failed reconciliation. When not specified, the controller uses the KustomizationSpec.Interval value to retry failures. 1747 | type: string 1748 | serviceAccountName: 1749 | description: The name of the Kubernetes service account to impersonate when reconciling this Kustomization. 1750 | type: string 1751 | sourceRef: 1752 | description: Reference of the source where the kustomization file is. 1753 | properties: 1754 | apiVersion: 1755 | description: API version of the referent 1756 | type: string 1757 | kind: 1758 | description: Kind of the referent 1759 | enum: 1760 | - GitRepository 1761 | - Bucket 1762 | type: string 1763 | name: 1764 | description: Name of the referent 1765 | type: string 1766 | namespace: 1767 | description: Namespace of the referent, defaults to the Kustomization namespace 1768 | type: string 1769 | required: 1770 | - kind 1771 | - name 1772 | type: object 1773 | suspend: 1774 | description: This flag tells the controller to suspend subsequent kustomize executions, it does not apply to already started executions. Defaults to false. 1775 | type: boolean 1776 | targetNamespace: 1777 | description: TargetNamespace sets or overrides the namespace in the kustomization.yaml file. 1778 | maxLength: 63 1779 | minLength: 1 1780 | type: string 1781 | timeout: 1782 | description: Timeout for validation, apply and health checking operations. Defaults to 'Interval' duration. 1783 | type: string 1784 | validation: 1785 | description: Validate the Kubernetes objects before applying them on the cluster. The validation strategy can be 'client' (local dry-run), 'server' (APIServer dry-run) or 'none'. When 'Force' is 'true', validation will fallback to 'client' if set to 'server' because server-side validation is not supported in this scenario. 1786 | enum: 1787 | - none 1788 | - client 1789 | - server 1790 | type: string 1791 | required: 1792 | - interval 1793 | - prune 1794 | - sourceRef 1795 | type: object 1796 | status: 1797 | description: KustomizationStatus defines the observed state of a kustomization. 1798 | properties: 1799 | conditions: 1800 | items: 1801 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 1802 | properties: 1803 | lastTransitionTime: 1804 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 1805 | format: date-time 1806 | type: string 1807 | message: 1808 | description: message is a human readable message indicating details about the transition. This may be an empty string. 1809 | maxLength: 32768 1810 | type: string 1811 | observedGeneration: 1812 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 1813 | format: int64 1814 | minimum: 0 1815 | type: integer 1816 | reason: 1817 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 1818 | maxLength: 1024 1819 | minLength: 1 1820 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 1821 | type: string 1822 | status: 1823 | description: status of the condition, one of True, False, Unknown. 1824 | enum: 1825 | - "True" 1826 | - "False" 1827 | - Unknown 1828 | type: string 1829 | type: 1830 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 1831 | maxLength: 316 1832 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 1833 | type: string 1834 | required: 1835 | - lastTransitionTime 1836 | - message 1837 | - reason 1838 | - status 1839 | - type 1840 | type: object 1841 | type: array 1842 | lastAppliedRevision: 1843 | description: The last successfully applied revision. The revision format for Git sources is /. 1844 | type: string 1845 | lastAttemptedRevision: 1846 | description: LastAttemptedRevision is the revision of the last reconciliation attempt. 1847 | type: string 1848 | lastHandledReconcileAt: 1849 | description: LastHandledReconcileAt holds the value of the most recent reconcile request value, so a change can be detected. 1850 | type: string 1851 | observedGeneration: 1852 | description: ObservedGeneration is the last reconciled generation. 1853 | format: int64 1854 | type: integer 1855 | snapshot: 1856 | description: The last successfully applied revision metadata. 1857 | properties: 1858 | checksum: 1859 | description: The manifests sha1 checksum. 1860 | type: string 1861 | entries: 1862 | description: A list of Kubernetes kinds grouped by namespace. 1863 | items: 1864 | description: Snapshot holds the metadata of namespaced Kubernetes objects 1865 | properties: 1866 | kinds: 1867 | additionalProperties: 1868 | type: string 1869 | description: The list of Kubernetes kinds. 1870 | type: object 1871 | namespace: 1872 | description: The namespace of this entry. 1873 | type: string 1874 | required: 1875 | - kinds 1876 | type: object 1877 | type: array 1878 | required: 1879 | - checksum 1880 | - entries 1881 | type: object 1882 | type: object 1883 | type: object 1884 | served: true 1885 | storage: true 1886 | subresources: 1887 | status: {} 1888 | status: 1889 | acceptedNames: 1890 | kind: "" 1891 | plural: "" 1892 | conditions: [] 1893 | storedVersions: [] 1894 | --- 1895 | apiVersion: apiextensions.k8s.io/v1 1896 | kind: CustomResourceDefinition 1897 | metadata: 1898 | annotations: 1899 | controller-gen.kubebuilder.io/version: v0.4.1 1900 | creationTimestamp: null 1901 | labels: 1902 | app.kubernetes.io/instance: flux-system 1903 | app.kubernetes.io/part-of: flux 1904 | app.kubernetes.io/version: v0.13.1 1905 | name: providers.notification.toolkit.fluxcd.io 1906 | spec: 1907 | group: notification.toolkit.fluxcd.io 1908 | names: 1909 | kind: Provider 1910 | listKind: ProviderList 1911 | plural: providers 1912 | singular: provider 1913 | scope: Namespaced 1914 | versions: 1915 | - additionalPrinterColumns: 1916 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 1917 | name: Ready 1918 | type: string 1919 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 1920 | name: Status 1921 | type: string 1922 | - jsonPath: .metadata.creationTimestamp 1923 | name: Age 1924 | type: date 1925 | name: v1beta1 1926 | schema: 1927 | openAPIV3Schema: 1928 | description: Provider is the Schema for the providers API 1929 | properties: 1930 | apiVersion: 1931 | 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' 1932 | type: string 1933 | kind: 1934 | 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' 1935 | type: string 1936 | metadata: 1937 | type: object 1938 | spec: 1939 | description: ProviderSpec defines the desired state of Provider 1940 | properties: 1941 | address: 1942 | description: HTTP/S webhook address of this provider 1943 | pattern: ^(http|https):// 1944 | type: string 1945 | certSecretRef: 1946 | description: CertSecretRef can be given the name of a secret containing a PEM-encoded CA certificate (`caFile`) 1947 | properties: 1948 | name: 1949 | description: Name of the referent 1950 | type: string 1951 | required: 1952 | - name 1953 | type: object 1954 | channel: 1955 | description: Alert channel for this provider 1956 | type: string 1957 | proxy: 1958 | description: HTTP/S address of the proxy 1959 | pattern: ^(http|https):// 1960 | type: string 1961 | secretRef: 1962 | description: Secret reference containing the provider webhook URL using "address" as data key 1963 | properties: 1964 | name: 1965 | description: Name of the referent 1966 | type: string 1967 | required: 1968 | - name 1969 | type: object 1970 | type: 1971 | description: Type of provider 1972 | enum: 1973 | - slack 1974 | - discord 1975 | - msteams 1976 | - rocket 1977 | - generic 1978 | - github 1979 | - gitlab 1980 | - bitbucket 1981 | - azuredevops 1982 | - googlechat 1983 | - webex 1984 | - sentry 1985 | type: string 1986 | username: 1987 | description: Bot username for this provider 1988 | type: string 1989 | required: 1990 | - type 1991 | type: object 1992 | status: 1993 | description: ProviderStatus defines the observed state of Provider 1994 | properties: 1995 | conditions: 1996 | items: 1997 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 1998 | properties: 1999 | lastTransitionTime: 2000 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 2001 | format: date-time 2002 | type: string 2003 | message: 2004 | description: message is a human readable message indicating details about the transition. This may be an empty string. 2005 | maxLength: 32768 2006 | type: string 2007 | observedGeneration: 2008 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 2009 | format: int64 2010 | minimum: 0 2011 | type: integer 2012 | reason: 2013 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 2014 | maxLength: 1024 2015 | minLength: 1 2016 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 2017 | type: string 2018 | status: 2019 | description: status of the condition, one of True, False, Unknown. 2020 | enum: 2021 | - "True" 2022 | - "False" 2023 | - Unknown 2024 | type: string 2025 | type: 2026 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 2027 | maxLength: 316 2028 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 2029 | type: string 2030 | required: 2031 | - lastTransitionTime 2032 | - message 2033 | - reason 2034 | - status 2035 | - type 2036 | type: object 2037 | type: array 2038 | type: object 2039 | type: object 2040 | served: true 2041 | storage: true 2042 | subresources: 2043 | status: {} 2044 | status: 2045 | acceptedNames: 2046 | kind: "" 2047 | plural: "" 2048 | conditions: [] 2049 | storedVersions: [] 2050 | --- 2051 | apiVersion: apiextensions.k8s.io/v1 2052 | kind: CustomResourceDefinition 2053 | metadata: 2054 | annotations: 2055 | controller-gen.kubebuilder.io/version: v0.4.1 2056 | creationTimestamp: null 2057 | labels: 2058 | app.kubernetes.io/instance: flux-system 2059 | app.kubernetes.io/part-of: flux 2060 | app.kubernetes.io/version: v0.13.1 2061 | name: receivers.notification.toolkit.fluxcd.io 2062 | spec: 2063 | group: notification.toolkit.fluxcd.io 2064 | names: 2065 | kind: Receiver 2066 | listKind: ReceiverList 2067 | plural: receivers 2068 | singular: receiver 2069 | scope: Namespaced 2070 | versions: 2071 | - additionalPrinterColumns: 2072 | - jsonPath: .status.conditions[?(@.type=="Ready")].status 2073 | name: Ready 2074 | type: string 2075 | - jsonPath: .status.conditions[?(@.type=="Ready")].message 2076 | name: Status 2077 | type: string 2078 | - jsonPath: .metadata.creationTimestamp 2079 | name: Age 2080 | type: date 2081 | name: v1beta1 2082 | schema: 2083 | openAPIV3Schema: 2084 | description: Receiver is the Schema for the receivers API 2085 | properties: 2086 | apiVersion: 2087 | 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' 2088 | type: string 2089 | kind: 2090 | 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' 2091 | type: string 2092 | metadata: 2093 | type: object 2094 | spec: 2095 | description: ReceiverSpec defines the desired state of Receiver 2096 | properties: 2097 | events: 2098 | description: A list of events to handle, e.g. 'push' for GitHub or 'Push Hook' for GitLab. 2099 | items: 2100 | type: string 2101 | type: array 2102 | resources: 2103 | description: A list of resources to be notified about changes. 2104 | items: 2105 | description: CrossNamespaceObjectReference contains enough information to let you locate the typed referenced object at cluster level 2106 | properties: 2107 | apiVersion: 2108 | description: API version of the referent 2109 | type: string 2110 | kind: 2111 | description: Kind of the referent 2112 | enum: 2113 | - Bucket 2114 | - GitRepository 2115 | - Kustomization 2116 | - HelmRelease 2117 | - HelmChart 2118 | - HelmRepository 2119 | - ImageRepository 2120 | - ImagePolicy 2121 | - ImageUpdateAutomation 2122 | type: string 2123 | name: 2124 | description: Name of the referent 2125 | maxLength: 53 2126 | minLength: 1 2127 | type: string 2128 | namespace: 2129 | description: Namespace of the referent 2130 | maxLength: 53 2131 | minLength: 1 2132 | type: string 2133 | required: 2134 | - name 2135 | type: object 2136 | type: array 2137 | secretRef: 2138 | description: Secret reference containing the token used to validate the payload authenticity 2139 | properties: 2140 | name: 2141 | description: Name of the referent 2142 | type: string 2143 | required: 2144 | - name 2145 | type: object 2146 | suspend: 2147 | description: This flag tells the controller to suspend subsequent events handling. Defaults to false. 2148 | type: boolean 2149 | type: 2150 | description: Type of webhook sender, used to determine the validation procedure and payload deserialization. 2151 | enum: 2152 | - generic 2153 | - generic-hmac 2154 | - github 2155 | - gitlab 2156 | - bitbucket 2157 | - harbor 2158 | - dockerhub 2159 | - quay 2160 | - gcr 2161 | - nexus 2162 | - acr 2163 | type: string 2164 | required: 2165 | - resources 2166 | - type 2167 | type: object 2168 | status: 2169 | description: ReceiverStatus defines the observed state of Receiver 2170 | properties: 2171 | conditions: 2172 | items: 2173 | description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 2174 | properties: 2175 | lastTransitionTime: 2176 | description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. 2177 | format: date-time 2178 | type: string 2179 | message: 2180 | description: message is a human readable message indicating details about the transition. This may be an empty string. 2181 | maxLength: 32768 2182 | type: string 2183 | observedGeneration: 2184 | description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. 2185 | format: int64 2186 | minimum: 0 2187 | type: integer 2188 | reason: 2189 | description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. 2190 | maxLength: 1024 2191 | minLength: 1 2192 | pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ 2193 | type: string 2194 | status: 2195 | description: status of the condition, one of True, False, Unknown. 2196 | enum: 2197 | - "True" 2198 | - "False" 2199 | - Unknown 2200 | type: string 2201 | type: 2202 | description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) 2203 | maxLength: 316 2204 | pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ 2205 | type: string 2206 | required: 2207 | - lastTransitionTime 2208 | - message 2209 | - reason 2210 | - status 2211 | - type 2212 | type: object 2213 | type: array 2214 | observedGeneration: 2215 | description: ObservedGeneration is the last observed generation. 2216 | format: int64 2217 | type: integer 2218 | url: 2219 | description: Generated webhook URL in the format of '/hook/sha256sum(token+name+namespace)'. 2220 | type: string 2221 | type: object 2222 | type: object 2223 | served: true 2224 | storage: true 2225 | subresources: 2226 | status: {} 2227 | status: 2228 | acceptedNames: 2229 | kind: "" 2230 | plural: "" 2231 | conditions: [] 2232 | storedVersions: [] 2233 | --- 2234 | apiVersion: v1 2235 | kind: ServiceAccount 2236 | metadata: 2237 | labels: 2238 | app.kubernetes.io/instance: flux-system 2239 | app.kubernetes.io/part-of: flux 2240 | app.kubernetes.io/version: v0.13.1 2241 | name: helm-controller 2242 | namespace: flux-system 2243 | --- 2244 | apiVersion: v1 2245 | kind: ServiceAccount 2246 | metadata: 2247 | labels: 2248 | app.kubernetes.io/instance: flux-system 2249 | app.kubernetes.io/part-of: flux 2250 | app.kubernetes.io/version: v0.13.1 2251 | name: kustomize-controller 2252 | namespace: flux-system 2253 | --- 2254 | apiVersion: v1 2255 | kind: ServiceAccount 2256 | metadata: 2257 | labels: 2258 | app.kubernetes.io/instance: flux-system 2259 | app.kubernetes.io/part-of: flux 2260 | app.kubernetes.io/version: v0.13.1 2261 | name: notification-controller 2262 | namespace: flux-system 2263 | --- 2264 | apiVersion: v1 2265 | kind: ServiceAccount 2266 | metadata: 2267 | labels: 2268 | app.kubernetes.io/instance: flux-system 2269 | app.kubernetes.io/part-of: flux 2270 | app.kubernetes.io/version: v0.13.1 2271 | name: source-controller 2272 | namespace: flux-system 2273 | --- 2274 | apiVersion: rbac.authorization.k8s.io/v1 2275 | kind: ClusterRole 2276 | metadata: 2277 | labels: 2278 | app.kubernetes.io/instance: flux-system 2279 | app.kubernetes.io/part-of: flux 2280 | app.kubernetes.io/version: v0.13.1 2281 | name: crd-controller-flux-system 2282 | rules: 2283 | - apiGroups: 2284 | - source.toolkit.fluxcd.io 2285 | resources: 2286 | - '*' 2287 | verbs: 2288 | - '*' 2289 | - apiGroups: 2290 | - kustomize.toolkit.fluxcd.io 2291 | resources: 2292 | - '*' 2293 | verbs: 2294 | - '*' 2295 | - apiGroups: 2296 | - helm.toolkit.fluxcd.io 2297 | resources: 2298 | - '*' 2299 | verbs: 2300 | - '*' 2301 | - apiGroups: 2302 | - notification.toolkit.fluxcd.io 2303 | resources: 2304 | - '*' 2305 | verbs: 2306 | - '*' 2307 | - apiGroups: 2308 | - image.toolkit.fluxcd.io 2309 | resources: 2310 | - '*' 2311 | verbs: 2312 | - '*' 2313 | - apiGroups: 2314 | - "" 2315 | resources: 2316 | - secrets 2317 | verbs: 2318 | - get 2319 | - list 2320 | - watch 2321 | - apiGroups: 2322 | - "" 2323 | resources: 2324 | - events 2325 | verbs: 2326 | - create 2327 | - patch 2328 | - apiGroups: 2329 | - "" 2330 | resources: 2331 | - configmaps 2332 | - configmaps/status 2333 | verbs: 2334 | - get 2335 | - list 2336 | - watch 2337 | - create 2338 | - update 2339 | - patch 2340 | - delete 2341 | - apiGroups: 2342 | - coordination.k8s.io 2343 | resources: 2344 | - leases 2345 | verbs: 2346 | - get 2347 | - list 2348 | - watch 2349 | - create 2350 | - update 2351 | - patch 2352 | - delete 2353 | --- 2354 | apiVersion: rbac.authorization.k8s.io/v1 2355 | kind: ClusterRoleBinding 2356 | metadata: 2357 | labels: 2358 | app.kubernetes.io/instance: flux-system 2359 | app.kubernetes.io/part-of: flux 2360 | app.kubernetes.io/version: v0.13.1 2361 | name: cluster-reconciler-flux-system 2362 | roleRef: 2363 | apiGroup: rbac.authorization.k8s.io 2364 | kind: ClusterRole 2365 | name: cluster-admin 2366 | subjects: 2367 | - kind: ServiceAccount 2368 | name: kustomize-controller 2369 | namespace: flux-system 2370 | - kind: ServiceAccount 2371 | name: helm-controller 2372 | namespace: flux-system 2373 | --- 2374 | apiVersion: rbac.authorization.k8s.io/v1 2375 | kind: ClusterRoleBinding 2376 | metadata: 2377 | labels: 2378 | app.kubernetes.io/instance: flux-system 2379 | app.kubernetes.io/part-of: flux 2380 | app.kubernetes.io/version: v0.13.1 2381 | name: crd-controller-flux-system 2382 | roleRef: 2383 | apiGroup: rbac.authorization.k8s.io 2384 | kind: ClusterRole 2385 | name: crd-controller-flux-system 2386 | subjects: 2387 | - kind: ServiceAccount 2388 | name: kustomize-controller 2389 | namespace: flux-system 2390 | - kind: ServiceAccount 2391 | name: helm-controller 2392 | namespace: flux-system 2393 | - kind: ServiceAccount 2394 | name: source-controller 2395 | namespace: flux-system 2396 | - kind: ServiceAccount 2397 | name: notification-controller 2398 | namespace: flux-system 2399 | - kind: ServiceAccount 2400 | name: image-reflector-controller 2401 | namespace: flux-system 2402 | - kind: ServiceAccount 2403 | name: image-automation-controller 2404 | namespace: flux-system 2405 | --- 2406 | apiVersion: v1 2407 | kind: Service 2408 | metadata: 2409 | labels: 2410 | app.kubernetes.io/instance: flux-system 2411 | app.kubernetes.io/part-of: flux 2412 | app.kubernetes.io/version: v0.13.1 2413 | control-plane: controller 2414 | name: notification-controller 2415 | namespace: flux-system 2416 | spec: 2417 | ports: 2418 | - name: http 2419 | port: 80 2420 | protocol: TCP 2421 | targetPort: http 2422 | selector: 2423 | app: notification-controller 2424 | type: ClusterIP 2425 | --- 2426 | apiVersion: v1 2427 | kind: Service 2428 | metadata: 2429 | labels: 2430 | app.kubernetes.io/instance: flux-system 2431 | app.kubernetes.io/part-of: flux 2432 | app.kubernetes.io/version: v0.13.1 2433 | control-plane: controller 2434 | name: source-controller 2435 | namespace: flux-system 2436 | spec: 2437 | ports: 2438 | - name: http 2439 | port: 80 2440 | protocol: TCP 2441 | targetPort: http 2442 | selector: 2443 | app: source-controller 2444 | type: ClusterIP 2445 | --- 2446 | apiVersion: v1 2447 | kind: Service 2448 | metadata: 2449 | labels: 2450 | app.kubernetes.io/instance: flux-system 2451 | app.kubernetes.io/part-of: flux 2452 | app.kubernetes.io/version: v0.13.1 2453 | control-plane: controller 2454 | name: webhook-receiver 2455 | namespace: flux-system 2456 | spec: 2457 | ports: 2458 | - name: http 2459 | port: 80 2460 | protocol: TCP 2461 | targetPort: http-webhook 2462 | selector: 2463 | app: notification-controller 2464 | type: ClusterIP 2465 | --- 2466 | apiVersion: apps/v1 2467 | kind: Deployment 2468 | metadata: 2469 | labels: 2470 | app.kubernetes.io/instance: flux-system 2471 | app.kubernetes.io/part-of: flux 2472 | app.kubernetes.io/version: v0.13.1 2473 | control-plane: controller 2474 | name: helm-controller 2475 | namespace: flux-system 2476 | spec: 2477 | replicas: 1 2478 | selector: 2479 | matchLabels: 2480 | app: helm-controller 2481 | template: 2482 | metadata: 2483 | annotations: 2484 | prometheus.io/port: "8080" 2485 | prometheus.io/scrape: "true" 2486 | labels: 2487 | app: helm-controller 2488 | spec: 2489 | containers: 2490 | - args: 2491 | - --events-addr=http://notification-controller/ 2492 | - --watch-all-namespaces=true 2493 | - --log-level=info 2494 | - --log-encoding=json 2495 | - --enable-leader-election 2496 | env: 2497 | - name: RUNTIME_NAMESPACE 2498 | valueFrom: 2499 | fieldRef: 2500 | fieldPath: metadata.namespace 2501 | image: ghcr.io/fluxcd/helm-controller:v0.10.0 2502 | imagePullPolicy: IfNotPresent 2503 | livenessProbe: 2504 | httpGet: 2505 | path: /healthz 2506 | port: healthz 2507 | name: manager 2508 | ports: 2509 | - containerPort: 9440 2510 | name: healthz 2511 | protocol: TCP 2512 | - containerPort: 8080 2513 | name: http-prom 2514 | readinessProbe: 2515 | httpGet: 2516 | path: /readyz 2517 | port: healthz 2518 | resources: 2519 | limits: 2520 | cpu: 1000m 2521 | memory: 1Gi 2522 | requests: 2523 | cpu: 100m 2524 | memory: 64Mi 2525 | securityContext: 2526 | allowPrivilegeEscalation: false 2527 | readOnlyRootFilesystem: true 2528 | volumeMounts: 2529 | - mountPath: /tmp 2530 | name: temp 2531 | nodeSelector: 2532 | kubernetes.io/os: linux 2533 | serviceAccountName: helm-controller 2534 | terminationGracePeriodSeconds: 600 2535 | volumes: 2536 | - emptyDir: {} 2537 | name: temp 2538 | --- 2539 | apiVersion: apps/v1 2540 | kind: Deployment 2541 | metadata: 2542 | labels: 2543 | app.kubernetes.io/instance: flux-system 2544 | app.kubernetes.io/part-of: flux 2545 | app.kubernetes.io/version: v0.13.1 2546 | control-plane: controller 2547 | name: kustomize-controller 2548 | namespace: flux-system 2549 | spec: 2550 | replicas: 1 2551 | selector: 2552 | matchLabels: 2553 | app: kustomize-controller 2554 | template: 2555 | metadata: 2556 | annotations: 2557 | prometheus.io/port: "8080" 2558 | prometheus.io/scrape: "true" 2559 | labels: 2560 | app: kustomize-controller 2561 | spec: 2562 | containers: 2563 | - args: 2564 | - --events-addr=http://notification-controller/ 2565 | - --watch-all-namespaces=true 2566 | - --log-level=info 2567 | - --log-encoding=json 2568 | - --enable-leader-election 2569 | env: 2570 | - name: RUNTIME_NAMESPACE 2571 | valueFrom: 2572 | fieldRef: 2573 | fieldPath: metadata.namespace 2574 | image: ghcr.io/fluxcd/kustomize-controller:v0.11.1 2575 | imagePullPolicy: IfNotPresent 2576 | livenessProbe: 2577 | httpGet: 2578 | path: /healthz 2579 | port: healthz 2580 | name: manager 2581 | ports: 2582 | - containerPort: 9440 2583 | name: healthz 2584 | protocol: TCP 2585 | - containerPort: 8080 2586 | name: http-prom 2587 | readinessProbe: 2588 | httpGet: 2589 | path: /readyz 2590 | port: healthz 2591 | resources: 2592 | limits: 2593 | cpu: 1000m 2594 | memory: 1Gi 2595 | requests: 2596 | cpu: 100m 2597 | memory: 64Mi 2598 | securityContext: 2599 | allowPrivilegeEscalation: false 2600 | readOnlyRootFilesystem: true 2601 | volumeMounts: 2602 | - mountPath: /tmp 2603 | name: temp 2604 | nodeSelector: 2605 | kubernetes.io/os: linux 2606 | securityContext: 2607 | fsGroup: 1337 2608 | serviceAccountName: kustomize-controller 2609 | terminationGracePeriodSeconds: 60 2610 | volumes: 2611 | - emptyDir: {} 2612 | name: temp 2613 | --- 2614 | apiVersion: apps/v1 2615 | kind: Deployment 2616 | metadata: 2617 | labels: 2618 | app.kubernetes.io/instance: flux-system 2619 | app.kubernetes.io/part-of: flux 2620 | app.kubernetes.io/version: v0.13.1 2621 | control-plane: controller 2622 | name: notification-controller 2623 | namespace: flux-system 2624 | spec: 2625 | replicas: 1 2626 | selector: 2627 | matchLabels: 2628 | app: notification-controller 2629 | template: 2630 | metadata: 2631 | annotations: 2632 | prometheus.io/port: "8080" 2633 | prometheus.io/scrape: "true" 2634 | labels: 2635 | app: notification-controller 2636 | spec: 2637 | containers: 2638 | - args: 2639 | - --watch-all-namespaces=true 2640 | - --log-level=info 2641 | - --log-encoding=json 2642 | - --enable-leader-election 2643 | env: 2644 | - name: RUNTIME_NAMESPACE 2645 | valueFrom: 2646 | fieldRef: 2647 | fieldPath: metadata.namespace 2648 | image: ghcr.io/fluxcd/notification-controller:v0.13.0 2649 | imagePullPolicy: IfNotPresent 2650 | livenessProbe: 2651 | httpGet: 2652 | path: /healthz 2653 | port: healthz 2654 | name: manager 2655 | ports: 2656 | - containerPort: 9440 2657 | name: healthz 2658 | protocol: TCP 2659 | - containerPort: 9090 2660 | name: http 2661 | - containerPort: 9292 2662 | name: http-webhook 2663 | - containerPort: 8080 2664 | name: http-prom 2665 | readinessProbe: 2666 | httpGet: 2667 | path: /readyz 2668 | port: healthz 2669 | resources: 2670 | limits: 2671 | cpu: 1000m 2672 | memory: 1Gi 2673 | requests: 2674 | cpu: 100m 2675 | memory: 64Mi 2676 | securityContext: 2677 | allowPrivilegeEscalation: false 2678 | readOnlyRootFilesystem: true 2679 | volumeMounts: 2680 | - mountPath: /tmp 2681 | name: temp 2682 | nodeSelector: 2683 | kubernetes.io/os: linux 2684 | serviceAccountName: notification-controller 2685 | terminationGracePeriodSeconds: 10 2686 | volumes: 2687 | - emptyDir: {} 2688 | name: temp 2689 | --- 2690 | apiVersion: apps/v1 2691 | kind: Deployment 2692 | metadata: 2693 | labels: 2694 | app.kubernetes.io/instance: flux-system 2695 | app.kubernetes.io/part-of: flux 2696 | app.kubernetes.io/version: v0.13.1 2697 | control-plane: controller 2698 | name: source-controller 2699 | namespace: flux-system 2700 | spec: 2701 | replicas: 1 2702 | selector: 2703 | matchLabels: 2704 | app: source-controller 2705 | strategy: 2706 | type: Recreate 2707 | template: 2708 | metadata: 2709 | annotations: 2710 | prometheus.io/port: "8080" 2711 | prometheus.io/scrape: "true" 2712 | labels: 2713 | app: source-controller 2714 | spec: 2715 | containers: 2716 | - args: 2717 | - --events-addr=http://notification-controller/ 2718 | - --watch-all-namespaces=true 2719 | - --log-level=info 2720 | - --log-encoding=json 2721 | - --enable-leader-election 2722 | - --storage-path=/data 2723 | - --storage-adv-addr=source-controller.$(RUNTIME_NAMESPACE).svc.cluster.local. 2724 | env: 2725 | - name: RUNTIME_NAMESPACE 2726 | valueFrom: 2727 | fieldRef: 2728 | fieldPath: metadata.namespace 2729 | image: ghcr.io/fluxcd/source-controller:v0.12.1 2730 | imagePullPolicy: IfNotPresent 2731 | livenessProbe: 2732 | httpGet: 2733 | path: /healthz 2734 | port: healthz 2735 | name: manager 2736 | ports: 2737 | - containerPort: 9090 2738 | name: http 2739 | - containerPort: 8080 2740 | name: http-prom 2741 | - containerPort: 9440 2742 | name: healthz 2743 | readinessProbe: 2744 | httpGet: 2745 | path: / 2746 | port: http 2747 | resources: 2748 | limits: 2749 | cpu: 1000m 2750 | memory: 1Gi 2751 | requests: 2752 | cpu: 50m 2753 | memory: 64Mi 2754 | securityContext: 2755 | allowPrivilegeEscalation: false 2756 | readOnlyRootFilesystem: true 2757 | volumeMounts: 2758 | - mountPath: /data 2759 | name: data 2760 | - mountPath: /tmp 2761 | name: tmp 2762 | nodeSelector: 2763 | kubernetes.io/os: linux 2764 | securityContext: 2765 | fsGroup: 1337 2766 | serviceAccountName: source-controller 2767 | terminationGracePeriodSeconds: 10 2768 | volumes: 2769 | - emptyDir: {} 2770 | name: data 2771 | - emptyDir: {} 2772 | name: tmp 2773 | --- 2774 | apiVersion: networking.k8s.io/v1 2775 | kind: NetworkPolicy 2776 | metadata: 2777 | labels: 2778 | app.kubernetes.io/instance: flux-system 2779 | app.kubernetes.io/part-of: flux 2780 | app.kubernetes.io/version: v0.13.1 2781 | name: allow-egress 2782 | namespace: flux-system 2783 | spec: 2784 | egress: 2785 | - {} 2786 | ingress: 2787 | - from: 2788 | - podSelector: {} 2789 | podSelector: {} 2790 | policyTypes: 2791 | - Ingress 2792 | - Egress 2793 | --- 2794 | apiVersion: networking.k8s.io/v1 2795 | kind: NetworkPolicy 2796 | metadata: 2797 | labels: 2798 | app.kubernetes.io/instance: flux-system 2799 | app.kubernetes.io/part-of: flux 2800 | app.kubernetes.io/version: v0.13.1 2801 | name: allow-scraping 2802 | namespace: flux-system 2803 | spec: 2804 | ingress: 2805 | - from: 2806 | - namespaceSelector: {} 2807 | ports: 2808 | - port: 8080 2809 | protocol: TCP 2810 | podSelector: {} 2811 | policyTypes: 2812 | - Ingress 2813 | --- 2814 | apiVersion: networking.k8s.io/v1 2815 | kind: NetworkPolicy 2816 | metadata: 2817 | labels: 2818 | app.kubernetes.io/instance: flux-system 2819 | app.kubernetes.io/part-of: flux 2820 | app.kubernetes.io/version: v0.13.1 2821 | name: allow-webhooks 2822 | namespace: flux-system 2823 | spec: 2824 | ingress: 2825 | - from: 2826 | - namespaceSelector: {} 2827 | podSelector: 2828 | matchLabels: 2829 | app: notification-controller 2830 | policyTypes: 2831 | - Ingress 2832 | -------------------------------------------------------------------------------- /flux/capi/flux-system/gotk-sync.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: source.toolkit.fluxcd.io/v1beta1 3 | kind: GitRepository 4 | metadata: 5 | name: flux-system 6 | namespace: flux-system 7 | spec: 8 | interval: 1m0s 9 | ref: 10 | branch: main 11 | secretRef: 12 | name: flux-system 13 | url: ssh://git@github.com/kgamanji/cluster-api-helm-chart 14 | --- 15 | apiVersion: kustomize.toolkit.fluxcd.io/v1beta1 16 | kind: Kustomization 17 | metadata: 18 | name: flux-system 19 | namespace: flux-system 20 | spec: 21 | interval: 10m0s 22 | path: ./flux/capi 23 | prune: true 24 | sourceRef: 25 | kind: GitRepository 26 | name: flux-system 27 | validation: client 28 | -------------------------------------------------------------------------------- /flux/capi/flux-system/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | resources: 4 | - gotk-components.yaml 5 | - gotk-sync.yaml 6 | -------------------------------------------------------------------------------- /test/capi-quickstart-v1.18.8.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cluster.x-k8s.io/v1alpha3 2 | kind: Cluster 3 | metadata: 4 | name: capi-quickstart 5 | namespace: default 6 | spec: 7 | clusterNetwork: 8 | pods: 9 | cidrBlocks: 10 | - 192.168.0.0/16 11 | controlPlaneRef: 12 | apiVersion: controlplane.cluster.x-k8s.io/v1alpha3 13 | kind: KubeadmControlPlane 14 | name: capi-quickstart-control-plane 15 | infrastructureRef: 16 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 17 | kind: AWSCluster 18 | name: capi-quickstart 19 | --- 20 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 21 | kind: AWSCluster 22 | metadata: 23 | name: capi-quickstart 24 | namespace: default 25 | spec: 26 | region: eu-west-1 27 | sshKeyName: default 28 | --- 29 | apiVersion: controlplane.cluster.x-k8s.io/v1alpha3 30 | kind: KubeadmControlPlane 31 | metadata: 32 | name: capi-quickstart-control-plane 33 | namespace: default 34 | spec: 35 | infrastructureTemplate: 36 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 37 | kind: AWSMachineTemplate 38 | name: capi-quickstart-control-plane 39 | kubeadmConfigSpec: 40 | clusterConfiguration: 41 | apiServer: 42 | extraArgs: 43 | cloud-provider: aws 44 | controllerManager: 45 | extraArgs: 46 | cloud-provider: aws 47 | initConfiguration: 48 | nodeRegistration: 49 | kubeletExtraArgs: 50 | cloud-provider: aws 51 | name: '{{ ds.meta_data.local_hostname }}' 52 | joinConfiguration: 53 | nodeRegistration: 54 | kubeletExtraArgs: 55 | cloud-provider: aws 56 | name: '{{ ds.meta_data.local_hostname }}' 57 | replicas: 3 58 | version: v1.18.8 59 | --- 60 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 61 | kind: AWSMachineTemplate 62 | metadata: 63 | name: capi-quickstart-control-plane 64 | namespace: default 65 | spec: 66 | template: 67 | spec: 68 | iamInstanceProfile: control-plane.cluster-api-provider-aws.sigs.k8s.io 69 | instanceType: t3.large 70 | sshKeyName: default 71 | --- 72 | apiVersion: cluster.x-k8s.io/v1alpha3 73 | kind: MachineDeployment 74 | metadata: 75 | name: capi-quickstart-md-0 76 | namespace: default 77 | spec: 78 | clusterName: capi-quickstart 79 | replicas: 3 80 | selector: 81 | matchLabels: null 82 | template: 83 | spec: 84 | bootstrap: 85 | configRef: 86 | apiVersion: bootstrap.cluster.x-k8s.io/v1alpha3 87 | kind: KubeadmConfigTemplate 88 | name: capi-quickstart-md-0 89 | clusterName: capi-quickstart 90 | infrastructureRef: 91 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 92 | kind: AWSMachineTemplate 93 | name: capi-quickstart-md-0 94 | version: v1.18.8 95 | --- 96 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 97 | kind: AWSMachineTemplate 98 | metadata: 99 | name: capi-quickstart-md-0 100 | namespace: default 101 | spec: 102 | template: 103 | spec: 104 | iamInstanceProfile: nodes.cluster-api-provider-aws.sigs.k8s.io 105 | instanceType: t3.large 106 | sshKeyName: default 107 | --- 108 | apiVersion: bootstrap.cluster.x-k8s.io/v1alpha3 109 | kind: KubeadmConfigTemplate 110 | metadata: 111 | name: capi-quickstart-md-0 112 | namespace: default 113 | spec: 114 | template: 115 | spec: 116 | joinConfiguration: 117 | nodeRegistration: 118 | kubeletExtraArgs: 119 | cloud-provider: aws 120 | name: '{{ ds.meta_data.local_hostname }}' 121 | -------------------------------------------------------------------------------- /test/capi-quickstart-v1.19.1.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cluster.x-k8s.io/v1alpha3 2 | kind: Cluster 3 | metadata: 4 | name: capi-quickstart 5 | namespace: default 6 | spec: 7 | clusterNetwork: 8 | pods: 9 | cidrBlocks: 10 | - 192.168.0.0/16 11 | controlPlaneRef: 12 | apiVersion: controlplane.cluster.x-k8s.io/v1alpha3 13 | kind: KubeadmControlPlane 14 | name: capi-quickstart-control-plane 15 | infrastructureRef: 16 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 17 | kind: AWSCluster 18 | name: capi-quickstart 19 | --- 20 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 21 | kind: AWSCluster 22 | metadata: 23 | name: capi-quickstart 24 | namespace: default 25 | spec: 26 | region: eu-west-1 27 | sshKeyName: default 28 | --- 29 | apiVersion: controlplane.cluster.x-k8s.io/v1alpha3 30 | kind: KubeadmControlPlane 31 | metadata: 32 | name: capi-quickstart-control-plane 33 | namespace: default 34 | spec: 35 | infrastructureTemplate: 36 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 37 | kind: AWSMachineTemplate 38 | name: capi-quickstart-control-plane 39 | kubeadmConfigSpec: 40 | clusterConfiguration: 41 | apiServer: 42 | extraArgs: 43 | cloud-provider: aws 44 | controllerManager: 45 | extraArgs: 46 | cloud-provider: aws 47 | initConfiguration: 48 | nodeRegistration: 49 | kubeletExtraArgs: 50 | cloud-provider: aws 51 | name: '{{ ds.meta_data.local_hostname }}' 52 | joinConfiguration: 53 | nodeRegistration: 54 | kubeletExtraArgs: 55 | cloud-provider: aws 56 | name: '{{ ds.meta_data.local_hostname }}' 57 | replicas: 3 58 | version: v1.19.1 59 | --- 60 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 61 | kind: AWSMachineTemplate 62 | metadata: 63 | name: capi-quickstart-control-plane 64 | namespace: default 65 | spec: 66 | template: 67 | spec: 68 | iamInstanceProfile: control-plane.cluster-api-provider-aws.sigs.k8s.io 69 | instanceType: t3.large 70 | sshKeyName: default 71 | --- 72 | apiVersion: cluster.x-k8s.io/v1alpha3 73 | kind: MachineDeployment 74 | metadata: 75 | name: capi-quickstart-md-0 76 | namespace: default 77 | spec: 78 | clusterName: capi-quickstart 79 | replicas: 3 80 | selector: 81 | matchLabels: null 82 | template: 83 | spec: 84 | bootstrap: 85 | configRef: 86 | apiVersion: bootstrap.cluster.x-k8s.io/v1alpha3 87 | kind: KubeadmConfigTemplate 88 | name: capi-quickstart-md-0 89 | clusterName: capi-quickstart 90 | infrastructureRef: 91 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 92 | kind: AWSMachineTemplate 93 | name: capi-quickstart-md-0 94 | version: v1.19.1 95 | --- 96 | apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 97 | kind: AWSMachineTemplate 98 | metadata: 99 | name: capi-quickstart-md-0 100 | namespace: default 101 | spec: 102 | template: 103 | spec: 104 | iamInstanceProfile: nodes.cluster-api-provider-aws.sigs.k8s.io 105 | instanceType: t3.large 106 | sshKeyName: default 107 | --- 108 | apiVersion: bootstrap.cluster.x-k8s.io/v1alpha3 109 | kind: KubeadmConfigTemplate 110 | metadata: 111 | name: capi-quickstart-md-0 112 | namespace: default 113 | spec: 114 | template: 115 | spec: 116 | joinConfiguration: 117 | nodeRegistration: 118 | kubeletExtraArgs: 119 | cloud-provider: aws 120 | name: '{{ ds.meta_data.local_hostname }}' 121 | --------------------------------------------------------------------------------