From b417b68829cb8710c93a4f89e50842aba7ee0b87 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 24 Dec 2021 09:13:50 +0000 Subject: [PATCH 1/5] TVK Operator Update v2.6.4 --- .../generated-changes/patch/Chart.yaml.patch | 4 ++-- packages/k8s-triliovault-operator/package.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/k8s-triliovault-operator/generated-changes/patch/Chart.yaml.patch b/packages/k8s-triliovault-operator/generated-changes/patch/Chart.yaml.patch index faa94d7cd..974d77314 100644 --- a/packages/k8s-triliovault-operator/generated-changes/patch/Chart.yaml.patch +++ b/packages/k8s-triliovault-operator/generated-changes/patch/Chart.yaml.patch @@ -3,8 +3,8 @@ @@ -11,3 +11,8 @@ sources: - https://github.com/trilioData/k8s-triliovault-operator - version: 2.6.0 -+kubeVersion: ">= 1.18" + version: 2.6.4 ++kubeVersion: "1.18-1.22" +annotations: + catalog.cattle.io/certified: partner + catalog.cattle.io/release-name: k8s-triliovault-operator diff --git a/packages/k8s-triliovault-operator/package.yaml b/packages/k8s-triliovault-operator/package.yaml index 066915149..16ac7cf0b 100644 --- a/packages/k8s-triliovault-operator/package.yaml +++ b/packages/k8s-triliovault-operator/package.yaml @@ -1,2 +1,2 @@ -url: https://raw.githubusercontent.com/trilioData/triliovault--operator/master/k8s-triliovault-operator-2.6.0.tgz +url: https://raw.githubusercontent.com/trilioData/triliovault--operator/master/k8s-triliovault-operator-2.6.4.tgz packageVersion: 00 From f35527d11dc24f17d8a6eda58e38fb76cff24103 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 24 Dec 2021 09:15:42 +0000 Subject: [PATCH 2/5] TVK Operator update v2.6.4, make charts output --- .../k8s-triliovault-operator-2.6.400.tgz | Bin 0 -> 11489 bytes .../2.6.400/.helmignore | 23 + .../2.6.400/Chart.yaml | 18 + .../k8s-triliovault-operator/2.6.400/LICENSE | 1 + .../2.6.400/README.md | 120 +++ .../2.6.400/app-readme.md | 37 + ...iovault.trilio.io_triliovaultmanagers.yaml | 895 ++++++++++++++++++ .../2.6.400/templates/NOTES.txt | 3 + .../2.6.400/templates/_helpers.tpl | 54 ++ .../2.6.400/templates/clusterrole.yaml | 125 +++ .../templates/clusterrole_binding.yaml | 17 + .../2.6.400/templates/deployment.yaml | 182 ++++ .../2.6.400/templates/mutating-webhook.yaml | 31 + .../templates/ns-validating-webhook.yaml | 37 + .../2.6.400/templates/proxyConfig.yaml | 19 + .../2.6.400/templates/secret.yaml | 11 + .../2.6.400/templates/serviceAccount.yaml | 10 + .../2.6.400/templates/validating-webhook.yaml | 31 + .../2.6.400/templates/webhook-service.yaml | 19 + .../2.6.400/values.yaml | 62 ++ index.yaml | 22 + 21 files changed, 1717 insertions(+) create mode 100644 assets/k8s-triliovault-operator/k8s-triliovault-operator-2.6.400.tgz create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/.helmignore create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/Chart.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/LICENSE create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/README.md create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/app-readme.md create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/crds/triliovault.trilio.io_triliovaultmanagers.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/NOTES.txt create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/_helpers.tpl create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/clusterrole.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/clusterrole_binding.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/deployment.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/mutating-webhook.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/ns-validating-webhook.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/proxyConfig.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/secret.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/serviceAccount.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/validating-webhook.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/webhook-service.yaml create mode 100644 charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/values.yaml diff --git a/assets/k8s-triliovault-operator/k8s-triliovault-operator-2.6.400.tgz b/assets/k8s-triliovault-operator/k8s-triliovault-operator-2.6.400.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f4dec2ef03c8ae9fcc2b12e8e4be27a6e0ea2228 GIT binary patch literal 11489 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 443/TCP 2m7s +k8s-triliovault-ingress-gateway LoadBalancer 10.255.254.153 34.75.176.146 80:30737/TCP,443:30769/TCP 2m7s +k8s-triliovault-web ClusterIP 10.255.245.52 80/TCP 2m7s +k8s-triliovault-web-backend ClusterIP 10.255.250.166 80/TCP 2m7s +kubernetes ClusterIP 10.255.240.1 443/TCP 6m9s +tvm-k8s-triliovault-operator-webhook-service ClusterIP 10.255.249.77 443/TCP 3m22s +``` + +Check that ingress resources has the host defined by the user: +``` +NAME CLASS HOSTS ADDRESS PORTS AGE +k8s-triliovault-ingress-master nginx trilio.co.in 80 98s +k8s-triliovault-ingress-minion nginx trilio.co.in 80 98s + +``` + +## Delete + +```shell +kubectl delete -f TVM.yaml +``` + +## Uninstall + +To uninstall/delete the operator helm chart : + +```bash +helm uninstall tvm +``` + +## TrilioVaultManager compatibility + +The following table captures the compatibility matrix of the TrilioVault Manager against TVK: + +| TVM Version | TVK 2.5.2 | TVK 2.5.1 | TVK 2.5.0 | TVK 2.1.0 | TVK 2.0.5 | TVK 2.0.4 | TVK 2.0.3 | TVK 2.0.2 | TVK 2.0.1 | +|-------------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------| +| 2.5.2 | yes | yes | yes | yes | yes | yes | yes | yes | yes | +| 2.5.0 | no | yes | yes | yes | yes | yes | yes | yes | yes | +| v2.1.0 | no | no | no | yes | yes | yes | yes | yes | yes | +| v2.0.5 | no | no | no | yes | yes | yes | yes | yes | yes | +| v2.0.2 | no | no | no | yes | yes | yes | yes | yes | yes | +| v2.0.1 | no | no | no | yes | yes | yes | yes | yes | yes | +| v2.0.0 | no | no | no | yes | yes | yes | yes | yes | yes | diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/app-readme.md b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/app-readme.md new file mode 100644 index 000000000..65a2b3495 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/app-readme.md @@ -0,0 +1,37 @@ +# TrilioVault for Kubernetes + +[K8s-TrilioVault-Operator](https://trilio.io) is an operator designed to manage +the K8s-TrilioVault Application Lifecycle. + +This operator is to manage the lifecycle of TrilioVault Backup/Recovery solution. This operator install, updates and manage the TrilioVault application. + +Introduction: + +Prerequisites: + +Kubernetes 1.17+ +Alpha feature gates should be enabled +PV provisioner support +CSI driver should be installed + +Installation: + +To install the chart with the operator name trilio: + +helm install k8s-triliovault-operator triliovault-operator/k8s-triliovault-operator + +# For helm version 3 + +helm install triliovault-operator triliovault-operator/k8s-triliovault-operator + +The command deploys the Triliovault for Kubernetes Operator with the default configuration. + +Uninstall: + +To uninstall/delete the chart trilio : + +# For helm version 3 +helm uninstall k8s-triliovault-operator + +For more information around TVM manager installation, please follow below link: +https://docs.trilio.io/kubernetes/use-triliovault/installing-triliovault diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/crds/triliovault.trilio.io_triliovaultmanagers.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/crds/triliovault.trilio.io_triliovaultmanagers.yaml new file mode 100644 index 000000000..a90c9483f --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/crds/triliovault.trilio.io_triliovaultmanagers.yaml @@ -0,0 +1,895 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.7.0 + creationTimestamp: null + name: triliovaultmanagers.triliovault.trilio.io +spec: + group: triliovault.trilio.io + names: + kind: TrilioVaultManager + listKind: TrilioVaultManagerList + plural: triliovaultmanagers + shortNames: + - tvm + singular: triliovaultmanager + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.trilioVaultAppVersion + name: TrilioVault-Version + type: string + - jsonPath: .spec.applicationScope + name: Scope + type: string + - jsonPath: .status.conditions.type + name: Status + type: string + - jsonPath: .spec.restoreNamespaces + name: Restore-Namespaces + type: string + name: v1 + schema: + openAPIV3Schema: + description: TrilioVaultManager is the Schema for the triliovaultmanagers + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: TrilioVaultManagerSpec defines the desired state of TrilioVaultManager + properties: + affinity: + description: The scheduling constraints on application pods. + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for the + pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to + nodes that satisfy the affinity expressions specified by + this field, but it may choose a node that violates one or + more of the expressions. The node that is most preferred + is the one with the greatest sum of weights, i.e. for each + node that meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements of + this field and adding "weight" to the sum if the node matches + the corresponding matchExpressions; the node(s) with the + highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects (i.e. + is also a no-op). + properties: + preference: + description: A node selector term, associated with the + corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists, DoesNotExist. Gt, and + Lt. + type: string + values: + description: An array of string values. If + the operator is In or NotIn, the values + array must be non-empty. If the operator + is Exists or DoesNotExist, the values array + must be empty. If the operator is Gt or + Lt, the values array must have a single + element, which will be interpreted as an + integer. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists, DoesNotExist. Gt, and + Lt. + type: string + values: + description: An array of string values. If + the operator is In or NotIn, the values + array must be non-empty. If the operator + is Exists or DoesNotExist, the values array + must be empty. If the operator is Gt or + Lt, the values array must have a single + element, which will be interpreted as an + integer. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching the corresponding + nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by this + field are not met at scheduling time, the pod will not be + scheduled onto the node. If the affinity requirements specified + by this field cease to be met at some point during pod execution + (e.g. due to an update), the system may or may not try to + eventually evict the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term matches + no objects. The requirements of them are ANDed. The + TopologySelectorTerm type implements a subset of the + NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists, DoesNotExist. Gt, and + Lt. + type: string + values: + description: An array of string values. If + the operator is In or NotIn, the values + array must be non-empty. If the operator + is Exists or DoesNotExist, the values array + must be empty. If the operator is Gt or + Lt, the values array must have a single + element, which will be interpreted as an + integer. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists, DoesNotExist. Gt, and + Lt. + type: string + values: + description: An array of string values. If + the operator is In or NotIn, the values + array must be non-empty. If the operator + is Exists or DoesNotExist, the values array + must be empty. If the operator is Gt or + Lt, the values array must have a single + element, which will be interpreted as an + integer. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. co-locate + this pod in the same node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to + nodes that satisfy the affinity expressions specified by + this field, but it may choose a node that violates one or + more of the expressions. The node that is most preferred + is the one with the greatest sum of weights, i.e. for each + node that meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements of + this field and adding "weight" to the sum if the node has + pods which matches the corresponding podAffinityTerm; the + node(s) with the highest sum are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies which namespaces + the labelSelector applies to (matches against); + null or empty list means "this pod's namespace" + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the corresponding + podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by this + field are not met at scheduling time, the pod will not be + scheduled onto the node. If the affinity requirements specified + by this field cease to be met at some point during pod execution + (e.g. due to a pod label update), the system may or may + not try to eventually evict the pod from its node. When + there are multiple elements, the lists of nodes corresponding + to each podAffinityTerm are intersected, i.e. all terms + must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is defined as running + on a node whose value of the label with key + matches that of any node on which a pod of the set of + pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies which namespaces the + labelSelector applies to (matches against); null or + empty list means "this pod's namespace" + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods matching + the labelSelector in the specified namespaces, where + co-located is defined as running on a node whose value + of the label with key topologyKey matches that of + any node on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules (e.g. + avoid putting this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to + nodes that satisfy the anti-affinity expressions specified + by this field, but it may choose a node that violates one + or more of the expressions. The node that is most preferred + is the one with the greatest sum of weights, i.e. for each + node that meets all of the scheduling requirements (resource + request, requiredDuringScheduling anti-affinity expressions, + etc.), compute a sum by iterating through the elements of + this field and adding "weight" to the sum if the node has + pods which matches the corresponding podAffinityTerm; the + node(s) with the highest sum are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies which namespaces + the labelSelector applies to (matches against); + null or empty list means "this pod's namespace" + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the corresponding + podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the anti-affinity requirements + specified by this field cease to be met at some point during + pod execution (e.g. due to a pod label update), the system + may or may not try to eventually evict the pod from its + node. When there are multiple elements, the lists of nodes + corresponding to each podAffinityTerm are intersected, i.e. + all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is defined as running + on a node whose value of the label with key + matches that of any node on which a pod of the set of + pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies which namespaces the + labelSelector applies to (matches against); null or + empty list means "this pod's namespace" + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods matching + the labelSelector in the specified namespaces, where + co-located is defined as running on a node whose value + of the label with key topologyKey matches that of + any node on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + applicationScope: + description: Scope for the application which will be installed in + the cluster NamespaceScope or ClusterScope + enum: + - Cluster + - Namespaced + type: string + componentConfiguration: + description: ComponentConfiguration holds all the field related to + components. + properties: + admission-webhook: + description: AdmissionWebhook holds all configuration keys related + to admission-webhook + type: object + x-kubernetes-preserve-unknown-fields: true + control-plane: + description: ControlPlane holds all configuration keys related + to control-plane + type: object + x-kubernetes-preserve-unknown-fields: true + exporter: + description: Exporter holds all configuration keys related to + exporter + type: object + x-kubernetes-preserve-unknown-fields: true + ingress-controller: + description: IngressController holds all configuration keys related + to ingress-controller + type: object + x-kubernetes-preserve-unknown-fields: true + web: + description: Web holds all configuration keys related to web + type: object + x-kubernetes-preserve-unknown-fields: true + web-backend: + description: WebBackend holds all configuration keys related to + web-backend + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + dataJobLimits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: DataJobLimits are the resource limits for all the data + processing jobs. + type: object + deploymentLimits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: DeploymentLimits are the resource limits for all the + deployments. + type: object + helmValues: + description: HelmValues holds all the additional fields in the values.yaml + of TVK helm chart. + type: object + x-kubernetes-preserve-unknown-fields: true + helmVersion: + description: 'Deprecated: Helm Version' + properties: + tillerNamespace: + type: string + version: + enum: + - v3 + type: string + required: + - version + type: object + ingressConfig: + description: IngressConfig holds field related to ingress + properties: + annotations: + additionalProperties: + type: string + type: object + host: + type: string + ingressClass: + type: string + tlsSecretName: + type: string + type: object + metadataJobLimits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: MetadataJobLimits are the resource limits for all the + meta processing jobs. + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector specifies a map of key-value pairs. For + the pod to be eligible to run on a node, the node must have each + of the indicated key-value pairs as labels. + type: object + resources: + description: 'Deprecated: Resources are the resource requirements + for the containers.' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/' + type: object + type: object + restoreNamespaces: + description: 'Deprecated: RestoreNamespaces are the namespace where + you want to restore your applications. Restore Namespaces depends + on your k8s RBAC' + items: + type: string + type: array + tolerations: + description: The toleration of application against the specific taints + on the nodes + items: + description: The pod this Toleration is attached to tolerates any + taint that matches the triple using the matching + operator . + properties: + effect: + description: Effect indicates the taint effect to match. Empty + means match all taint effects. When specified, allowed values + are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match all + values and all keys. + type: string + operator: + description: Operator represents a key's relationship to the + value. Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod + can tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of time + the toleration (which must be of effect NoExecute, otherwise + this field is ignored) tolerates the taint. By default, it + is not set, which means tolerate the taint forever (do not + evict). Zero and negative values will be treated as 0 (evict + immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + trilioVaultAppVersion: + description: Helm Chart version + type: string + required: + - applicationScope + type: object + status: + description: TrilioVaultManagerStatus defines the observed state of TrilioVaultManager + properties: + conditions: + properties: + lastTransitionTime: + format: date-time + nullable: true + type: string + message: + minLength: 0 + type: string + reason: + enum: + - InstallSuccessful + - UpdateSuccessful + - UninstallSuccessful + - InstallError + - UpdateError + - ReconcileError + - UninstallError + type: string + status: + enum: + - "True" + - "False" + - Unknown + type: string + type: + enum: + - Initialized + - Deployed + - Updated + - ReleaseFailed + - Irreconcilable + type: string + type: object + deployedRelease: + properties: + manifest: + type: string + name: + type: string + type: object + releaseVersion: + type: string + required: + - conditions + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/NOTES.txt b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/NOTES.txt new file mode 100644 index 000000000..19cd282d3 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/NOTES.txt @@ -0,0 +1,3 @@ +To verify that TrilioVault Operator has started, run: + + kubectl --namespace={{ .Release.Namespace }} get deployments -l "release={{ .Release.Name }}" \ No newline at end of file diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/_helpers.tpl b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/_helpers.tpl new file mode 100644 index 000000000..db083c8c4 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/_helpers.tpl @@ -0,0 +1,54 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "k8s-triliovault-operator.name" -}} +{{- default .Release.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "k8s-triliovault-operator.appName" -}} +{{- printf "%s" .Chart.Name -}} +{{- end -}} + + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "k8s-triliovault-operator.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Return the proper TrilioVault Operator image name +*/}} +{{- define "k8s-triliovault-operator.image" -}} +{{- $registryName := .Values.image.registry -}} +{{- $repositoryName := .Values.image.repository -}} +{{- $tag := .Values.image.tag | toString -}} +{{- printf "%s/%s:%s" $registryName $repositoryName $tag -}} +{{- end -}} + +{{/* +Validation of the secret of CA bundle if provided +*/}} +{{- define "k8s-triliovault-operator.caBundleValidation" -}} +{{- if .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} +{{- if not (lookup "v1" "ConfigMap" .Release.Namespace .Values.proxySettings.CA_BUNDLE_CONFIGMAP) }} + {{ fail "Proxy CA bundle proxy is not present in the release namespace" }} +{{- else }} + {{- $caMap := (lookup "v1" "ConfigMap" .Release.Namespace .Values.proxySettings.CA_BUNDLE_CONFIGMAP).data }} + {{- if not (get $caMap "ca-bundle.crt") }} + {{ fail "Proxy CA certificate file key should be ca-bundle.crt" }} + {{- end }} +{{- end }} +{{- end }} +{{- end -}} diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/clusterrole.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/clusterrole.yaml new file mode 100644 index 000000000..b3eed777d --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/clusterrole.yaml @@ -0,0 +1,125 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{template "k8s-triliovault-operator.name" .}}-{{.Release.Namespace}}-manager-role + labels: + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{template "k8s-triliovault-operator.appName" .}}-manager-role + app.kubernetes.io/managed-by: {{ .Release.Service }} +rules: + - apiGroups: + - '*' + resources: + - '*' + verbs: + - get + - list + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - create + - update + - delete + - patch + - apiGroups: + - "" + resources: + - serviceaccounts + - services + - services/finalizers + - secrets + - events + - pods + - endpoints + - configmaps + verbs: + - create + - update + - delete + - patch + - apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + - mutatingwebhookconfigurations + verbs: + - create + - update + - delete + - patch + - apiGroups: + - apps + resources: + - deployments + verbs: + - create + - update + - delete + - patch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + - clusterrolebindings + - roles + - rolebindings + verbs: + - create + - update + - delete + - patch + - bind + - escalate + - apiGroups: + - triliovault.trilio.io + resources: + - '*' + verbs: + - '*' + - apiGroups: + - "" + resources: + - namespaces + verbs: + - update + - apiGroups: + - batch + resources: + - cronjobs + verbs: + - delete + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - update + - patch + - delete + - apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - create + - patch + - update + - delete + - apiGroups: + - networking.k8s.io + resources: + - ingresses/status + verbs: + - update + - apiGroups: + - networking.k8s.io + resources: + - ingressclasses + verbs: + - delete diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/clusterrole_binding.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/clusterrole_binding.yaml new file mode 100644 index 000000000..49d5655f6 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/clusterrole_binding.yaml @@ -0,0 +1,17 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "k8s-triliovault-operator.name" . }}-{{ .Release.Namespace }}-manager-rolebinding + labels: + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }}-manager-rolebinding + app.kubernetes.io/managed-by: {{ .Release.Service }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "k8s-triliovault-operator.name" . }}-{{ .Release.Namespace }}-manager-role +subjects: +- kind: ServiceAccount + name: {{ template "k8s-triliovault-operator.fullname" . }}-service-account + namespace: {{ .Release.Namespace }} diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/deployment.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/deployment.yaml new file mode 100644 index 000000000..88c4d0041 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/deployment.yaml @@ -0,0 +1,182 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "k8s-triliovault-operator.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "k8s-triliovault-operator.fullname" . }} + release: "{{ .Release.Name }}" + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + selector: + matchLabels: + app: {{ template "k8s-triliovault-operator.fullname" . }} + release: "{{ .Release.Name }}" + replicas: {{ .Values.replicaCount }} + template: + metadata: + labels: + app: {{ template "k8s-triliovault-operator.fullname" . }} + release: "{{ .Release.Name }}" + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + spec: + hostNetwork: {{ .Values.podSpec.hostNetwork }} + hostIPC: {{ .Values.podSpec.hostIPC }} + hostPID: {{ .Values.podSpec.hostPID }} + {{- if .Values.securityContext }} + securityContext: + {{- toYaml .Values.podSpec.securityContext | nindent 8 }} + {{- end }} + containers: + - name: k8s-triliovault-operator + image: {{ .Values.registry }}/{{ index .Values "k8s-triliovault-operator" "repository" }}:{{ .Values.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy | quote }} + {{- if .Values.proxySettings.PROXY_ENABLED }} + envFrom: + - secretRef: + name: {{ template "k8s-triliovault-operator.fullname" . }}-proxy + {{- end }} + env: + {{- if .Values.proxySettings.PROXY_ENABLED }} + - name: PROXY_SETTINGS_SECRET + value: {{ template "k8s-triliovault-operator.fullname" . }}-proxy + {{- if .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} + - name: PROXY_CA_CONFIGMAP + value: {{ .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} + {{- end }} + {{- end }} + {{- if .Values.tvkEnv }} + - name: TVK_ENV + value: {{ .Values.tvkEnv }} + {{- end}} + {{- if .Values.tvkHelmRepo }} + - name: TVK_HELM_REPO + value: {{ .Values.tvkHelmRepo }} + {{- end }} + - name: INSTALL_NAMESPACE + value: {{ .Release.Namespace }} + - name: REGISTRY + value: {{ .Values.registry }} + - name: ADMISSION_MUTATION_CONFIG + value: {{ template "k8s-triliovault-operator.name" . }}-mutating-webhook-configuration + - name: ADMISSION_VALIDATION_CONFIG + value: {{ template "k8s-triliovault-operator.name" . }}-validating-webhook-configuration + - name: NAMESPACE_VALIDATION_CONFIG + value: {{ template "k8s-triliovault-operator.name" . }}-ns-validating-webhook-configuration + volumeMounts: + {{- if and .Values.proxySettings.PROXY_ENABLED .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} + - name: proxy-ca-cert + mountPath: /proxy-certs + readOnly: true + {{- end }} + {{- if .Values.tls.enable }} + - name: helm-tls-certs + mountPath: /root/.helm + readOnly: true + {{- if .Values.tls.verify }} + - name: helm-tls-ca + mountPath: /root/.helm/ca.crt + readOnly: true + {{- end }} + {{- end }} + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: webhook-certs + readOnly: true + {{- if .Values.securityContext }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + {{- end }} + resources: + limits: + cpu: 200m + memory: 512Mi + requests: + cpu: 10m + memory: 10Mi + initContainers: + - name: webhook-init + image: {{ .Values.registry }}/{{ index .Values "operator-webhook-init" "repository" }}:{{ .Values.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy | quote }} + {{- if .Values.securityContext }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + {{- end }} + {{- if .Values.proxySettings.PROXY_ENABLED }} + envFrom: + - secretRef: + name: {{ template "k8s-triliovault-operator.fullname" . }}-proxy + {{- end }} + env: + {{- if .Values.proxySettings.PROXY_ENABLED }} + - name: PROXY_SETTINGS_SECRET + value: {{ template "k8s-triliovault-operator.fullname" . }}-proxy + {{- if .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} + - name: PROXY_CA_CONFIGMAP + value: {{ .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} + {{- end }} + {{- end }} + - name: TVK_ENV + value: {{ .Values.tvkEnv }} + - name: TVK_HELM_REPO + value: {{ .Values.tvkHelmRepo }} + - name: RELEASE_VERSION + value: {{ .Chart.AppVersion }} + - name: ADMISSION_MUTATION_CONFIG + value: {{ template "k8s-triliovault-operator.name" . }}-mutating-webhook-configuration + - name: ADMISSION_VALIDATION_CONFIG + value: {{ template "k8s-triliovault-operator.name" . }}-validating-webhook-configuration + - name: NAMESPACE_VALIDATION_CONFIG + value: {{ template "k8s-triliovault-operator.name" . }}-ns-validating-webhook-configuration + - name: WEBHOOK_SERVICE + value: {{ template "k8s-triliovault-operator.fullname" . }}-webhook-service + - name: WEBHOOK_NAMESPACE + value: {{ .Release.Namespace }} + - name: SECRET_NAME + value: {{ template "k8s-triliovault-operator.fullname" . }}-webhook-certs + {{- if and .Values.proxySettings.PROXY_ENABLED .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} + volumeMounts: + - name: proxy-ca-cert + mountPath: /proxy-certs + readOnly: true + {{- end }} + serviceAccountName: {{ template "k8s-triliovault-operator.fullname" . }}-service-account + {{- if .Values.nodeSelector }} + nodeSelector: {{- .Values.nodeSelector | toYaml | nindent 8 }} + {{- end }} + {{- if .Values.affinity }} + affinity: + {{- toYaml .Values.affinity | nindent 8 }} + {{- end }} + volumes: + {{- if and .Values.proxySettings.PROXY_ENABLED .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} + - name: proxy-ca-cert + configMap: + name: {{ .Values.proxySettings.CA_BUNDLE_CONFIGMAP }} + {{- end }} + {{- if .Values.tls.enable }} + - name: helm-tls-certs + secret: + secretName: {{ .Values.tls.secretName }} + defaultMode: 0400 + {{- if .Values.tls.verify }} + - name: helm-tls-ca + configMap: + name: {{ template "helm-operator.fullname" . }}-helm-tls-ca-config + defaultMode: 0600 + {{- end }} + {{- end }} + - name: webhook-certs + secret: + defaultMode: 420 + secretName: {{ template "k8s-triliovault-operator.fullname" . }}-webhook-certs diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/mutating-webhook.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/mutating-webhook.yaml new file mode 100644 index 000000000..692feec4e --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/mutating-webhook.yaml @@ -0,0 +1,31 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: {{ template "k8s-triliovault-operator.name" . }}-mutating-webhook-configuration + labels: + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }}-mutating-webhook-configuration + app.kubernetes.io/managed-by: {{ .Release.Service }} +webhooks: +- clientConfig: + caBundle: Cg== + service: + name: {{ template "k8s-triliovault-operator.fullname" . }}-webhook-service + namespace: {{ .Release.Namespace }} + path: /mutate-triliovault-trilio-io-v1-triliovaultmanager + failurePolicy: Fail + name: v1-tvm-mutation.trilio.io + rules: + - apiGroups: + - triliovault.trilio.io + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + resources: + - triliovaultmanagers + sideEffects: None + admissionReviewVersions: + - v1 diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/ns-validating-webhook.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/ns-validating-webhook.yaml new file mode 100644 index 000000000..f0e0618e2 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/ns-validating-webhook.yaml @@ -0,0 +1,37 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: {{ template "k8s-triliovault-operator.name" . }}-ns-validating-webhook-configuration + labels: + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }}-ns-validating-webhook-configuration + app.kubernetes.io/managed-by: {{ .Release.Service }} +webhooks: +- clientConfig: + caBundle: Cg== + service: + name: {{ template "k8s-triliovault-operator.fullname" . }}-webhook-service + namespace: {{ .Release.Namespace }} + path: /validate-core-v1-namespace + failurePolicy: Fail + name: v1-tvm-ns-validation.trilio.io + namespaceSelector: + matchExpressions: + - key: trilio-operator-label + operator: In + values: + - {{ .Release.Namespace }} + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - DELETE + resources: + - namespaces + scope: '*' + sideEffects: None + admissionReviewVersions: + - v1 diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/proxyConfig.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/proxyConfig.yaml new file mode 100644 index 000000000..e8c4537f6 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/proxyConfig.yaml @@ -0,0 +1,19 @@ +{{- if .Values.proxySettings.PROXY_ENABLED }} + {{ template "k8s-triliovault-operator.caBundleValidation" . }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "k8s-triliovault-operator.fullname" . }}-proxy + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }}-proxy + app.kubernetes.io/managed-by: {{ .Release.Service }} +data: + {{- range $key, $val := .Values.proxySettings }} + {{ $val = $val| toString | b64enc }} + {{ $key }}: {{ $val }} + {{- end }} +type: Opaque +{{- end }} diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/secret.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/secret.yaml new file mode 100644 index 000000000..782140c5a --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/secret.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "k8s-triliovault-operator.fullname" . }}-webhook-certs + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }}-webhook-certs + app.kubernetes.io/managed-by: {{ .Release.Service }} +type: Opaque diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/serviceAccount.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/serviceAccount.yaml new file mode 100644 index 000000000..4c51e5fa4 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/serviceAccount.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "k8s-triliovault-operator.fullname" . }}-service-account + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }}-service-account + app.kubernetes.io/managed-by: {{ .Release.Service }} diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/validating-webhook.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/validating-webhook.yaml new file mode 100644 index 000000000..c66b6a429 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/validating-webhook.yaml @@ -0,0 +1,31 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: {{ template "k8s-triliovault-operator.name" . }}-validating-webhook-configuration + labels: + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }}-validating-webhook-configuration + app.kubernetes.io/managed-by: {{ .Release.Service }} +webhooks: +- clientConfig: + caBundle: Cg== + service: + name: {{ template "k8s-triliovault-operator.fullname" . }}-webhook-service + namespace: {{ .Release.Namespace }} + path: /validate-triliovault-trilio-io-v1-triliovaultmanager + failurePolicy: Fail + name: v1-tvm-validation.trilio.io + rules: + - apiGroups: + - triliovault.trilio.io + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + resources: + - triliovaultmanagers + sideEffects: None + admissionReviewVersions: + - v1 diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/webhook-service.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/webhook-service.yaml new file mode 100644 index 000000000..bed6993c7 --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/templates/webhook-service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "k8s-triliovault-operator.fullname" . }}-webhook-service + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "k8s-triliovault-operator.fullname" . }} + release: "{{ .Release.Name }}" + app.kubernetes.io/part-of: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/name: {{ template "k8s-triliovault-operator.appName" . }} + app.kubernetes.io/instance: {{ template "k8s-triliovault-operator.appName" . }}-webhook-service + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + ports: + - port: 443 + targetPort: 9443 + selector: + app: {{ template "k8s-triliovault-operator.fullname" . }} + release: "{{ .Release.Name }}" diff --git a/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/values.yaml b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/values.yaml new file mode 100644 index 000000000..2b729150f --- /dev/null +++ b/charts/k8s-triliovault-operator/k8s-triliovault-operator/2.6.400/values.yaml @@ -0,0 +1,62 @@ +## TrilioVault Operator +registry: "eu.gcr.io/amazing-chalice-243510" + +operator-webhook-init: + repository: operator-webhook-init + +k8s-triliovault-operator: + repository: k8s-triliovault-operator + +tag: "2.6.4" + +tvkHelmRepo: "" + +affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/arch + operator: In + values: + - amd64 + +image: + pullPolicy: Always +tls: + secretName: "helm-client-certs" + verify: false + enable: false + keyFile: "tls.key" + certFile: "tls.crt" + caContent: "" + hostname: "" + +nameOverride: "" + +replicaCount: 1 + +proxySettings: + PROXY_ENABLED: false + NO_PROXY: "" + HTTP_PROXY: "" + HTTPS_PROXY: "" + CA_BUNDLE_CONFIGMAP: "" + +podSpec: + hostIPC: false + hostNetwork: false + hostPID: false + securityContext: + runAsNonRoot: true + runAsUser: 1001 + +securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: false + runAsNonRoot: true + runAsUser: 1001 + capabilities: + drop: + - ALL diff --git a/index.yaml b/index.yaml index 2b892cb15..9811dbbb1 100755 --- a/index.yaml +++ b/index.yaml @@ -1815,6 +1815,28 @@ entries: - assets/instana-agent/instana-agent-1.0.2900.tgz version: 1.0.2900 k8s-triliovault-operator: + - annotations: + catalog.cattle.io/certified: partner + catalog.cattle.io/display-name: TrilioVault for Kubernetes Operator + catalog.cattle.io/release-name: k8s-triliovault-operator + apiVersion: v1 + appVersion: 2.6.4 + created: "2021-12-24T09:14:40.117189869Z" + description: K8s-TrilioVault-Operator is an operator designed to manage the K8s-TrilioVault + Application Lifecycle. + digest: 18bdfd0abe13e97e9443e5b537c49e5c42d2bc1c72cce6d72d51571d91989b57 + home: https://github.com/trilioData/k8s-triliovault-operator + icon: https://www.trilio.io/wp-content/uploads/2021/01/Trilio-2020-logo-RGB-gray-green.png + kubeVersion: 1.18-1.22 + maintainers: + - email: prafull.ladha@trilio.io + name: prafull11 + name: k8s-triliovault-operator + sources: + - https://github.com/trilioData/k8s-triliovault-operator + urls: + - assets/k8s-triliovault-operator/k8s-triliovault-operator-2.6.400.tgz + version: 2.6.400 - annotations: catalog.cattle.io/certified: partner catalog.cattle.io/display-name: TrilioVault for Kubernetes Operator From 7202a7bca0359dff477459989f9016235fa47d04 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 28 Dec 2021 07:19:39 +0000 Subject: [PATCH 3/5] TVK 2.6.4 Operator update --- .../generated-changes/patch/Chart.yaml.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/k8s-triliovault-operator/generated-changes/patch/Chart.yaml.patch b/packages/k8s-triliovault-operator/generated-changes/patch/Chart.yaml.patch index 974d77314..5664bd020 100644 --- a/packages/k8s-triliovault-operator/generated-changes/patch/Chart.yaml.patch +++ b/packages/k8s-triliovault-operator/generated-changes/patch/Chart.yaml.patch @@ -4,7 +4,7 @@ sources: - https://github.com/trilioData/k8s-triliovault-operator version: 2.6.4 -+kubeVersion: "1.18-1.22" ++kubeVersion: "1.18 - 1.22" +annotations: + catalog.cattle.io/certified: partner + catalog.cattle.io/release-name: k8s-triliovault-operator From ae7efe4194888bf6c30d2a76f66181c853f6d791 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 28 Dec 2021 07:28:29 +0000 Subject: [PATCH 4/5] index reverted --- index.yaml | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/index.yaml b/index.yaml index 9811dbbb1..2b892cb15 100755 --- a/index.yaml +++ b/index.yaml @@ -1815,28 +1815,6 @@ entries: - assets/instana-agent/instana-agent-1.0.2900.tgz version: 1.0.2900 k8s-triliovault-operator: - - annotations: - catalog.cattle.io/certified: partner - catalog.cattle.io/display-name: TrilioVault for Kubernetes Operator - catalog.cattle.io/release-name: k8s-triliovault-operator - apiVersion: v1 - appVersion: 2.6.4 - created: "2021-12-24T09:14:40.117189869Z" - description: K8s-TrilioVault-Operator is an operator designed to manage the K8s-TrilioVault - Application Lifecycle. - digest: 18bdfd0abe13e97e9443e5b537c49e5c42d2bc1c72cce6d72d51571d91989b57 - home: https://github.com/trilioData/k8s-triliovault-operator - icon: https://www.trilio.io/wp-content/uploads/2021/01/Trilio-2020-logo-RGB-gray-green.png - kubeVersion: 1.18-1.22 - maintainers: - - email: prafull.ladha@trilio.io - name: prafull11 - name: k8s-triliovault-operator - sources: - - https://github.com/trilioData/k8s-triliovault-operator - urls: - - assets/k8s-triliovault-operator/k8s-triliovault-operator-2.6.400.tgz - version: 2.6.400 - annotations: catalog.cattle.io/certified: partner catalog.cattle.io/display-name: TrilioVault for Kubernetes Operator From d677f7e24503753834a5735335f8d4f979654435 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 28 Dec 2021 07:30:46 +0000 Subject: [PATCH 5/5] TVK Operator v2.6.4 make charts output --- .../k8s-triliovault-operator-2.6.400.tgz | Bin 11489 -> 11495 bytes .../2.6.400/Chart.yaml | 2 +- index.yaml | 22 ++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/assets/k8s-triliovault-operator/k8s-triliovault-operator-2.6.400.tgz b/assets/k8s-triliovault-operator/k8s-triliovault-operator-2.6.400.tgz index f4dec2ef03c8ae9fcc2b12e8e4be27a6e0ea2228..bff015ac4415e82783d7fd4364a1742ab4d9f904 100644 GIT binary patch literal 11495 zcmVDc zVQyr3R8em|NM&qo0PKBfd)zkC;C$wMJu`(k2&|#(LT18S4ZDd)Gq&Pd9ch*6Z z=x#(LzyM%N9ozfc_rbxldA1Ha6XJudCV@hsP$(4Y0B;YuEg1GOUBbv0HVqMjg0jK! z0y5#OVBr7hp=CH64iEPB)c?cbu=xLIynpbg(cb7_yuW*}yF2{TaC9&ljsFCO5AL}| ziMW95Ps0cIRUF*!q(DNbfC5v(Cl&xM6ws%0$Av=p$iZ~rA|~(*BX0si$OJ*Gw3>%` z=);vwV1OpzMsd_z$x&cN8TdY$B1Vuv9K10MRtkk7A3=@`lq%k|V2Ix$#xW%mupC)1 z43nQ@=fK&sJj7jwL!lmhf5`0&LUxP+z#KpVVyM7F9M1{zfS@3N1kMo<3sh`w0dN$C zK6Vw+z&V~FcjfxXu@+P!y$~Yglfht)#Uh$IE)52H3@1>)LFJIJD^ZOb-`(9gx|*cQ zU1+pn3VjMaJ{S+jqrq@A(1_XN;dp5KbWZK7Z@;$Z46f`sLx?ybnOnEf6eaW- zIio{hgOM{HTLHvGKui$h6UzoDfY_gakil8x`;HI21^k~078U?{R?Pd+$ZD7+P9x?b z1$slGEOWCu99o}xwfyImO8LKpeuVg=Yyb`Ne>@uP7v=x%-fl1dpQF5ZkrUR5bY^Id zxnQda*g}yrcbODKFo3^dGPm6Y^s$TV@!szKXt-rrG1u64Xu6>E*2V-2xt}l;QjP_c zfJ!S_Ruu;pn^#H+OThUAY$+MBWm#f*`yKLwD-_ZR*xIrzIGf3yRuUkg9y-eWmR)NZ2MXgJr%N3Njk2C;z0F95JX0EN3ay$>1U zJlGhm&lHin7dISK2` z0Z0BFTyabIswGD*L*hb-@T~>%1Kag6BEps%KHstcSR#gJs|lDvpCbzZMBvm%>F-;# z`UcAfTf*ngEn3M&vUTRE%Y=FgkM#zoW(0r*d3Vpf?5D^^MKG-s6y|qT*|GRsycJu3hJlyZs|MQgh?+0I6r}rTwp0akx#SG|7 z{p~6fp!Mb8<45cLdmDIYh6w^&RXpR!##_Knt1CH@U)|1IeXz_bec*%CJBSMocGaIa zxQ=Esd=Iwl6dWR+`nw$}Fbpqp*n|udF#}uw#kYW?jhhOeHSm@q$uUDvAOMq5%p%`k zfnOu&D{B~lVW^1ZSU)0-y{a$d7$o61m?9TO905)Pl(m2<63;O5Jq{p4z{dd=+Uz72 zn1h$ol_LMi#kH)9$sF(yx!YZ4LSmbr4LnOoAHPh_X)Gm-{ZCfC_J~U*YrrCwBVJIj1X-46AP{6puxYL+!Qe!j-Y`M_Z z15@UN?Q9cJN(SSzP!f5DeFSdN3h)Jud=E?!$ipjQAbBpse&v5k*7($0_oI{+`k(7Z zTp-4%k2W(0H|T$R`{TWW{x{ki_4eOqDYk9r+-YnIT?a;DK^gu{$wBA#P?;!~BkL9u zZvu`rKU`5CSpgDIF5^k!9(w;i=A1@F(fRn%e*b=5hJ5^JYyTUwCDT~|_;8ARV|IdJ z=;V#3A!Nd)Gubz2(Rrd8I`Pt92N{p$vEX6C1te};`lKM&X;B7VSMluWN+F$)^ct}x zR!4A)MZPxN*#L(4TSlXhr`EeKzWl;i!xOJv@zoNsY3A`9iR5n|^Yq6Z6v~!e+7Apd zx)+EjySU-3s*c@=3mU{P)DDi7qq+{3H0%Ah-KeNl_mX+mM9A=q+aG7@j{BTuU)nG1~7bLB0w*|%6VaQwX7tl zBG1yOPGoKzJQ~?ZH%`Y8M53YA(+w*$geyTmW1o6jBq~L0ix~0QU##;(?nvAz>Vi+aA&}k{y zgl?r^L*Lh=BKJ2AEKREn9Lh^5tBJXoR^cbfKMKQD!zIo zdum3+s*dp=NM_Lc>*nesnS2!3|-G(_}3X?p|vIzdJBz%2oA^%gwc*AJGdig(k zH5{$kf5zj3Uj9Ev$;y9uI!Zxj+K1dR9pD}D9@flG*e9bu^7 za1&ptTdJVS^9*Mg-q@HmS}=zRL*$ws#<7u&P1LaB{tcp;#UhKJ!};M@w_@riV(h12 z?x$k#jhS3Fj2T^)T(D<`5ln!nlX;)^orH{5G&s9F&R15EqZO4e&rZ_H1&?GQPBg7o z8hxsp3;Hh@_-kDiL45!O6Auvq4)fg`XPACqy!9%HB&NF!8gfHGQgoi3rEA=FAfsY?28IS_b^Ik*M>t!Z5I#XG@v(w0F@B#c9QGxOhY8}J5 z=;VAmM3&z$8f1gFW23Oq!?Wc9nytd9fN*Z&3^w^LHyu_w=epAM>CMgA#kbe*u1}Az zPHzgsQUUCbG_D4mD}40Tm>(adH7n8HxUbS#sC}FnnONSQl4TY8H*ddxcY5)*5$AF! z27^Wf;@pZlEWSHEfBo+2^zuy`T&e(8kR&v6#)9St|)Xa65 zSEt{eUEf^&s}b#th$;nibn^P_`ugn6#k z1l3v~DAxq5HNerh1wq!FCc3Bq*R^ytH;g7=JRAmv=K%^-zTf_6{2CVs@@s^61*B0W zpwTdag9#SLHTr5UGckqKRYxt&bo|5$>gU5Hz2@9&&QGp6KaNuT=t^y>X`Y`RU7x;t zdwL~xvTBezZ2l;@;iA_#|I;+i6tf>szy9vcoA2LUpI*H^t2xkgU-?;`1iPrV_s2X? zX%VJCKEY^;D%11m=v60#=hoeM&I@|+m@ZJTzBOboJVolOFb(dT0WMd&6Nhdd1^l-BGZfe(4fXZL8Kr2Cxy{m53kY5MLv7 z?m_Xa(L~i;PkZBGHNhV$Nk6qOx-ZXPTEu@8Rlm+rAWio_4adVm{Kt5AJnG{=o}=XA zKWc*h)3}h=h8=#?+;E&zYabyPu<@kvM-TsNK8bDQ_BP;DoSnW3N>8mObetbM0mt*d z|J?$q0-9Wj_3&*de>`ayEF?>)b!tT!lGeg1uJW=J2Nh+PjKv^ z)7eagPJ#P{eQeSD#rhhcl-FyXDQwH z|F;P*Je3B}&VKd>R|DD_8ULWVfT0btUCNN${1XW6_WTTa3mbm|=z2XqwdB%IbKR#= zL=w-S;@;#aUwYT)`YoS!-QW|2q%_YhlOb86h2%7mbzMZiJ~=%h=F5_kWCbch~YicK7@HKc1y@^;)-+>1DSmshzNJbAO!A zd!t;FKbjVih6HS+C&bewxrjkBN8r!5Xte|Wyo7%ChOiu4C5)tM{ayW+ zxj5_tm>%pQ;-=MZ(F%P0I7ynA7l~b6=byX@;jaxXw-C(h-ocFobWSvu&3~))pA9tFKn^so|Kk0>{U40_{r_3Y=V<@! zjlWGYp|||Du>3x{AGpFG+o2&x3>li? zd*p#TEEeE@Y&+l$@mGKn)l#AaLd1ZN334pwe%Hx18y3Y@q&)A1vkr`A__lFUcSUG==VM6siw}aO+El--Xtf&J^BSUpgWPtuOzd z^#Z(w4AY2%vy)S9IU%FJAXiup_7EKCdW`;Jy#U`KKQNHq{CIJCb^W;up33!qes+9% zaeew2eKf8A;j4oEXS6>$=dAG&BkeGf79t$wjU;2gV%aP=*vI|MxBVh>6A zU_PuQ7wPBD*nMeLD%bzj>CwsSQz!5q-belVAC2}7hQ;;2w>R$B|8tZV;QK>vXFf+~ zC!c^|bCqtJ=^zUehU(Hy1;(;oyZ~oJFzQ9FvUbV`mkg;-xpOQKw=6sR#l?{`I{b@e zgCjp&Krlm4L=1ts>NNcDdAq48@qq-5-r0H3w@0xn2$vOn4Ra>+Gq)muaq{LpBj7@k>`v<2rRw8B zApdchWPiJP`+aIW1yH{5eR{_yimJ3>(K4&$_nlLhu)XkWQQAI3olOwc9 z;iZ>;Ou*RLcZTYY_GBGg>)2Xz6T1b#3pFg41|cQtE6cgT?*KPq3=!e4QU%_navAw{ z=tF{bz#W?I0CX?kA*O!XQaMJ%+ljw^VVfqttdJOy6UU%J;|GqInvfU)lp(g90y(J( zo@U|a>l>4Vx>{JhUQjNQ>08Ie0x7_pKT4B6Gm=Sl0CU;>Qt>5HTYJOdYrK_tqi&tr z8V`p-`gHxKtEByS|8TDiz-X92SRd9Tf7e3_SjTmoQ|NsSeMnpsU#TkTGyz+NQ(fv{ zvZWW@ix)4zQ5gFAwTeP$ja}`7*=&FI)uDT6|9Th9TnS?|7-{GcA@cMKz%cFdaKzW38osg*W(Nn; zgXy8SZ_n>V@LLYo&QNnJ(>`$b4))xA@719_6SoKRO`*nX+ur|b|KMQu)ho}l=X~$p zeGsned}|->xwE~4!@WaW+`8UxO;AUN>rmyI{p#SAd${*%-ws}d?m-C;G~z0jfnBv3 z*#`$x@0E9W;O*Pqa`D@=71V=Z?~t$Yy`cd}X^_Y;sq@UVB+D+?iCz;;JenV`k@jbo z2GOB2-rsk|dn0EwJOlvzjZlLAk=Eba+a25-UzSh~05A?-RZphWj_%;9*d{xI3FqgzjbeP@3R zN+@tRtR_Gu0`a2mfWZFH866yKhCr&RwkcH<7&@A3JMq9l@KwViDR>EL5ctY@^{O)h zyTN!|y_{0LVF9_?T$Cc9Kj-WL^QH8N$IGd4BRM`lx|aLHcWFqYx-Jua2UzG^B1R5rolCIF=O&y%*kB+VH*7|E?>$~-f z7vKkCbZd1&iQ-=a(t|02hYxRHi36S04mWFnk|>^E-PIh~dLIl$b~bcw$)} z2n>+XGbdKws9PlwK&hChH1t|8z&Ek>xHPKRZlSBk=;lVNi-DXy{iQ;lnZ9KSTZ5R1 zQ@WTt7V{QU$FdSVc~Y$?YZ7bZq=sBN?t;2pJsjCKpiEBjjIuy43&?0hJf+o|u-=%2 z#)R z1gT4wi)lZQ5Gt}63>m}l91#^?s-nvfQ^1q>kk`OrDLdgWQ}X3TMsDz4j127R5-_6C+CHJ#Gqe_rOudHP^K>JP181( z`r9QOlX>JrR@T-^ZqrGkq&*A7TTGmP;(2O1pnu6Q5r`dAKMK;cj$b$>`T}xCQpPFu zHs&&UvdUlny>>xyb!kHd_@cKm2RZws0hao*zvEJ(N5>smKMySZ_Z{iGoxN0(=Bcdv7gfz*qY&tCC-iLnf81x7bZe4bU@ zq|4FeS@J7nQiuzjzdI_k#xqX~*nA-oHcE@Ov1(ilmm$xLQQP8lFakpy5wZSN10XBO z^MLw%x1*8@5KA;)my#u70x;y#Il;dru$7{p#z7QdDy}Bb*SBNs7^Qs$7?Qn!h-BdD z3$z^YI@YHqNeILoi&(ZvV8IhtIS|wV$4cPKbBR7mc@8)u;1~wTKZYDV z`2{Ss`+e66qF>kzrQ#UszbOtQCtqIg=(ZZ2^tU%#N_ zy9ZS`Es$DEUL>`6xze~`5EH?HJWOQH+adM1vj(gh0bsuQa8!xN8Zsy9#}skZFd0G? zL6txm3%XK>Kw`R%Xfv|92AUzpkarSEMz~HoK2zb~=JDx0awD-O9@`KZ$&;k-n~tRT zieKnZ2tg}BYI1Vz^x{xpKGQC(gia{EQc&?Co?+$qssX7NHAcR-1E!GxSf~~6E-2*) zKs^zv$0epp%BrY)%4%S$GpX^wWKePx9a4apgMf08(!2(w+2>@}$w7Rs0!Fw1JPKrY zcL>iHg6{zAAV;wXg6^V$oEnt?A;DFskwH7lap>0wGZd&Wsh6=7tpRJ~-A>$cjh9L% zY^Mey60WnoqdZ-a3WJj)o~{5ED*IPSc}AnTrVH{7vUJvJ;?=$=wLvlmTbhVl@xCfM z!kQ$CS}H{Y6}OK(Tm)Ro7~-MS!N`2=w#&aJ;9m0WWIAg=F7SL2&ogA&l9K0~^5rfI z7AUA(?Vz|&j|f0PC{`)tEGG!Wf)*42nvvAz!1efWAmu0)hDX5=yi`nz#TQ&HGMk3m z)q{}bNF8gM5d(xKeXCAtp-Sb!=d=|L&C)ZjCs9Ns8-rF}^0e0+7U%h?LG1v@Id!pA z6xwi#E_wFTB(En!`@w;l>svbvRUQtdtjP~KD{5N61X2b_2w!j$JlZr$&}KzcB3+5B zVxv|NL1uoX;58qF=SKhD0T8H50hLH9o)M}_Y7UklRZf{vr*6?ofil{CD|lTvL6=)p zq1=>}HN`;9oWe8-ii~O08mI~OMM}qR-Ks+6tt-jp!<&uwDmh^2iT;9{6hKP&0*4*O zE2PZgNG+oH?51v;Nl@f+ujl~rjO>65D&&8s_n1pX;)Ei8L52G1fNzCPOl%MGyix3A z2Go5r)-QdoFU746G6q+YfZ5X{cfeVl-mr#u)>VYLJk3!S6H?g&6x1%Ptk4P~u8xU> z5?k%b60clu9YA7k=2YUAoz*Ogy5kN|V-(BLlbwDm>NVwJIWIv-ce8*?rTAeo_q%Yl zQ3iLw-2%G{efCgJL4jDvkla@xZ!c+bs*5|K+VF<$O4nJa+ss)r z3shP6ALJ=A@-uM|qMb2c51GE!o;A)Ym{jxPMV^5U_ zC^7y4$x%*AtZN{f@ffUK6`&}n6w)!~G?18LB4W`h(MB(5)xw5VwbwPs;D^W%~hSJ1+?9SiYKbb_a*hU<7FMmRvs6i^EZs+Lwg!?T&Vqe z+JAI(aUv;m)54W-LqqD*`6@dPIz1N$VeDsvfJalKhqv)hTofj@_f5p5KbO~+{#;&D z`g3`IE-&ESpUeAmd4Dc1DgWu`^4>Sm>p)5Ab)cHk>p(3B)ayW|^g2+l1NAykUCqx! z2Wkzt4ajC<+3N<&2J3naY7G@a>TQ%(5>l@wt3;cMU26N(g`#Q|D?_yeWPB$a2HFn3 z1Ae0f?WkydxoDNmnu-NtvieKDT@hW~XQhGC!u;JwTsN73$FQkOxAI@Qfro7I5(W=9MkIb3$*9fr{ zpi9KkvsRK|T(@%5qV_P%feSgR$nbpFNWq3aDNr1A5s1!vj_ovxAgwjUQiD#3)3D0{ zRXY`1R_~|~m(G6KAi5p7U^`<^m!qLF3pE>jI)LnA8Uh=chd@^o5hzZH9F@@p^46kG zAVJQyw2{RKY}`_pqwQdf%- zC{B?vT=mcY7oC1+>q2(bje3R}}-p=#_+H}w%(Wu@9!lbT>U zg51bp12!?*fX(^3yYU8eHsF9xMjX)HkOR6KbHD~8SBlVi=36n%C41FV_uX-WIbGM> zG{Rcz2w*6s&U>j`s0H+~{q7Di<5JPrhSn^M*dCMVt~FSR5#~Vh(-QiK2oo%54y_W~ zqW;-lTHGxt*P4$$*kTU0ZqaIMrzn?NL)Ayt%6Z<5=C-0EWKSMU8^+r5*o(i@(g z<0T^L7XFfN*DD<+POP2!vaXuc!Y)%=c3P?nwSW^7!*g^h{N{L0Vcjf0|( z5p7fR^N11c>`vI+mC$j%p2UUl1nz?;a~-sH8)$bxE0`Tz2CdTLLApdXP~JLlb?d6_ zT?F0T1Fghv2iHJs_HTswIBtQK61KxSZ7XLwxB;HV1<=v_-_CFVN{t6~rhk1-Zv@)j z?4LcWHxr@B?q4(IH-derslO!$x3eU-Gw(l&iMU150}*)h#D^@$S7bj_ z;0~7*dmxO23G42V0Z{?*51bc~n}*Wlh_;6BF3Ax!Fyqfi_Q?@7$q`kv)@Mjm&s3iw z(Pv0(FjUZINVGI)^cfPS^cfO;hD3WHeTGE+2>T3)K0~6>-HHEeTGDzA(898&yXlBeTKw?G9+>a{K_Z{q67{ZvG>f8Bu0##c((i9H=SnnqA9NN)*IbDjpn02jr(B5|s7V$@pDWSl zO7yuB4W-YO=yN5~(&tL_xe|S@M4v0s=StLz?R{C6tK35_xeXc}#>2oFe zT!}tc!j#V^SEA;n5;CqjXI#59MC${}ttwSV1*R)QY}$D3do5f*-n#{xQ0y`IM#2}@3qE=L?yw#cHF4sP13=-b*yH#T^fXxAR>+_nc;cFV7ZMwN1o%- zMqoizq_pp=f$J?JCl9PJ%f}x}PkTQWPEE2gjyZ?el)YEVYxQtk@d^eEnQ%Kk;5J=ckM&jJoo`PUhejIxX46>!uuq zK3&NpaX;(NGwTI{x0(17B+_~7Hs1^62X8A(+&MhIODYx=%9J1Cq&#zwG*;^s49eVW zbOvtTey{om?gFwBD}Jri+gReM5hKQ%_31B8P{@!v&g$_4)9#CoYO%m_TTV^_~eUvULrs70)a&z^@ zF%dT&)f@Kg1?3eHa}AJVV)~F*AlCpu`1~5V3<=4Q8$hTTSbzlVm4@fsK3*3ozTy5M zXYN6YL-uo{o6maf#N`Hlk?AjE`A!@xw`gVSNFd`n`KHud9Y?Y05Ip4LIiC6|eu_mT zHCOJW$@}RChAVDIFjhoNJgiNj1ylg!+LYOiz)4t6mtE^BZnVx84UvnnmCg8A5aUkQ zZO^X|0idI(trP{Il{f%xL<0ES!~)nvG=Mc`Fhapg?w-+}!h0M<0e}IGw4*P+6eD4> zs;Mw`Z19?@z{(k&fQ1ktp9}^mt`4RHkGg!|QsSaes6Wy}@gRT%&XH|8wUbWmgxLn` zyat;0RC94i&vKuX<*v*u6qyc_a;B@mB;krg8&x4G33SW>4X}^`R&8ymq^j~LV*xxg zgOM+kThlBJbuo*+O$XhFK6bJ2SE(0lM_-O~hk4~EsFl|o2chfpkSxb~jF1TZI{CoLa`+p7qMQKu&n+hD}MLqpZKK z9O4=}N*P*U4sKGsFb7Zws4nXfG{#uYEUEAZN+iwAP?;-?1XBV3e@kLlcF=5wT=5SO z@i^(H)`6YGj{GhD>mOw<)uzx<-D{P2&pRnp)kK*y<50uXP$WSV&L-un0w^%?52~ux z!!tm*$&ScK9kbIKD@r9)xwbB-NzOq#;8I<7ls-{`GZ$2+=~QMuH11S2p|v@3eV+!> z>hWa*X|t?u!b>X0C1{*NS5CKEv`PaaP57<~HmMFLN|+}OB-AmAe>EZOG?-$dk<(qq z6DxbI1RBR95lIYC7qni!4J^eL;z5`A&+oyh13D-1U z3oyIGzUM-wH*GBh0H>NqR7OQ5L>H1o^rW1iFBJnJWCFX94;hf_bWU02#T(6*n}kiT zkxPkJsU_xxXR%dwX4EkgF>De>aOF*mptw+8nw#JZ&(c{ecalZjtfAzxli5XWzv+a8(SFNdrCDt7W3P6M#aw z73V0kdR}a5b3uU>%vM?}Gb?Y8*-35knV_^Lkr^`<_(k#`1Psm98q=$1!xh#-EiF~6 z81^xJD;e`B4BMITmDT=u0hws9TbCePZUnd2f|jfnW8(sfs31r3(jy(*Yo+e9Yt_UA z(V5#jr^?IWDR4>_tT)SbQLP9`356?E)CQ{#V?eY*ECej<{PlEUJhZw!zjn(C3wJf6)HH zO|Vt3H(&%TF!b?n6(KyfaR67o*0WXh_6qq3a`X+ver26A#>{-mh1PxOjnM+gGiY=b zB>^OOhBowrkw^DlF+GaPou%_mkqX)7J!0*l7WEmq$OUCm&}E)P(>1SvSybTtM=M=l z&~;HLkf#hLy5=n=-UMvvg%bJ^gTDEh*&4u4|F(3;$TMWo5C7DczVxLpefd=7{|5j7 N|Nnb7J30Vz0RTW7I<)`* literal 11489 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