diff --git a/assets/charts/components/istio-operator/Chart.yaml b/assets/charts/components/istio-operator/Chart.yaml new file mode 100644 index 000000000..15268daeb --- /dev/null +++ b/assets/charts/components/istio-operator/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v2 +name: istio-operator +version: 1.6.0 +description: Helm chart for deploying Istio operator +keywords: +- istio +- operator +sources: +- http://github.com/istio/istio/operator +engine: gotpl +icon: https://istio.io/favicons/android-192x192.png diff --git a/assets/charts/components/istio-operator/crds/crd-operator.yaml b/assets/charts/components/istio-operator/crds/crd-operator.yaml new file mode 100644 index 000000000..6b85c37c1 --- /dev/null +++ b/assets/charts/components/istio-operator/crds/crd-operator.yaml @@ -0,0 +1,46 @@ +# SYNC WITH manifests/charts/base/files +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: istiooperators.install.istio.io +spec: + group: install.istio.io + names: + kind: IstioOperator + plural: istiooperators + singular: istiooperator + shortNames: + - iop + scope: Namespaced + subresources: + status: {} + validation: + openAPIV3Schema: + 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://github.com/kubernetes/community/blob/master/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://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: 'Specification of the desired state of the istio control plane resource. + More info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + type: object + status: + description: 'Status describes each of istio control plane component status at the current time. + 0 means NONE, 1 means UPDATING, 2 means HEALTHY, 3 means ERROR, 4 means RECONCILING. + More info: https://github.com/istio/api/blob/master/operator/v1alpha1/istio.operator.v1alpha1.pb.html & + https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status' + type: object + versions: + - name: v1alpha1 + served: true + storage: true +--- diff --git a/assets/charts/components/istio-operator/templates/clusterrole.yaml b/assets/charts/components/istio-operator/templates/clusterrole.yaml new file mode 100644 index 000000000..53be806ea --- /dev/null +++ b/assets/charts/components/istio-operator/templates/clusterrole.yaml @@ -0,0 +1,113 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: istio-operator +rules: +# istio groups +- apiGroups: + - authentication.istio.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - config.istio.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - install.istio.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - networking.istio.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - rbac.istio.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - security.istio.io + resources: + - '*' + verbs: + - '*' +# k8s groups +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - '*' +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions.apiextensions.k8s.io + - customresourcedefinitions + verbs: + - '*' +- apiGroups: + - apps + - extensions + resources: + - daemonsets + - deployments + - deployments/finalizers + - ingresses + - replicasets + - statefulsets + verbs: + - '*' +- apiGroups: + - autoscaling + resources: + - horizontalpodautoscalers + verbs: + - '*' +- apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + verbs: + - get + - create +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - '*' +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - roles + - rolebindings + verbs: + - '*' +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - events + - namespaces + - pods + - persistentvolumeclaims + - secrets + - services + - serviceaccounts + verbs: + - '*' +--- diff --git a/assets/charts/components/istio-operator/templates/clusterrole_binding.yaml b/assets/charts/components/istio-operator/templates/clusterrole_binding.yaml new file mode 100644 index 000000000..39e266365 --- /dev/null +++ b/assets/charts/components/istio-operator/templates/clusterrole_binding.yaml @@ -0,0 +1,13 @@ +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: istio-operator +subjects: +- kind: ServiceAccount + name: istio-operator + namespace: {{.Values.operatorNamespace}} +roleRef: + kind: ClusterRole + name: istio-operator + apiGroup: rbac.authorization.k8s.io +--- diff --git a/assets/charts/components/istio-operator/templates/deployment.yaml b/assets/charts/components/istio-operator/templates/deployment.yaml new file mode 100644 index 000000000..f08307fd7 --- /dev/null +++ b/assets/charts/components/istio-operator/templates/deployment.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: {{.Values.operatorNamespace}} + name: istio-operator +spec: + replicas: 1 + selector: + matchLabels: + name: istio-operator + template: + metadata: + labels: + name: istio-operator + spec: + securityContext: + runAsNonRoot: true + runAsUser: 65534 + runAsGroup: 65534 + serviceAccountName: istio-operator + containers: + - name: istio-operator + image: {{.Values.hub}}/operator:{{.Values.tag}} + command: + - operator + - server + imagePullPolicy: IfNotPresent + resources: + limits: + cpu: 200m + memory: 256Mi + requests: + cpu: 50m + memory: 128Mi + env: + - name: WATCH_NAMESPACE + value: {{.Values.istioNamespace}} + - name: LEADER_ELECTION_NAMESPACE + value: {{.Values.operatorNamespace}} + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: {{.Values.operatorNamespace}} +--- diff --git a/assets/charts/components/istio-operator/templates/istio-operator-cr.yaml b/assets/charts/components/istio-operator/templates/istio-operator-cr.yaml new file mode 100644 index 000000000..00291b906 --- /dev/null +++ b/assets/charts/components/istio-operator/templates/istio-operator-cr.yaml @@ -0,0 +1,17 @@ +--- +# XXX: Lokomotive specific config +apiVersion: v1 +kind: Namespace +metadata: + name: {{.Values.istioNamespace}} + labels: + lokomotive.kinvolk.io/name: {{.Values.istioNamespace}} +--- +# XXX: Lokomotive specific config +apiVersion: install.istio.io/v1alpha1 +kind: IstioOperator +metadata: + namespace: {{.Values.istioNamespace}} + name: istiocontrolplane +spec: + profile: {{ .Values.istioOperator.profile }} diff --git a/assets/charts/components/istio-operator/templates/service-monitor.yaml b/assets/charts/components/istio-operator/templates/service-monitor.yaml new file mode 100644 index 000000000..5d3cb35e5 --- /dev/null +++ b/assets/charts/components/istio-operator/templates/service-monitor.yaml @@ -0,0 +1,47 @@ +{{ if .Values.enableMonitoring }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + name: istio-operator + release: prometheus-operator + name: istio-control-plane-proxies + namespace: {{.Values.istioNamespace}} +spec: + selector: + matchLabels: + install.operator.istio.io/owning-resource: istiocontrolplane + endpoints: + - targetPort: 15090 + path: /stats/prometheus +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + name: istio-operator + release: prometheus-operator + name: istiod + namespace: {{.Values.istioNamespace}} +spec: + selector: + matchLabels: + app: istiod + endpoints: + - port: http-monitoring +--- +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + name: istio-operator + release: prometheus-operator + name: istio-operator + namespace: {{.Values.operatorNamespace}} +spec: + selector: + matchLabels: + name: istio-operator + endpoints: + - port: http-metrics +{{ end }} diff --git a/assets/charts/components/istio-operator/templates/service.yaml b/assets/charts/components/istio-operator/templates/service.yaml new file mode 100644 index 000000000..93e2638b0 --- /dev/null +++ b/assets/charts/components/istio-operator/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + namespace: {{.Values.operatorNamespace}} + labels: + name: istio-operator + name: istio-operator +spec: + ports: + - name: http-metrics + port: 8383 + targetPort: 8383 + selector: + name: istio-operator +--- diff --git a/assets/charts/components/istio-operator/templates/service_account.yaml b/assets/charts/components/istio-operator/templates/service_account.yaml new file mode 100644 index 000000000..32307f322 --- /dev/null +++ b/assets/charts/components/istio-operator/templates/service_account.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + namespace: {{.Values.operatorNamespace}} + name: istio-operator +--- diff --git a/assets/charts/components/istio-operator/values.yaml b/assets/charts/components/istio-operator/values.yaml new file mode 100644 index 000000000..35225675a --- /dev/null +++ b/assets/charts/components/istio-operator/values.yaml @@ -0,0 +1,8 @@ +hub: docker.io/istio +tag: 1.6.3 +operatorNamespace: istio-operator +istioNamespace: istio-system + +# XXX: Lokomotive specific changes +istioOperator: + profile: minimal diff --git a/ci/aks/aks-cluster.lokocfg.envsubst b/ci/aks/aks-cluster.lokocfg.envsubst index f68524809..204318400 100644 --- a/ci/aks/aks-cluster.lokocfg.envsubst +++ b/ci/aks/aks-cluster.lokocfg.envsubst @@ -114,3 +114,7 @@ component "httpbin" { certmanager_cluster_issuer = "letsencrypt-staging" } + +component "experimental-istio-operator" { + enable_monitoring = true +} diff --git a/ci/aws/aws-cluster.lokocfg.envsubst b/ci/aws/aws-cluster.lokocfg.envsubst index 55bd39a54..7c923ba25 100644 --- a/ci/aws/aws-cluster.lokocfg.envsubst +++ b/ci/aws/aws-cluster.lokocfg.envsubst @@ -223,3 +223,7 @@ component "httpbin" { } component "aws-ebs-csi-driver" {} + +component "experimental-istio-operator" { + enable_monitoring = true +} diff --git a/ci/packet/packet-cluster.lokocfg.envsubst b/ci/packet/packet-cluster.lokocfg.envsubst index 7ea86c1db..927ad4970 100644 --- a/ci/packet/packet-cluster.lokocfg.envsubst +++ b/ci/packet/packet-cluster.lokocfg.envsubst @@ -201,3 +201,7 @@ component "httpbin" { certmanager_cluster_issuer = "letsencrypt-staging" } + +component "experimental-istio-operator" { + enable_monitoring = true +} diff --git a/cli/cmd/component.go b/cli/cmd/component.go index e6d2bb5e2..9eeec84fe 100644 --- a/cli/cmd/component.go +++ b/cli/cmd/component.go @@ -27,6 +27,7 @@ import ( _ "github.com/kinvolk/lokomotive/pkg/components/flatcar-linux-update-operator" _ "github.com/kinvolk/lokomotive/pkg/components/gangway" _ "github.com/kinvolk/lokomotive/pkg/components/httpbin" + _ "github.com/kinvolk/lokomotive/pkg/components/istio-operator" _ "github.com/kinvolk/lokomotive/pkg/components/linkerd" _ "github.com/kinvolk/lokomotive/pkg/components/metallb" _ "github.com/kinvolk/lokomotive/pkg/components/metrics-server" diff --git a/docs/configuration-reference/components/istio-operator.md b/docs/configuration-reference/components/istio-operator.md new file mode 100644 index 000000000..5c85c1778 --- /dev/null +++ b/docs/configuration-reference/components/istio-operator.md @@ -0,0 +1,57 @@ +# Istio operator configuration reference for Lokomotive + +## Contents + +* [Introduction](#introduction) +* [Prerequisites](#prerequisites) +* [Configuration](#configuration) +* [Attribute reference](#attribute-reference) +* [Applying](#applying) +* [Deleting](#deleting) + +## Introduction + +Istio is an open-source cloud native service mesh. It uses sidecar pattern to inject Envoy proxies in the pods, which acts as data plane of the Istio service mesh. Control plane components take in user input and implement policies using Envoy proxy. + +This component installs the Istio operator. + +> **NOTE**: This is an **unsupported and experimental component**. It is not recommended to use this in production. The UX of this component can change anytime as it is tested overtime. If there are fundamental problems with the component then it could be removed without prior notice. + +## Prerequisites + +* A Lokomotive cluster accessible via `kubectl`. + +## Configuration + +Istio operator component configuration example: + +```tf +component "experimental-istio-operator" { + enable_monitoring = true + profile = "minimal" +} +``` + +## Attribute reference + +Table of all the arguments accepted by the component. + +| Argument | Description | Default | Type | Required | +|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------:|:---------|:--------:| +| `enable_monitoring` | Enable Monitoring for the Istio operator, `istiod`, istio-proxy sub-systems. Make sure that the Prometheus Operator is installed. | `false` | `bool` | false | +| `profile` | Istio [configuration profile](https://istio.io/latest/docs/setup/additional-setup/config-profiles/). The profiles provide customization of the Istio control plane and of the sidecars for the Istio data plane. Supported values: `default`, `demo`, `minimal`, `remote`, `empty`, `preview`. | `"minimal"` | `string` | false | + +## Applying + +To apply the component: + +```bash +lokoctl component apply experimental-istio-operator +``` +## Deleting + +To destroy the component: + +```bash +lokoctl component delete experimental-istio-operator --delete-namespace +``` diff --git a/pkg/assets/generated_assets.go b/pkg/assets/generated_assets.go index aef433849..e7278123a 100644 --- a/pkg/assets/generated_assets.go +++ b/pkg/assets/generated_assets.go @@ -855,6 +855,86 @@ var vfsgenAssets = func() http.FileSystem { compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x7b\x6d\x73\x1b\x37\x92\xf0\x77\xfd\x8a\x2e\xf2\x83\xed\x2a\xbe\x48\x4e\x39\xd9\xb0\x9e\x7a\xea\xb4\x92\x9c\xa8\x2c\xcb\x3c\x4b\xf1\xde\x5d\x2a\x95\x80\x83\xe6\x10\x2b\x0c\x30\x0b\x60\x48\x31\x57\xf7\xdf\xaf\xba\x01\xcc\x0b\x25\xdb\x5a\x65\xef\x6e\xbf\x48\x1c\x0c\xd0\xe8\x6e\x34\xfa\x7d\xc6\x63\xf8\x41\xdb\x95\xd0\x70\x6e\x8b\x3b\x74\xa0\x2a\x51\x22\xd4\xc2\x89\x0a\x03\x3a\x7f\x34\x1e\xc3\x52\xa3\xf0\x38\x01\x63\x03\x42\xd8\x88\x00\x61\xa3\x3c\xec\x94\xd6\x60\xb7\xe8\x9c\x92\x34\x8e\x0f\x16\x4f\x40\x99\x42\x37\x52\x99\x12\x24\xd6\x68\x24\x9a\x42\xa1\x9f\x40\x61\xcd\x5a\x95\x8d\x43\x09\xc1\x42\xe3\xe3\xfa\x32\xa2\xb2\x15\xba\x41\xda\xf8\xac\x71\x0e\x4d\x00\xb1\x15\x4a\x8b\x95\x6e\x67\x7c\x06\xd9\x45\x1c\xf9\x88\xa5\xf2\xc1\xed\x41\x18\x19\x47\x96\x8d\xd6\x37\x58\x38\x0c\x44\xd0\xd1\x38\xc1\x59\x1c\x8d\x01\x86\x6b\x16\x50\xed\xf3\xef\x6b\x51\x61\x37\xa3\x07\x23\xae\x03\x98\xf6\x26\xbf\xc3\x7d\x7c\xcb\xab\x08\xfb\x3f\xab\x60\x44\xa5\x00\xef\x03\x3a\x23\xf4\x54\x1a\x9f\x50\xde\xa2\xf3\xca\x1a\x9a\xe5\x70\xbd\x80\x4d\x08\xb5\x5f\xcc\xe7\x9b\x66\x35\x93\x4c\xdb\xac\xb0\xd5\xdc\xcd\x57\x11\xc6\xbc\x0f\x63\x1e\x44\xe9\xe7\x44\x07\x03\x5b\x1c\x01\xb8\x16\xfb\xb4\x5a\x59\x1e\xad\xad\x57\xc1\xd2\xf8\x63\x80\x8e\x00\x82\x28\x17\x70\x3c\xfb\x6e\xf6\xcd\x54\xe2\x4a\x09\x33\x3d\x39\x9e\xba\xe3\x23\x80\xf1\x18\x6e\x6a\x2c\xd4\x7a\x0f\xa2\x63\xc0\xd2\x6a\x55\xec\xe3\xeb\x73\x5c\x8b\x46\x07\x4f\x27\xf8\xe2\x54\xef\xc4\xde\xbf\x00\xb5\x4e\x24\x06\x51\x82\xf2\xf0\x42\x8b\x80\x3e\xbc\x98\x00\x6a\x8f\xe0\x31\xf0\xf4\xcb\xf5\xb5\x0d\x4b\x87\x1e\x4d\x78\x11\xc1\xb5\x8c\x58\xcc\xe7\x77\xcd\x0a\x9d\xc1\x80\x7e\xa6\xec\x5c\xda\xc2\xcf\x1b\x8f\x6e\x5a\x36\x4a\xe2\x9c\x37\xf0\xf3\x71\xed\x70\x5a\x37\x5a\x2b\x53\x4e\xe3\x18\x43\x3a\x02\xa8\x5b\x54\x17\xd0\xdf\x2a\xee\xf4\xa1\x0e\xca\x1a\xa1\xf5\x1e\x7c\x26\xd1\x80\x70\x4e\xec\xc1\xae\x1f\x9c\xf6\x2c\x71\x23\x3e\x41\xd5\xf8\x00\x2b\x84\x4a\x98\x86\x61\x14\x0e\x45\x40\x09\xca\xb0\x10\x1b\x51\xa1\xaf\x45\x81\xb3\x03\xba\xfc\xe3\x84\x05\xe1\xef\xfc\xbc\xbd\x10\xd3\xda\xca\x69\x61\x4d\x10\xca\xa0\x9b\x13\x25\x91\xb8\x69\xed\xd4\x56\x04\x9c\xe6\xc3\x9e\x67\x6a\xc7\x4c\x6f\x2b\x9b\x34\xf0\x35\xd9\xbc\x09\x8e\x2e\x65\xb0\x74\x7b\x82\x62\x3a\xda\xab\xdc\x97\x91\xd9\xba\xd1\x9a\x48\x82\x80\x55\x4d\x87\x09\x2f\xf9\xe2\x57\x42\x31\x8e\x4c\xb3\x43\x56\x11\x4c\xfb\xab\xa3\x31\xff\xff\x90\xc0\x2d\x0e\x36\x24\x80\x4f\xde\xec\x68\x0c\x79\x6c\x08\xef\xdd\x9f\x3c\x38\xf4\xb6\x71\x05\x7a\x08\xfb\x1a\x09\xf6\x0a\xc1\xae\x3c\xba\x2d\x4a\x58\x5b\x07\x06\x77\x70\x7e\x7d\x03\x68\x82\x53\xe8\x61\xb5\x87\x8b\xb4\xdf\xf9\xf5\x0d\x5d\xa1\x04\x21\x72\x6d\x0a\x85\x93\x47\xc4\x3b\x82\xa1\x0a\xe4\xdf\xca\x94\x0e\xbd\xe7\x6d\x09\x58\xed\xec\x56\x49\x74\xb0\xdb\xa0\x8b\x8a\x8b\x86\x1d\x16\xd6\xc9\xa4\x16\x57\x98\xc5\x62\x06\xa7\xad\xf6\xca\x2b\x3d\x08\x87\x0b\x82\x37\x05\xa1\xd5\x4a\xac\x44\xa1\x6d\x23\x27\x20\x76\x7e\x02\xe2\xf7\xc6\x61\xfa\xd7\x9e\xba\x34\xa4\x36\x69\xd6\x5a\x0b\x7a\x5d\x58\x87\x3c\x28\xd1\xab\xd2\x88\x80\x13\x90\xaa\x54\x41\x68\x5b\xa0\x30\x13\x28\xad\x2d\x35\x92\x12\x5e\xdb\x95\xb6\xf7\x13\x70\xeb\xe2\xf5\xc9\x37\xdf\x4e\x20\x38\x61\xbc\xaa\x89\x03\x19\xa9\x05\x6d\xce\x44\xbe\xd5\xa2\x24\xee\x6a\x16\x6b\x92\x11\x67\x0b\xf4\x9e\x0e\x30\xf1\xeb\x81\xe6\x2a\x55\x20\xe5\x45\x5a\xab\x93\xf1\xa9\x57\xa5\x1f\xea\xae\x95\xb6\xab\x79\x25\x7c\x20\xd9\xbe\x2b\xe7\xa2\x56\xdd\x0c\x56\x6e\xfb\x1a\xfd\xac\xb4\xe3\xab\xd7\xdf\xbd\x66\x65\x3d\x86\x2b\x55\xa9\x90\xb7\xa6\x2b\x8a\x46\xd6\x56\x99\xa8\x7b\x44\xba\xc5\xaa\xe8\xee\x1e\xbc\x94\x51\x3b\x2d\x40\x68\xdd\x8d\xfb\x57\x04\xb2\x7d\x5c\xc0\x68\x44\x1b\xdc\x26\x71\x93\xe0\x59\x4e\x7d\x34\x73\xc2\x21\xd9\x26\xe6\x41\x89\x06\x1d\x89\x3f\x9d\x35\x03\x80\xb5\xb3\x55\x8b\x15\x2f\x90\xd6\xbc\x08\x20\x71\xad\x0c\x82\x80\x8d\xf5\x21\x8a\xf3\x06\x2b\x8f\x7a\xcb\x8c\x3b\x5a\xff\x4d\x9a\xbc\xa3\x5f\xc0\xcf\xbf\xb0\xad\xb3\xd5\x8a\x56\xbd\xfd\xd7\xf3\xeb\xee\xae\x91\x05\x13\xc6\xd8\x20\x48\x65\x79\x50\xc6\x07\x14\x92\x78\x40\x37\x68\xe7\x54\x50\xa6\x24\xa0\x45\x5c\x4f\xcb\x4f\xdb\x05\x0b\x58\x0b\xed\xd9\x96\x5e\x96\xc6\x3a\xec\x50\xea\xa0\x92\x1c\x9b\x4c\x1f\x9d\x71\x4b\xe1\x84\x4c\xb1\x92\x60\x8d\xde\xc7\x59\x84\xfa\xb4\xc5\x4e\x79\x52\xe8\x6c\x89\x18\xfa\x8f\x09\xf8\xa3\x08\x9c\x6a\x6d\x77\x43\x63\x48\xa2\xd5\xac\xb4\xf2\x9b\xc1\x0d\xa2\x9b\x7b\xa6\x1b\x92\x91\xcb\x65\xbe\x8a\xcc\xb9\x34\xfb\xd2\x44\x20\x37\xe9\xd5\x93\x77\x21\xea\xa7\xaa\xe6\x1d\x36\x28\xa4\x46\xef\x1f\xdb\x80\x08\xb9\x5c\xf6\xc0\xde\x6e\x30\xcf\x63\x65\xc3\x50\x83\xb8\x43\x28\x48\x48\xc4\xca\x36\x61\x28\x73\x13\xb0\x6c\x66\xfc\xa2\xa3\x65\x02\xd7\x56\xe2\xd2\xba\x30\x81\x2b\x2b\xe4\x9f\x85\x16\xa6\x40\x37\x69\xb5\xd2\x75\x54\xa0\xe3\xa3\xb4\xd9\xed\xbe\xc6\xb7\x4a\x07\xba\x9e\x3f\xff\x72\x14\x29\x64\x85\x11\x75\x41\xeb\x48\xc5\x93\x8c\x2a\x90\x8c\xec\x56\x09\x10\xae\x6c\x2a\x34\xc1\xcf\xd1\x6c\x67\xb0\x15\x4e\x91\x1a\x62\x42\xfb\x6a\x67\x11\x0d\xd5\xed\x06\x3d\xb6\xea\x4b\x48\x19\x05\x7f\x8e\xa1\xe8\xdd\xe9\x79\x5a\x39\xe5\xa5\xb3\xbf\x7a\x6b\x78\x33\xcf\x06\xe6\x08\x40\x14\xa4\x2b\xde\xe1\xfe\x52\xf2\xf5\xea\x8d\x44\x23\x94\x46\xc9\x8c\x59\x93\x26\x45\x0c\x7e\xf2\x24\x97\x80\xf7\xca\xb3\x20\x46\x98\xb0\x53\x61\x03\x77\xb8\x87\xd1\xc3\xbd\x47\xe9\xb6\xc9\x59\x26\x42\x79\x88\xd2\xe8\x07\xba\x75\xd6\xc3\x6b\x12\xef\xd5\xa3\x6f\x6f\x32\x1d\xc9\xb4\xfa\xd6\x70\x2e\x12\x96\xff\x61\xe9\x9a\xf2\xa1\xf4\x95\x3b\x7b\xad\x51\xb3\x47\x79\x2b\x26\x90\x94\xf7\x04\xc8\x16\xd9\x38\x85\x85\x6f\x65\xc3\x26\xef\xf1\xbb\x35\x7c\xce\x91\x11\x74\xc2\x7f\xb9\x79\xfe\xb9\xee\x7c\x3a\x4e\x86\xe2\x50\xa2\x21\xfb\xde\xba\x46\xbd\x21\x9a\x08\x89\xc0\x77\xb8\x4f\xe7\xd2\x3b\xaf\x76\x64\x3c\x86\xda\x0d\x6d\x35\x1c\xcf\xde\xcc\xbe\x87\x8d\xad\x10\xa4\x72\xe0\x37\xb6\xd1\x92\xd0\xfc\x6d\xee\xac\x0d\xf3\x99\xd8\xf9\xdf\xd2\x6a\xfe\x57\xd9\xc6\x84\xa5\x08\x9b\x05\x8c\xf8\x6d\x0b\xfb\xab\xe7\xde\x43\x7a\x70\xe0\x8f\x1c\xf9\xce\xcf\x7a\xb3\x67\x2d\x75\xe9\xcc\x0f\x5e\xb7\xa4\xf6\x11\x7d\xec\xd0\x89\x9b\x51\x62\x33\x23\xe3\xd3\x02\x46\x8d\x9f\xa2\xf0\x61\x7a\x32\x7a\xae\x7c\x3c\x2a\x09\xed\xb6\x1f\xad\x66\xe7\x46\x78\xdf\x54\xed\xdc\xf8\x44\xef\x4e\x9d\xe9\x16\xbc\x17\xf7\xaa\x6a\x2a\x30\x4d\xb5\x42\x47\x76\xa2\xd8\x08\x53\x66\x03\xd5\xde\xee\xba\xd6\x2a\xfa\xac\x28\x8a\x0d\xac\x44\x28\x5a\x81\xe4\x87\x33\x5e\x76\xa3\x7e\xc7\x05\x9c\x1c\x1f\x1f\x77\xf8\x30\x7d\x14\x83\x0c\xd0\x16\x65\x34\x65\x3c\xed\xc2\x30\xc9\x34\x7b\xe9\x70\x8d\x0e\xce\xae\x4f\xdf\x5f\x7c\x8e\x1d\xc1\x35\x38\x49\xca\x36\x7b\xf0\xbc\x8c\x57\x75\xc4\xf5\xc0\x22\xad\x8f\x97\xc3\xae\x21\x08\x57\x62\x20\x95\xae\xc3\xe6\xef\xd8\x25\x41\xc1\x5b\x5e\xff\x23\x2f\xcf\x3e\xc1\x29\xb9\x5f\xcf\xbf\x87\xb4\x3a\xdd\xc4\xbf\x90\xe5\xcc\x1a\x92\x60\x68\x2b\x64\x74\xef\xa2\xfe\x54\x9e\x62\xeb\xec\xc6\xa0\x9c\xc4\x75\xe4\x59\x92\xc5\x7a\xe1\x1f\x2a\xe1\x6e\x71\x3e\x52\x72\x54\x5a\xb5\x45\xd1\x59\xed\xb0\x20\x9f\x66\x01\x75\xf4\xce\x39\xcc\x46\x23\x4c\x20\x15\xe8\x9b\x95\x2f\x9c\x62\x23\xc5\x2a\x51\xc8\x33\xad\x90\x5e\xc6\xab\x92\x9f\xa3\x46\xcc\xac\x4c\x1e\xc8\x2c\x6f\xd5\xbb\x2a\x9d\xd4\x32\xeb\xb2\x7b\x0e\xa5\xb3\x4d\x9d\xe2\xfc\x56\x0d\xb1\xe1\x39\x58\x71\xc6\x26\x6d\x38\x31\x43\xf9\x81\x80\x1c\x2e\x88\xd4\xc0\xe5\xf9\xc1\xa2\x4c\xe5\xe1\xfc\x3e\xcd\x0f\x57\x0d\x39\x72\xb8\xf6\x94\xae\x4c\x11\xe5\x20\x32\xe6\x21\x84\x1e\x0f\x9f\xb0\xfc\xa6\x15\x88\xc7\x40\x0c\x8c\x25\x39\x70\x6b\xd8\xdb\x86\x0f\x31\x42\x7c\x7f\x73\x39\x89\x99\x98\x4e\xf7\xa6\xf8\x9a\x44\x3d\x03\x6c\x3c\xbe\x17\x46\x94\x28\x2f\x59\xed\x85\x3d\x39\x1b\xc6\xf7\xbc\x33\xf6\x3f\xdb\xd0\xe2\xd9\x32\xdf\x45\x27\x49\xf0\x7f\x3b\x7b\xfb\xeb\xe9\xf2\xf2\xd7\xdb\x0f\xef\x2e\xae\x7f\x23\x48\x04\x26\xc5\x8c\x68\xb6\xca\x59\x53\xe5\xb0\x9c\x68\xaf\xd5\xad\xbd\xc3\x9e\x3a\xcb\x10\xde\x5d\xfc\xfb\xd3\xd6\x77\x56\xeb\xeb\x76\xc5\xc3\xa8\x43\xf9\x57\x51\xab\x5f\x03\xed\x3e\x22\x6b\x7d\xf8\xe6\x0e\xf7\x5f\x74\x35\xba\xe9\xb3\x4c\x45\xb4\x38\xc3\x17\xd1\xd2\x3c\xe2\x5a\x0c\xa8\xbd\x78\x7f\x7a\x79\xf5\x04\x7a\xb1\x12\x4a\x3f\x50\x8f\x34\xb9\x76\xf6\x7e\x0f\x6b\x14\x81\x24\xc5\xae\x7b\xc7\xdb\x69\x58\x7b\xaf\x48\x3b\xb0\xb0\xc4\x10\xc4\x21\xf9\xe1\x4f\x3e\xff\x83\xe3\x8f\x01\x69\xa2\xe5\xcc\x56\x95\x98\x7a\xac\x85\xe3\xc0\x4a\x2b\x1f\x58\x55\x13\x29\xa1\x90\x5d\x0c\xd7\xa6\x57\x08\xd5\x97\x1c\x50\xbe\xea\x45\x78\x85\x30\x59\xbd\x81\xf0\xb0\x43\xf2\xad\x99\x27\x22\x40\x41\x7a\xed\x37\x82\x77\x7b\x75\xf3\x1b\x71\x34\x64\x13\xdd\xbb\x15\x6b\xa5\x75\x34\x76\xa2\xa0\x10\x43\x99\x52\xb7\xe7\x40\x8b\x2f\xf2\x6e\x0b\x18\xa5\x14\x14\x0d\x4f\xf1\x3e\x10\x45\xaf\xbf\xf9\xee\xfb\x51\x26\xab\xcf\x9b\x44\x8f\x8f\xb8\x17\xb6\xaa\x1a\x93\x2f\x79\x3c\x7c\xbe\xe8\xa2\x09\x1b\xba\x7a\x45\xcb\xd1\x96\x0b\x45\x8c\x0d\xda\x2b\x8e\x7c\x86\x92\xa3\x56\x9a\x94\xb4\x6e\x63\x24\xba\x78\xd9\xc9\x21\xe2\x1c\xd4\xc6\x6a\x09\x22\x85\x68\x52\x04\xd1\xa7\xe8\xf6\xea\x66\x91\x1d\xa4\x24\x17\xd6\x81\x54\x9e\x7f\xfe\x43\x10\x6e\xfd\xa5\x84\xf3\xa2\xb5\xad\xbc\x2b\xc9\x75\x7b\xe0\x07\x37\x30\xe5\xb7\x68\xa4\x40\x17\xe8\x80\x30\xc6\x7d\x09\x81\x01\x66\x19\xe2\xe7\x12\x0e\x7c\x54\xca\xf2\xff\x41\x82\xe1\xdc\x16\x2c\xac\x0c\x65\x6e\xeb\x94\x3f\x64\xea\x55\xd8\xcf\x2a\xd9\x03\x0d\x2f\x33\x72\x0e\x79\xc1\xab\x96\x81\x8f\x6d\x9a\x13\xaa\xc5\x46\xb8\xe0\xe7\xc1\x21\xe6\x6d\xdb\x5c\x6b\x28\xe4\xb8\x4b\xec\x11\xa5\x6a\x4d\x34\xa1\x9f\xae\xad\x9b\x46\x5a\xa7\x8f\xd1\xda\xf3\xcc\x93\x69\x65\x22\xf3\x0a\x74\xa1\xf3\x9e\xaf\x6c\x31\x90\x46\xf6\xb3\x51\x42\x7f\x3f\x32\xdb\x87\xd9\x36\xa8\xad\xfc\xac\x7f\x4e\xfe\x46\xba\xd0\xf3\xa0\x3d\xd3\xd2\xee\x78\x76\x0a\xcb\x8b\xf7\x7c\x6a\x6d\x7e\xc4\xab\xd2\x44\x09\xb9\xbd\xba\xe1\xbd\x27\xf9\x06\xf2\xe9\x67\x35\x96\x98\x9c\xb2\x4e\x92\x42\xe7\x2d\xf6\xd1\x28\xc4\x5b\xa5\xd1\x44\xaa\x0b\x31\x2b\x5c\xe8\x36\xee\x48\x6a\x31\xf8\xfb\xb7\x81\xbf\xf4\x5c\x26\x58\xed\x1f\xa4\x0b\x7a\xe2\x8f\x20\x4a\x41\x3e\x0f\xd3\x36\xc0\x13\x5d\xe8\x63\x8a\x2e\xcc\x6a\xac\x5a\x5c\x97\xd1\xb7\xe7\xfb\xfa\x7f\x8d\xeb\x1d\xee\x7b\xa8\xde\xe1\x3e\x62\x7a\xc4\xc9\x70\x34\x37\x41\x14\x77\x70\x9e\xf3\x88\x5d\x86\xf3\xb9\x9e\x40\x9b\x92\x5c\x64\xe5\x1e\x78\x23\xcf\x1b\xf5\x2c\x59\xb7\x0c\x5e\xda\x94\x96\x7f\x35\x23\xc3\xed\x52\x96\x4a\x42\x2d\xbc\xdf\x59\x27\x5b\x4f\xd7\x8b\x6d\xd2\xe6\xd0\xb9\xc4\x5d\x02\x22\xa5\x6b\x84\x66\x46\x05\xb5\xc5\xa8\xc0\xc8\x5a\x33\xcb\xf0\xbe\xb6\x2e\xc4\x64\x3d\x52\xfc\x27\xdc\xfe\xab\xe8\x65\x2b\x7c\x1f\x9c\xb8\x30\xdb\x96\xfc\xce\x9c\x37\x09\xe9\x05\x8c\xbc\xad\x90\x1e\x47\x31\x3b\x9f\x08\x58\xc0\xa8\xfe\x97\x37\x6f\x76\xc7\x4e\xc6\x17\x74\x76\x3f\x39\x9d\x8c\x0e\x29\x98\x6a\x4f\x7e\x49\xb0\x06\x67\x78\x2f\xaa\x5a\xe3\xcc\x60\x58\xbc\x39\x3e\x3e\x9e\x6f\xbf\x99\xc7\x65\x31\xf2\x4c\x7a\x41\xe2\x76\xd4\x6e\x7f\x6e\x2b\xa1\x7a\x6f\x50\xdb\x9a\x90\x4c\x78\x38\xfb\x57\x2c\xb2\x42\xa9\xf6\x01\x45\x45\x08\x0f\xd2\x2f\x1c\x71\x40\x2d\xc2\x06\x8a\xc6\x07\x5b\xd1\x6d\xef\xce\xa6\xe7\xfa\x90\x70\x68\x55\x04\x4e\x02\xb2\x76\x27\x06\xb1\xf0\xa6\xa5\x67\xa7\xd9\x19\x8d\xc6\x85\x54\x25\x38\x24\x5b\x46\xd3\xf9\x3c\xd7\x42\x69\x50\xd1\xb7\x25\xd1\x7a\x74\x65\x2e\xd3\xe4\x97\x3f\x5a\xcf\x9a\xaa\x63\xfe\xe1\x9b\x05\xcc\x89\x86\x79\xb0\xf3\x42\xd0\xd5\x1b\xd0\xf8\x59\xca\x28\x32\x49\x90\x16\x5f\xb0\x6d\x24\x5f\x64\xc3\x48\x44\x92\xd6\xed\x40\xf2\x6e\x7d\x45\x11\x27\xf6\x93\x29\xad\xca\x0e\x36\xaa\xdd\x6e\xf9\x67\x35\x72\xbc\x8b\xf3\xf6\x6a\x75\x4a\x71\xb0\x33\x1d\x68\x1f\xc6\xba\xbb\xf7\xed\xd2\x69\x21\x3a\x05\x70\x1e\x6b\x06\x1f\x0a\x14\xe6\xf9\x17\xbe\x57\x78\xc8\xce\xec\xf9\x87\x3f\xe0\xf8\x7f\x35\x25\xd4\xdf\xb1\xef\xbb\x7f\xc1\x47\xef\x2f\x69\xbd\xf4\xcf\x64\xfa\xc6\x63\xf8\x81\xcb\x27\xcf\x66\x49\xac\xbe\x24\x66\x24\x58\xcb\x78\x03\x0f\x42\xbe\x74\x2f\x3b\xe2\xd3\xec\x41\xc8\xf8\x30\x93\x97\x52\xc4\xa7\x45\x41\x62\x32\x08\x17\x1f\x7b\x15\x23\xa3\x7e\xf2\x8b\xf3\xa7\x0f\x66\xe7\x08\x8a\x8b\x06\xa9\x72\xf4\x6c\x26\xe4\xd2\x53\x62\xc3\x47\xfc\x5b\xa3\x1c\x4a\x8e\xbe\x32\x1d\x3b\x51\xab\x9f\x3a\xdd\x29\x64\xa5\x18\x2d\x1a\x5f\x76\xaa\x93\x86\x4a\xa7\x24\xdd\xf0\xf4\xb8\x55\xb8\xeb\xb8\x96\xcb\xba\x03\xe0\x92\x35\x62\x4e\xa1\xf3\x54\x63\x6f\xbc\xfe\x84\x4e\xad\xf7\xdd\xb5\xe6\xcd\xac\xcb\x90\xe9\xf1\x53\x2c\xd2\xf7\x46\xce\xac\x31\x31\xc2\x58\x5a\xab\x63\x6e\xac\x7d\xf9\x63\x08\xf5\xad\xaa\xd0\x36\xa1\xe5\xdf\x87\x4f\x3f\x3e\x9b\x75\x76\xbb\x21\xae\x15\xd6\xf8\xa6\x42\xd7\x05\xb6\xa2\x13\x8b\x47\x07\x7b\x92\x40\x38\x7c\x7c\x7b\x06\xaf\x4f\xbe\xf9\xf6\xd9\x88\xa4\xa2\x21\x21\xb3\xe9\x78\x5f\x33\xb3\xde\x7c\x93\xf2\x7f\x69\x34\x78\x55\x0e\x24\xb1\x1b\x38\xd5\xe5\x02\x36\x95\x28\xa6\x7e\x23\x5e\xbf\xf9\x36\xbd\x7c\x87\xfb\x78\xf0\xbd\x22\xe0\xf4\x8e\xc3\x64\x7a\x7d\x7a\xbf\x76\x8b\x2e\x9f\x01\x4b\xeb\xbd\xa2\x10\xa6\x31\x2a\x78\xf8\xd9\xf8\x09\x34\x7e\x02\x95\x9f\x00\xfd\x9b\xc0\xe6\x97\x09\x78\x24\x37\xd8\x61\xe7\xb8\x5b\x2d\x4c\x39\xb3\xae\xe4\xaa\x63\x50\x15\xce\xc7\x4b\xe1\x3c\x9e\x27\x86\x1c\x01\x54\xca\xdc\xde\x5e\x2d\x60\x74\xec\x23\xeb\x96\x76\x87\xee\xef\x8a\x88\x0f\x58\x57\xa7\x78\x98\x24\xdc\xe9\xf6\xa8\xb2\xa4\xfd\xe9\xf8\x4f\x27\xa3\x2f\xe5\x2d\x22\x47\x5a\xe5\xc7\xf5\x66\x82\x99\x53\x12\xe4\xd0\x24\x85\xf7\xa8\x1e\xcb\x32\x70\xeb\x84\xf1\x97\xcb\x67\xd3\x91\xca\xc5\xb9\xb2\x10\x15\x05\xc4\xd2\xa6\x3d\x4c\x3e\x8a\xf8\xba\x25\x27\x2d\x5a\x5e\xb2\xe2\xe6\xb0\x5d\x79\xf6\x7d\xac\x53\x3e\x55\xea\xd9\x75\x88\x0b\x87\x0c\x21\xf4\x3f\x29\xb3\xd7\x7f\xe4\x1c\xb6\x04\x20\x9d\x45\x4f\x86\x0f\x0b\x1d\xc3\x52\x48\x57\x79\xae\xb3\xd0\xa5\x3c\x33\x09\x3c\x37\x13\x44\xed\x02\xbe\x59\xaf\xd5\xfd\xc0\x87\x65\xa3\xd8\xd3\x3d\x6d\x9d\xf7\xe2\xbe\xd0\x8d\xe4\x54\x64\x7c\x7f\xb8\x0a\xe3\x84\xe8\xca\xb5\xcb\xbe\x82\x08\xfd\x00\x25\x0f\x40\xd1\xe8\xa5\x3c\x40\x20\x3e\xb6\x75\xeb\x2a\xe6\x06\x1f\x84\x16\xcc\xd2\xae\x46\xdc\x70\xf5\x5f\x8b\x15\x92\x38\x6a\x2c\x82\x75\xe0\xb1\x12\x14\x7a\x1c\x92\xd0\xad\xeb\x29\xde\x9c\x08\x4f\x1e\x15\x17\x3f\x4c\xf0\xbd\xca\x6f\x5b\xaa\x70\x22\x6c\x38\xdd\x21\x0c\x88\x22\xc4\x36\x9b\x1a\xdd\xda\xba\x2a\xf9\x99\x15\x33\xd8\xed\x3f\x36\xfd\x1a\xf3\x70\x83\xe0\x54\x59\xa2\xf3\xe0\x1a\x03\xda\xda\x1a\xac\x49\x6d\x19\xf3\xa6\x96\xf4\x4f\xa2\xc6\x80\x80\x5b\x12\x9c\x8e\x0a\x4e\x30\x09\x29\x55\x8e\xab\x1d\x96\x8d\x16\x0e\x94\x09\xe8\xb6\x89\xcc\x04\xff\xca\xda\xfa\x83\xb9\xd8\xb2\x8f\xd7\x15\xa2\xe5\x5f\x1b\x1f\x83\x8c\xbc\x88\x05\x9d\xc8\x8d\x9b\x27\x03\x19\xdf\x2d\x60\x74\x52\x31\x93\x3e\xa1\x5b\x59\xaf\xc2\x3e\x7b\x96\xbd\x8e\x15\xd0\xb6\xf4\x9f\xa9\x6f\xc4\x76\x92\x5a\x18\x55\x4c\x40\xe2\xaa\x29\x63\xe7\xc7\x04\x76\xc2\x99\x09\xa0\x73\xd6\x4d\x60\x2d\x82\xd0\xb4\xb3\xb6\xe5\x15\x45\x08\x0b\x9e\xc5\x92\x61\x5d\x25\x82\x7f\xd6\xbe\x01\xef\xc3\x04\xc8\xa3\x48\xb0\x23\xb0\x05\xbf\xa0\x29\xef\xad\x24\x0f\x7e\x63\x77\x83\x5a\xbf\x70\x08\x7e\x5f\x6c\x9c\x35\xea\x77\x12\x43\x0c\x3b\x44\xd3\x8a\x27\x07\x80\x6d\xdb\xcc\xcb\xb6\xa6\xee\xf7\xa6\x98\x40\x53\x7b\x74\x61\x6a\x8d\xde\xf3\x89\xd4\xa9\xe7\xab\x37\xce\x26\x30\x37\x04\xde\xee\x6b\xec\x93\x11\x4b\xf9\xb1\x3a\x44\xf8\x1b\x6b\xeb\x7f\x48\x6b\x0b\x77\x76\xd5\xce\xd6\xd6\x0b\x3d\xcf\x1d\x5b\xb3\x4a\xb2\x41\x6d\xbb\xf5\x46\xe1\x3e\xc4\x06\x94\x7f\xbb\xed\xb0\x8c\x79\xfa\xb5\x42\xc7\x52\x76\x1f\x3e\xec\x0c\xba\x54\x52\xe0\xcc\x02\xae\xd5\x3d\xa9\xbf\x28\xcc\x20\x78\x7d\xba\x44\xec\x22\x8b\xa8\x9c\xd7\x56\x6b\xbb\xcb\xa1\x59\x2d\x02\xa1\xcb\xb5\x35\x75\x3f\xfb\x7f\x5c\x5d\x4b\xcb\xfe\x7f\xec\x8b\x0c\xf7\x21\x42\x6f\x35\xe0\x05\x05\xbc\x70\x9a\x95\x6b\x6c\x19\xf3\x29\xe9\x33\xe8\x26\x64\xdd\x15\x9c\x38\x75\xa5\x5f\xc0\x7f\xfe\x57\xb7\x7a\xa0\x90\x73\x34\x60\xcd\x50\xe1\xb4\x3d\x6f\xb3\xd4\xf5\x93\x43\xed\x24\x61\xd1\x4b\xf8\x74\xfa\x91\xb0\x3e\xa1\x31\x88\x62\xb8\x88\xff\x4e\x1e\x99\xf6\xba\x37\xed\xad\xb3\xd5\x22\x3e\xf7\x34\xfd\x47\x5c\xb7\x83\x00\xd9\x13\x89\x41\xc7\x34\xa5\x14\xda\xd7\x77\x64\x19\xb6\x82\x3d\xd5\xd7\xec\xa4\xb4\x38\xe6\xee\x8c\x8f\xc8\x7e\x18\x44\x4b\xc6\x87\xcd\x03\x7e\x01\x27\xb1\xb8\xbf\x5e\x2b\x43\xb7\x9b\x94\x41\x6d\x25\x08\x4f\x51\x19\x67\x1b\x5e\x72\x92\x22\x76\x09\x28\xdf\x56\x27\x39\xef\x2d\xda\xa6\xa0\x57\x71\x9f\x2f\x77\x15\x16\xd6\x14\x58\x87\xae\xb1\x30\xe6\x40\xe3\x66\xdc\x63\x68\xac\xc4\xf9\x58\x24\x74\xa6\xc2\xc8\x29\x29\xf3\x69\x1e\x61\x45\x9e\x7e\xe7\xe3\xbc\xb6\x12\xa3\x11\xf0\x7f\x10\xff\xaf\x75\x45\x3e\x15\x7f\xfa\x9b\xed\x11\xb7\x76\x59\x89\x37\xe9\x39\x63\x7d\x6b\x35\xba\xd4\x40\xf5\xcf\x81\x35\x09\x7a\xf0\xcc\xf3\xd0\x21\x37\x5d\x61\x10\xd3\x54\xb4\xe1\xab\xdf\xbd\xcb\xd6\xfb\xb4\xd7\x0c\x46\xb4\x1c\x26\x74\xa3\xdb\x69\x65\x6f\x5e\x66\xc3\x69\xb2\x67\x42\xf7\x8f\x90\x15\x83\x95\x2f\xfd\xab\x59\x5a\x7a\xc5\x2f\xf3\xaa\xa5\x25\x05\xac\xac\x23\x99\x2d\xb4\xf0\x9e\x6f\x49\xec\x1c\x8c\xc3\x67\x34\x3a\xf0\x37\x63\x28\xd6\x6d\x90\x0a\xc1\xdc\xa6\x39\x2a\x9c\x1c\x71\xbd\xc8\xe5\xce\xa3\x4b\xe3\x83\xd0\x9a\x95\x7d\xee\x05\x27\xc3\x58\xc6\xd2\xd1\xf9\xf5\x4d\x2e\xd0\xc0\xd9\xc7\xf3\xd8\xc4\x22\x02\x2e\x7a\xc5\x7c\x88\xfd\x0a\xb4\xd4\x63\xee\x29\xef\xfb\xd0\x07\x40\xe0\xe5\xc5\xac\x9c\xc5\x16\x3e\x3a\xc8\x35\xca\x57\xd1\xf1\xdc\x0e\xc2\xbe\x3b\x65\x64\x4b\xd6\xbb\x5e\xb6\x71\x5b\x64\x6f\x34\x08\x17\x7b\xb9\x73\xd3\x56\xa2\xea\x60\x36\x11\xdf\xd6\xa7\xb9\xc9\xa3\xed\x0b\x6b\xc3\xa9\xef\xbe\xff\xee\xfb\x61\xef\x35\x27\x29\x53\xd3\x58\xaf\x7f\x88\x86\xfb\x1d\x64\xcc\xba\xdc\x5c\x76\xd0\xa9\x96\xe7\xa7\xd2\x0a\xed\xf4\xb4\xce\xe4\x56\x9a\x73\x87\xdc\xd4\x60\xd8\x59\x77\xa7\x4c\x99\xc7\xe6\x63\xda\x84\xc5\xba\x05\xcc\x51\x48\x46\x3a\x67\x80\x49\x18\x8b\x5c\x3d\xba\x5c\x82\x75\x70\x4d\x4e\xeb\xe3\xad\x78\x5d\x5e\x2f\x2f\xe8\x95\x39\xf3\x91\x5e\x2e\x63\x55\x31\x9d\x36\x1b\xbe\x07\x7d\x83\x03\xbe\x67\x69\xb8\x5c\xf6\x9a\x55\x28\xda\xd2\x3d\x5e\x5e\x2e\x09\xa2\xc3\xbf\x35\xe8\x43\xbf\xbb\xd4\x47\x1a\x2e\x97\xa9\x3f\xc3\x92\x97\xba\x53\xb4\x1c\xc5\x16\x61\xa5\x85\xb9\xeb\x50\x1f\xc2\xcc\xb1\x93\x94\x8e\x28\x6d\xfb\x4b\x05\x59\x68\x94\xb1\xbd\x92\xe4\x44\xf9\xc1\xc9\x66\x78\x7d\x68\x37\x7c\x9d\x3e\xb2\xb3\xdc\xd1\xb1\x8c\x6e\x12\x08\xb3\x6f\x7d\x57\xa1\x07\xed\xa3\xbb\x8d\x2a\x36\x50\x89\x3d\x05\x4e\x2e\x25\x63\x66\x29\x9d\xdb\xab\xb3\x06\x9b\x4a\xa8\x18\x1e\x8a\x5a\x9f\xb1\xc4\x29\x95\xba\x31\xb9\x4d\xf4\x89\x4d\xef\x4f\x13\xad\x0c\x79\x4a\xc4\x4f\x57\x07\x1c\x11\x07\x2a\x8e\xdb\xcc\x07\xa9\xac\x83\xef\x58\x9e\xdd\x84\xdf\x8d\x27\xd4\xa6\x29\x54\x9d\xf7\x6e\x7d\xda\x73\xd1\x53\x4f\x5d\xda\x22\xe1\xd5\x86\xce\xc9\x0c\xb5\x82\x6e\xba\x26\x80\x43\x0d\x4f\xfc\x3f\x58\xfe\x25\x0e\x7c\xfc\xf3\xe9\x59\x47\x37\x7e\x8d\x70\x6e\xb3\x42\x53\xe0\x3c\x06\xc3\x53\x8a\xcb\x0d\xff\xfd\x7d\xee\x56\xa2\x60\x12\xe9\xc7\xe3\x84\xf1\x76\x14\xdb\xe7\x4f\x5a\xba\x8c\x6e\x9b\x3f\xdb\x9e\x90\x61\x3b\xc9\x09\x1c\x99\xeb\xaf\x75\xf7\x31\x09\x69\x40\x5f\x5f\x0c\x93\xed\x07\x2a\xf7\x26\x2d\x83\x33\x6b\x72\x54\xf1\xec\x23\xcd\x38\xf0\x10\xde\xf3\x49\xc2\x45\x2c\xb9\xb0\x43\x98\x27\xa4\xcd\x92\x93\xc8\xb7\x75\xe9\xd4\x56\x69\x2c\xf1\xc2\x17\x42\x1f\xf6\x39\x03\x38\x14\xf2\x83\xd1\xfb\x8f\xd6\x72\x85\xd0\xef\x7d\xc0\x2a\x71\x8d\x67\x14\xa2\x16\x2b\xa5\x55\x50\xe8\x5b\xf7\x53\x3a\x5b\x2f\xe0\xe7\xd1\xe9\xd5\xd5\xe8\x97\x28\x58\x43\x14\xe8\x88\x6b\x2b\x6f\x0e\x31\x03\x58\xfb\xd4\x1e\x75\x72\x7c\x4c\x7c\x76\x8d\x39\xf5\x3f\x79\x8a\xbc\xd3\xc8\x38\x8e\x5d\x5b\x43\x58\x0d\x9a\x3e\x12\x83\xba\x7e\xad\xa4\xfa\x62\xf0\xa5\x55\xa5\xc2\xb0\xdf\xff\xab\x1f\xe8\x14\xb6\xaa\x1b\xfe\x52\x25\x85\x71\x51\x88\xf2\x53\x74\x2d\x20\x81\x4e\x1f\x53\x15\x75\xb3\x80\x37\xc7\x55\x7c\xaa\xb0\xe2\xcf\x96\xde\x1c\xbf\x57\x34\x92\x51\x5a\x3c\xfe\x3a\x2d\x3f\x39\xae\x52\xd6\x66\x8b\x86\xb4\xec\xd2\xd9\x15\xce\xb8\x5c\xb3\xd2\xb6\xb8\xe3\x7c\x99\x72\x58\x04\xcd\x0e\xf8\x4e\x38\xc9\xa5\xc4\xd4\xe1\x20\xb1\xd6\x76\x4f\x5e\xe1\x04\xbc\xe5\x9a\x14\xa9\x45\xb6\x2e\x1b\x11\x70\x8b\x0e\x74\x02\xce\xb0\x0f\x32\x52\xb4\x60\x27\x4c\x98\x3d\xc5\x59\x7c\xaa\xce\xc9\x1b\x4e\x49\xae\x14\xff\xaa\x69\xef\xc8\xd5\x01\x3a\x9c\xdf\x0a\xa1\xfe\x01\x43\x2c\x5f\xd5\xb1\x14\x16\x1b\x23\x7f\x8f\x43\xec\x69\xd0\xac\x23\x00\xf2\xee\x95\xd0\xe7\xa8\xc5\xfe\x06\x0b\x6b\x24\x05\x2a\xc7\x74\x1d\xd1\x29\x96\xb5\xde\x58\x88\xe9\xed\x76\xf0\x0d\x89\x9e\x50\xba\x71\x78\xbb\x71\xe8\x37\x56\xcb\x05\xbc\xe6\x56\x3a\xd6\x26\xbd\xd1\x93\x18\xb5\x24\x0a\xfe\x47\x4e\xa6\xe5\xcf\x3f\xc9\xd1\x0c\xf1\xf9\xc7\x9c\xcd\x9b\x3f\x74\x34\xdf\x7e\xe6\x68\x86\x8a\x80\x83\x5a\xd8\x5a\xdd\x54\xe8\x63\x88\xfb\x29\x3e\xb4\x61\xee\xe3\x93\xdf\x93\x71\x1a\xac\x88\x23\xed\xb2\xa5\xb3\x15\x86\x0d\x36\x1e\x2e\xb8\x08\x8f\x0e\xe6\xf0\x1e\x83\x53\x05\x47\x2e\x55\xfc\x49\x0c\x7a\x50\x79\x1d\x8f\xf3\xcc\x54\xc1\xc7\x18\xca\x75\x06\x93\x15\x56\x0c\x5f\x3a\x37\xec\x20\x18\x3a\x8a\x9f\xc7\xd5\x2d\x26\x74\xe8\xbe\x70\x82\xdb\xae\x49\x2d\x8e\x1e\x9d\x12\x8f\x66\x44\x1e\x7a\xae\x97\xf7\xa8\xf9\x50\x53\xa0\x66\x5d\xb6\xd4\xef\xad\x51\xf4\x38\x90\xc1\x83\xc2\x5d\x9a\xf3\xa5\x3a\xf3\x75\xfb\x3d\x93\x32\xc9\x79\xeb\x6d\xaa\x38\xb3\x69\x94\x29\x87\xdd\xeb\xbd\xcf\x9b\xaa\xb8\x07\x4d\xc9\x30\x2f\x73\x36\x52\x84\xec\x0f\x26\xae\xf6\xda\x48\x99\x1f\x5d\x8b\xfd\xe7\xf2\x61\x85\x75\x68\x39\xd1\x95\x70\x9a\xda\xc4\x88\x2f\xf4\x61\x89\x5a\xcd\x2a\x39\xce\x1d\x7e\x43\xdc\xbb\x7c\xe8\xc9\xb1\x6f\x71\x4e\x75\x35\x10\xeb\xc0\xdf\xdd\x11\xd6\x1c\x57\x32\x9e\x1c\xb5\x1b\x89\xf2\x7f\x1f\xdd\x88\x40\x5b\xf6\xeb\xe3\x7c\x20\x09\x6d\xd2\x5c\x67\xf9\xfc\x22\xaa\x4f\x68\x2f\x7b\x84\x8c\x71\x6f\xec\x50\xf4\xfa\x58\xe7\x04\x49\x7a\xee\xcb\xfa\x02\xaa\xfd\xb4\x7b\x3c\xfa\xef\x00\x00\x00\xff\xff\x88\xb6\x4f\x56\x22\x3e\x00\x00"), }, + "/charts/components/istio-operator": &vfsgen۰DirInfo{ + name: "istio-operator", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + }, + "/charts/components/istio-operator/Chart.yaml": &vfsgen۰CompressedFileInfo{ + name: "Chart.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 249, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\x8e\x41\x72\xc3\x20\x0c\x45\xf7\x9c\x42\x17\x00\x6a\x2f\x3a\x13\x4e\xd0\x5e\xa0\x7b\x0a\x0a\xd6\xd4\x46\x8c\x50\xdc\xe6\xf6\x1d\x9c\xd6\xd9\xb0\xe0\xbd\xff\x46\xb1\xd1\x07\x4a\x27\xae\x01\xf6\xd9\xd4\xb8\x61\x00\xea\x4a\x6c\xb9\xa1\x44\x65\x31\xfb\xbf\x30\xb9\x57\xf7\x62\x32\xf6\x24\xd4\xf4\xf8\x7a\xc3\x75\x83\xb4\x44\x51\xb8\xb2\x40\xc6\xb6\xf2\x9d\x6a\x81\xf7\xd1\x80\xb3\xf1\x85\xf7\x6f\x96\xdc\x83\xb1\x8f\xbc\xb1\x4f\xd8\xf9\x26\x09\x0f\xb6\xa8\xb6\xe0\x7d\x21\x5d\x6e\x9f\x2e\xf1\xe6\x0f\xfb\xef\x3d\x17\x58\x0b\x55\x0c\x50\x58\xdb\x6a\x28\x8d\x53\xc6\xb4\x07\xff\x50\x1d\xb1\xbf\xc6\x7d\x90\xee\x63\xcd\xc2\x94\xed\x74\x99\x7f\xa6\xcb\xec\x5a\x2d\xe6\x37\x00\x00\xff\xff\x60\x7c\x9e\x06\xf9\x00\x00\x00"), + }, + "/charts/components/istio-operator/crds": &vfsgen۰DirInfo{ + name: "crds", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + }, + "/charts/components/istio-operator/crds/crd-operator.yaml": &vfsgen۰CompressedFileInfo{ + name: "crd-operator.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 2086, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\xc1\x8e\xdb\x36\x10\xbd\xfb\x2b\x06\x08\xd0\x5c\x2c\xa9\x6e\x7a\x28\x74\x5b\x38\x46\xd6\x68\xea\x0d\xec\x6d\x8a\x1c\x47\xd4\xd8\x9a\xae\x44\xb2\x9c\xa1\xd1\x6d\xd1\x7f\x2f\x48\xc9\xf6\x7a\x93\x45\xd1\xdb\xea\xc6\x37\xa3\x37\xe4\x7b\xc3\xe1\x1b\xd8\x7d\xd9\x2c\xe1\xb7\xf5\xfd\x2d\x0c\x68\x79\x4f\xa2\x52\x99\x0e\x83\x4a\xd5\xa0\x50\xb5\xe7\x9e\x64\x86\x9e\x3f\x53\x10\x76\xb6\x06\xf4\x4c\x7f\x2a\xd9\xb4\x92\xf2\xe1\x27\x29\xd9\x55\xc7\x45\x43\x8a\x8b\xd9\x03\xdb\xb6\x86\x65\x14\x75\xc3\x96\xc4\xc5\x60\xe8\x3d\xed\xd9\xb2\xb2\xb3\xb3\x81\x14\x5b\x54\xac\x67\x00\x16\x07\xaa\x81\x45\xd9\x39\x4f\x01\xd5\x05\x29\xd9\x8a\x62\xdf\x97\x19\x2e\xd9\xcd\xc4\x93\x49\xd9\x87\xe0\xa2\xaf\xe1\xab\xf8\xc8\x23\x29\x05\x60\xac\xbe\x4e\xb1\xbb\x89\x32\xe3\xbe\x8f\x01\xfb\xe7\xc5\x72\x48\xd8\x1e\x62\x8f\xe1\x59\x70\x8c\x75\x2e\xe8\xe6\x42\x5f\x00\x3b\x3f\x03\x10\xe3\x3c\xd5\x90\x23\x1e\x0d\xb5\x09\x8b\x4d\x98\xce\x3b\x65\x8b\xa2\x46\xa9\xe1\xef\x7f\x66\x00\x47\xec\xb9\xc5\xa4\xc1\x18\x74\x9e\xec\xcd\xa7\xf5\xe7\x77\x3b\xd3\xd1\x80\x23\x08\xe0\x43\xda\x80\xf2\x89\x23\x7d\x4f\xb4\x3f\x63\x00\x2d\x89\x09\xec\x33\x23\xbc\x4d\x54\x63\x0e\xb4\x49\x6d\x12\xd0\x8e\xe0\x38\x62\xd4\x82\xe4\x32\xe0\xf6\xa0\x1d\x0b\x04\xf2\x81\x84\xac\xe6\x2d\x3d\xa1\x85\x94\x82\x16\x5c\xf3\x3b\x19\x2d\x61\x47\x21\x91\x24\x29\x62\xdf\x82\x71\xf6\x48\x41\x21\x90\x71\x07\xcb\x7f\x9d\x99\x05\xd4\xe5\x92\x3d\x2a\x89\x5e\x31\xb2\x55\x0a\x16\xfb\x24\x42\xa4\x39\xa0\x6d\x61\xc0\x47\x08\x94\x6a\x40\xb4\x4f\xd8\x72\x8a\x94\x57\xff\xff\xe2\x02\x01\xdb\xbd\xab\xa1\x53\xf5\x52\x57\xd5\x81\xb5\x8b\x4d\x69\xdc\x50\x3d\xc4\x86\x82\x25\x25\xa9\x8c\x1b\x86\x68\x59\x1f\xab\xa6\x77\x4d\x35\xa0\x28\x85\xca\x38\xab\x81\x9b\x98\x2c\xaf\x5a\x3a\x52\x5f\x09\x1f\x0a\x0c\xa6\x63\x25\xa3\x31\x50\x85\x9e\x8b\x7c\x36\xab\xb9\xab\x87\xf6\xcd\xd9\xcd\xb7\x4f\x36\xa3\x8f\xc9\x78\xd1\xc0\xf6\x70\x86\x73\xd7\xbd\x68\xcd\xcf\x6c\x5b\x60\x01\x9c\x7e\x1b\x8f\x78\x71\x20\x41\x49\xb8\xed\x6a\x77\x0f\xa7\xa2\xd9\xa5\x6b\x5b\xb2\x21\x97\xdf\xe4\xe2\x4d\xd2\x92\xed\x9e\xc2\xe8\xed\x3e\xb8\x21\x33\x92\x6d\xbd\x63\xab\x79\x61\x7a\x26\x7b\xed\x8b\xc4\x66\x60\x4d\xcd\xf0\x47\x4c\xf7\x1e\xd4\x95\xb0\x44\x6b\x9d\x42\x43\x10\x7d\x8b\x4a\x6d\x09\x6b\x0b\x4b\x1c\xa8\x5f\xa2\xd0\x6b\x70\x26\x99\x20\x45\x52\xfd\xbf\xbd\x39\x8d\x8f\x6f\x7b\xb3\xf3\x64\x78\xcf\x26\xdf\x82\xf1\x72\x50\x4a\xe1\x90\x1a\x5b\x51\xe9\x04\xe6\xe1\x00\x79\xc3\xae\x07\xdf\xa3\xa5\xb3\x59\xaf\x41\x93\x74\xce\x02\x6d\x5b\x8c\x53\xe7\x6b\x5d\xc6\xfe\xb9\xe8\x32\x0e\xa7\x97\x95\xc9\xf1\x09\x6c\x48\x80\xd0\x74\x49\x8c\x6f\x09\x61\xdc\xe0\x9d\x25\xab\x13\x2d\xe0\xd4\x73\x31\x84\x84\x2a\x0f\xcf\x44\xfa\x1e\x06\x42\x2b\xb0\xb9\xdb\xac\xe6\xb0\x98\x56\xbf\x7e\x7a\x7f\x73\xbf\xde\x7c\x98\xc3\x0f\x13\x72\xbb\xba\xf9\x78\x7f\xfb\x65\x0e\xef\x26\x60\xb5\xdd\xde\x6d\xe7\xf0\xe3\xb4\xdc\xae\x96\x77\x9b\xe5\xfa\xe3\x7a\xf3\xe1\xff\xb8\x90\x0f\x91\x64\xbc\x92\xfe\x34\xfb\xab\xe3\x02\x7b\xdf\xe1\x62\xcc\x2b\x4f\x78\x79\xc2\x4b\xdf\x94\x9d\x0e\x3d\x7c\x77\x55\xf3\x55\xda\x3d\x3d\x01\xd9\xea\x62\x7a\x73\x4f\xe7\x18\x9f\xa9\x34\x45\xda\x1a\x34\x44\x9a\xde\x2d\x17\xf0\x40\x13\x52\x14\xc5\xec\xdf\x00\x00\x00\xff\xff\x28\xc6\xad\x26\x26\x08\x00\x00"), + }, + "/charts/components/istio-operator/templates": &vfsgen۰DirInfo{ + name: "templates", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + }, + "/charts/components/istio-operator/templates/clusterrole.yaml": &vfsgen۰CompressedFileInfo{ + name: "clusterrole.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 1657, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x55\xcd\x6e\x1b\x3d\x0c\xbc\xef\x53\x08\xc9\x21\xc0\x07\xd8\xc1\x77\x0b\x7c\xed\xa1\xf7\xa2\xe8\x9d\x96\xe8\x0d\x61\x89\x14\x48\xca\x69\xf2\xf4\xc5\xfe\x38\x4d\xb2\x76\x9c\xc2\x37\x89\x18\x0e\x67\x77\x66\xb9\x50\xe9\x17\xaa\x91\xf0\x26\xe8\x16\xe2\x1a\x9a\x3f\x8a\xd2\x0b\x38\x09\xaf\xf7\x0f\xb6\x26\xb9\x3f\xfc\xdf\xed\x89\xd3\x26\x7c\xcb\xcd\x1c\xf5\x87\x64\xec\x0a\x3a\x24\x70\xd8\x74\x21\x44\xc5\xb1\xe1\x27\x15\x34\x87\x52\x37\x81\x5b\xce\x5d\x08\x0c\x05\x37\x81\xcc\x49\x56\x52\x51\xc1\x45\x3b\x6d\x19\x6d\xd3\xdd\x4e\xf5\xd0\xab\xb4\x6a\xdd\x2a\x40\xa5\xef\xe3\x79\xe0\x5c\x85\x41\x0b\xb2\x53\x9c\xc4\x8c\xe0\x35\x49\x17\x82\xa2\x49\xd3\x88\x33\xf0\xee\xbf\xbb\x2e\x84\x03\xea\xf6\x4d\x61\x41\x17\x85\x77\xd4\x5f\x4d\x43\x6c\x0e\x39\x5f\xcd\xc3\xe8\x4f\xa2\x7b\xe2\xeb\x25\x8d\xce\x5d\x4b\x62\x18\x9b\x92\x3f\xff\x2b\xd1\x6d\xd8\x3f\xd8\x79\x0f\x53\x21\x1b\xf2\xa5\xd8\x93\xb9\xbe\xcd\xd5\x72\x40\x69\x0e\x4e\xdc\x3f\xe1\xf6\x51\x64\x3f\x39\xd6\xa6\x26\x1b\x11\x07\xc8\x94\x3e\xc5\x5c\x7a\x4e\xa8\x84\xbf\x1d\x79\x10\x65\x67\x95\xc4\x66\x2e\xe5\x58\x4c\xb8\x23\xa6\x71\xc2\xfa\x4c\xff\x27\x2d\x5f\x12\x55\xa7\xe7\xfb\x4b\xbd\xd4\x94\x00\x8b\xb0\xa1\x4f\xd0\x84\x35\xcb\x73\x41\x5e\xde\xef\x77\xc4\x90\xe9\x05\xd5\xe6\xcc\xf6\x8a\x66\x38\xdd\x14\x6b\xa6\x08\xaf\x44\xe6\xe0\xb8\x6b\x79\x2e\x5c\xd4\xda\x5c\x2c\x42\x26\xee\x97\x1a\xc7\xe5\x21\xec\x90\xab\xa4\x23\x72\x92\x71\x89\xb7\x08\x93\x8b\x0e\x1f\x44\x14\x45\xb1\x75\x94\xb2\x9c\x60\xa8\x07\x8a\x38\xa3\x3f\x10\xf7\xe8\x93\x17\xc3\x42\xc2\xe5\x8c\x2a\x99\xe2\xf3\x92\xb4\x4a\x4a\x64\xda\xea\x60\xd8\xb6\xa5\xfe\x6b\xaf\xe2\xec\xca\x3c\x11\xa8\x69\x75\xaa\x64\xdc\x12\x27\xe2\xde\x3e\xd6\x67\x77\xde\x9d\xde\x60\x2f\x89\xb9\xb9\x39\x31\x75\xfc\x3a\x0a\x1c\xd3\xc5\xa9\x0a\x1d\x03\x83\x87\xd7\xec\x0c\x6b\xda\x2a\xc4\x79\x72\x95\x34\x1f\x86\x9f\x83\x39\xb2\x1f\x24\xb7\x82\x31\x03\x15\x3b\xee\x0b\x7d\x4d\xd0\xe4\xc9\xbb\x0b\xc4\x28\x8d\x4f\xbe\xc6\xd5\xaa\xfb\x13\x00\x00\xff\xff\x0b\x58\x89\x1a\x79\x06\x00\x00"), + }, + "/charts/components/istio-operator/templates/clusterrole_binding.yaml": &vfsgen۰CompressedFileInfo{ + name: "clusterrole_binding.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 292, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8f\x31\x4e\x04\x31\x0c\x45\x7b\x9f\x22\x17\x48\x10\x1d\x4a\x07\x14\x74\x14\x8b\xb4\xbd\x37\x63\xc0\x6c\x36\x8e\x6c\x67\x0a\x46\x73\x77\x84\x46\x53\xa1\xa1\xf5\x93\xff\xff\xef\xca\x6d\xca\xe1\xb9\x0e\x73\xd2\x93\x54\x7a\xe2\x36\x71\xfb\x00\xec\x7c\x26\x35\x96\x96\x83\x5e\xb0\x24\x1c\xfe\x29\xca\xdf\xe8\x2c\x2d\x5d\x1f\x2c\xb1\xdc\xcd\xf7\x70\x23\xc7\x09\x1d\x33\x84\xd0\xf0\x46\x39\xb0\x39\x4b\x94\x4e\x8a\x2e\x0a\x36\x2e\x5f\x54\xdc\x32\xc4\xb0\xd5\xbd\x91\xce\x5c\xe8\xb1\x14\x19\xcd\x8f\xfe\xb6\xb3\x75\x2c\x94\xc3\xb2\xa4\x33\xd6\x41\x96\x76\xfe\xba\xc3\x75\x05\x95\x4a\x27\x7a\xff\x9d\xf0\x47\xe8\x38\x1e\x3b\xbf\xa8\x8c\xfe\x8f\x20\xc4\x18\xe1\x27\x00\x00\xff\xff\x35\x67\xfc\x3d\x24\x01\x00\x00"), + }, + "/charts/components/istio-operator/templates/deployment.yaml": &vfsgen۰CompressedFileInfo{ + name: "deployment.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 1190, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\xcf\x8e\xda\x30\x10\xc6\xef\x79\x8a\x79\x81\xb0\x0b\x2d\xab\xca\xb7\x08\xd2\x76\x25\x36\x44\x29\xdd\x1e\x57\x5e\x33\x2c\x56\xfd\xaf\xf6\x18\x15\xad\x78\xf7\x2a\x81\x94\x04\x88\x5a\x9f\xa2\xf9\xc6\xbf\xcf\x33\x93\xe1\x4e\x3e\xa3\x0f\xd2\x1a\x06\xdc\xb9\x70\xb7\x1b\x27\x3f\xa5\x59\x33\x98\xa3\x53\x76\xaf\xd1\x50\xa2\x91\xf8\x9a\x13\x67\x09\x80\xe1\x1a\x83\xe3\x02\x19\xbc\xbf\x8f\x9e\xb9\x8a\x18\x46\xd6\xa1\xe7\x64\x7d\xd1\x8a\x87\xc3\x29\x95\x81\x0c\x24\x6d\xda\x66\x24\xc1\xa1\xa8\x39\x1e\x9d\x92\x82\x07\x06\xe3\x04\x20\xa0\x42\x41\xd6\xd7\x0a\x80\xe6\x24\xb6\x0b\xfe\x8a\x2a\x1c\x03\x03\x2c\x00\x42\xed\x14\x27\x3c\xdd\xeb\xbc\xb3\x3e\xaa\x87\x18\x84\x00\xb4\x8f\x6a\xbe\x51\x44\x2f\x69\x3f\xb3\x86\xf0\x37\x9d\x6f\xfb\x68\xb2\x50\x58\x53\x59\x4b\x0c\xc8\x47\xec\x4b\xdf\x03\x7a\x06\x0f\xd3\xe9\x87\x8f\x7d\xe1\x8b\xb7\xd1\xf5\x95\x80\x7e\x27\x05\x66\x42\xd8\x68\xa8\x18\x7a\x17\x80\xb0\x86\xb8\x34\xe8\x3b\x65\xa4\xc3\x85\x1c\x8f\xd4\xfc\xad\x37\x9f\x6d\x7c\x3d\x1c\xee\xda\x4c\x76\x16\x88\xbf\x35\xa3\x6a\x8f\xb0\x5a\x73\xb3\x66\x9d\x50\x0a\x37\x1c\xd2\xa6\x02\xbc\x32\x2d\xa3\x52\xa5\x55\x52\xec\x19\x3c\x6e\x0a\x4b\xa5\xc7\x50\xff\x42\xe7\x3c\x8f\xc1\x46\x2f\x30\x74\x4d\x00\x94\xd4\x92\x2e\x62\x00\xc2\x45\x06\x93\xfb\x7b\x7d\x11\xd7\xa8\xad\xdf\x33\x98\x4c\x1f\x9e\x64\x4f\xf3\xf8\x2b\x62\x18\x20\x4d\x07\x41\xe3\xc9\xa7\x1e\x08\xcd\xae\x4f\x68\x9b\xfe\x23\x5b\xcd\xbe\xbe\x14\xd9\x53\xfe\xad\xcc\x66\xf9\x05\x6e\x57\xb7\xb5\xdb\xf9\x66\x46\xfd\xb5\xb8\x66\x2e\xf2\x6c\x9e\x57\x2f\xf9\x22\x9f\xad\x1e\x97\xc5\xff\xd3\x6f\xef\xdd\xb5\x41\xb9\x9c\x37\xd0\x5b\xbc\xcf\xde\xea\xcb\x66\x01\x6c\x24\xaa\x75\x85\x9b\x6b\xe5\xa4\x95\x9c\xb6\xec\xef\xc6\x8d\x6a\x9f\x9b\xd6\xcb\x32\xaf\xb2\xd5\xb2\x1a\xf4\xff\x57\x3d\x69\x9a\x26\x7f\x02\x00\x00\xff\xff\xdf\x45\xfe\xfe\xa6\x04\x00\x00"), + }, + "/charts/components/istio-operator/templates/istio-operator-cr.yaml": &vfsgen۰CompressedFileInfo{ + name: "istio-operator-cr.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 408, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x8f\xb1\x6a\xc3\x40\x0c\x86\x77\x3d\x85\xa0\xb3\xaf\x64\xbd\x37\x28\x94\x76\x0b\x5e\xd5\x8b\xdc\x0a\xcb\xd2\x71\x77\xf5\x12\xfc\xee\xe5\x9c\x26\x50\x3a\x84\xac\xd2\xcf\xf7\xfd\xff\x30\x0c\xf0\x84\xe3\x38\x46\x7c\xf5\xd9\x17\x6f\xb2\x32\xd6\xcc\x49\x26\x49\x98\xdc\x26\xf9\x04\xca\x72\xe4\x52\xc5\x2d\xe2\x7a\x80\x59\xec\x14\xf1\x8d\x16\xae\x99\x12\xc3\xc2\x8d\x4e\xd4\x28\x02\xa2\xd1\xc2\x11\xcf\xe7\x70\x24\xfd\xe6\x1a\xa4\x36\xf1\x5b\x74\xdb\x00\x51\xe9\x83\xb5\xf6\x30\xa2\xde\xa4\x61\x16\x5b\x5d\xe7\x20\xfe\x7c\x17\xf2\x78\x6d\xb1\xda\x48\xf5\x82\xea\x8e\xf5\x40\x9a\xbf\xe8\xba\xe6\xa5\xdf\xdf\x33\x17\x6a\x5e\xfe\x2d\xda\xbd\x77\x66\x5d\x4a\xef\x8f\xe4\xd6\x8a\x6b\x56\x32\x86\xde\xaa\x73\x72\xf1\x49\x74\xa7\xe0\x1f\xcc\xd5\x1a\x7e\x13\xb8\x6d\xf0\x13\x00\x00\xff\xff\xea\x32\xe4\x63\x98\x01\x00\x00"), + }, + "/charts/components/istio-operator/templates/service-monitor.yaml": &vfsgen۰CompressedFileInfo{ + name: "service-monitor.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 1012, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x93\xc1\x8a\xdb\x30\x10\x86\xef\x7a\x8a\x79\x01\xd9\xc9\xa1\x87\xea\x19\xda\x52\x28\xe4\x3e\x91\xa7\xb1\xa8\xac\x11\x33\x93\xb4\x60\xfc\xee\xc5\x4e\xbc\x31\x59\x76\x0f\xcb\x1e\x72\x33\xfe\xff\x19\x7d\xfa\x40\xe3\x08\xe9\x37\x34\x07\xcc\x67\xd2\x86\x0a\x1e\x33\x7d\xe7\x92\x8c\x25\x95\x13\x4c\x93\xc3\x9a\x0e\x24\x9a\xb8\x04\x18\x5e\x92\x26\xb2\x10\x6b\x13\x79\x68\x2f\x7b\xf7\x27\x95\x2e\xc0\x2f\x92\x4b\x8a\xeb\xbc\x1b\xc8\xb0\x43\xc3\xe0\x00\x32\x1e\x29\xeb\xfc\x05\x50\x70\xa0\x00\x49\x2d\xb1\xe7\x4a\x82\x73\x79\x0e\x84\x32\xa1\x52\x80\x2a\x3c\x90\xf5\x74\xd6\x6d\x61\x3b\x17\xb9\x98\x70\xf6\x35\x63\x21\x5f\x85\xff\x25\xd2\x5b\x47\x2b\x46\x0a\x30\x8e\xeb\xb5\x96\x91\x1f\x6b\x32\x4d\x4e\x2b\xc5\x99\x45\x29\x53\x34\x96\x2b\xd7\x80\x16\xfb\x6f\x1b\x50\x80\x54\xd4\x30\xe7\x66\xa5\xb8\xae\x6a\x12\xb7\xfc\xb7\xa4\x72\xf2\x42\xca\x67\x89\x2b\xd7\x0d\x6b\xa1\x72\x00\x54\xba\xca\xa9\xd8\xb2\xcf\x83\xa1\x9c\xc8\x7e\xb2\x58\x80\xfd\x97\xdd\xd7\xdd\x72\x4a\x45\xeb\x03\xb4\x6a\x68\xda\xde\x6f\xee\xbc\xf7\xcf\x29\xbf\xfb\x7c\xcf\x58\xeb\x66\xf9\x83\xb6\xba\x08\xeb\xcd\xaa\xbf\x3b\x78\x5e\x3d\x8f\xbf\x5f\x69\x5a\xf3\x0f\x99\x7a\xe3\xa0\x77\x94\x91\x49\x8a\xea\xc6\x71\x2e\xcd\x2f\xfa\x7f\x00\x00\x00\xff\xff\x53\xc1\xf7\x50\xf4\x03\x00\x00"), + }, + "/charts/components/istio-operator/templates/service.yaml": &vfsgen۰CompressedFileInfo{ + name: "service.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 255, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\x31\xca\xc3\x30\x0c\x46\x77\x9f\x42\x17\x70\xe0\x27\x4b\xf0\x21\x7e\x0a\x85\xec\xaa\xf3\xd1\x9a\x3a\xb1\x91\xd4\x2c\x21\x77\x2f\x49\x1b\xe8\xd2\x8e\x7a\x7a\x4f\x88\x6b\xea\x21\x9a\xca\x14\x68\xfe\x73\xf7\x34\x0d\x81\xce\x90\x39\x45\xb8\x11\xc6\x03\x1b\x07\x47\x34\xf1\x08\xad\x1c\x11\x68\x59\x9a\x9e\xf3\x03\xda\x94\x0a\x61\x2b\xf2\x7f\x2c\xd7\xd5\x11\x65\xbe\x20\xeb\x16\xbd\xb2\x40\x49\x2d\x15\x7f\xd8\xee\x0b\xd6\x8a\xb8\x55\xb5\x88\xed\xb9\x7f\x7b\x37\xb3\xea\x47\x98\xa4\xa8\xfb\xd5\xcd\x08\xd4\xb5\x5d\xbb\x8f\xc6\x72\x85\x9d\x3e\xa1\x22\x23\x5a\x91\x1f\x5f\x78\xef\xdd\x33\x00\x00\xff\xff\xa5\xd4\x55\xb5\xff\x00\x00\x00"), + }, + "/charts/components/istio-operator/templates/service_account.yaml": &vfsgen۰FileInfo{ + name: "service_account.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + content: []byte("\x61\x70\x69\x56\x65\x72\x73\x69\x6f\x6e\x3a\x20\x76\x31\x0a\x6b\x69\x6e\x64\x3a\x20\x53\x65\x72\x76\x69\x63\x65\x41\x63\x63\x6f\x75\x6e\x74\x0a\x6d\x65\x74\x61\x64\x61\x74\x61\x3a\x0a\x20\x20\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x3a\x20\x7b\x7b\x2e\x56\x61\x6c\x75\x65\x73\x2e\x6f\x70\x65\x72\x61\x74\x6f\x72\x4e\x61\x6d\x65\x73\x70\x61\x63\x65\x7d\x7d\x0a\x20\x20\x6e\x61\x6d\x65\x3a\x20\x69\x73\x74\x69\x6f\x2d\x6f\x70\x65\x72\x61\x74\x6f\x72\x0a\x2d\x2d\x2d\x0a"), + }, + "/charts/components/istio-operator/values.yaml": &vfsgen۰CompressedFileInfo{ + name: "values.yaml", + modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), + uncompressedSize: 165, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\xcc\xb1\xaa\x02\x41\x0c\x85\xe1\x3e\x4f\x11\xb8\xf5\x1d\x11\xc1\x22\xcf\x20\xda\x4e\x1b\xc7\xec\x6e\xd8\x9d\xcd\x30\x89\x82\x6f\x2f\xac\x5a\x59\x1e\xfe\xc3\x37\xdd\xaf\x84\x37\x2b\xb3\xf4\xa4\xb6\x53\x0f\x35\x08\x1e\x09\xf7\xe9\x98\x0e\x60\x4d\x3a\x87\xf5\x33\x57\xf1\xc6\x45\x08\xb7\xcf\xff\x37\xc0\x36\x7f\xb2\x3f\x3d\xa4\x02\xfc\x61\xce\x99\xf0\x64\xb3\x55\x0b\x7d\x08\x7a\x93\xa2\x83\x16\x2c\x13\xaf\xa3\xf8\x1b\xb8\x7c\x38\x02\xc4\xd6\x6d\xd0\x45\x08\xab\xae\x5a\x79\x81\x57\x00\x00\x00\xff\xff\x89\x40\x7c\x1b\xa5\x00\x00\x00"), + }, "/charts/components/linkerd2": &vfsgen۰DirInfo{ name: "linkerd2", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), @@ -5716,6 +5796,7 @@ var vfsgenAssets = func() http.FileSystem { fs["/charts/components/cluster-autoscaler"].(os.FileInfo), fs["/charts/components/contour"].(os.FileInfo), fs["/charts/components/external-dns"].(os.FileInfo), + fs["/charts/components/istio-operator"].(os.FileInfo), fs["/charts/components/linkerd2"].(os.FileInfo), fs["/charts/components/metrics-server"].(os.FileInfo), fs["/charts/components/openebs-operator"].(os.FileInfo), @@ -5866,6 +5947,24 @@ var vfsgenAssets = func() http.FileSystem { fs["/charts/components/external-dns/templates/serviceaccount.yaml"].(os.FileInfo), fs["/charts/components/external-dns/templates/servicemonitor.yaml"].(os.FileInfo), } + fs["/charts/components/istio-operator"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/charts/components/istio-operator/Chart.yaml"].(os.FileInfo), + fs["/charts/components/istio-operator/crds"].(os.FileInfo), + fs["/charts/components/istio-operator/templates"].(os.FileInfo), + fs["/charts/components/istio-operator/values.yaml"].(os.FileInfo), + } + fs["/charts/components/istio-operator/crds"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/charts/components/istio-operator/crds/crd-operator.yaml"].(os.FileInfo), + } + fs["/charts/components/istio-operator/templates"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/charts/components/istio-operator/templates/clusterrole.yaml"].(os.FileInfo), + fs["/charts/components/istio-operator/templates/clusterrole_binding.yaml"].(os.FileInfo), + fs["/charts/components/istio-operator/templates/deployment.yaml"].(os.FileInfo), + fs["/charts/components/istio-operator/templates/istio-operator-cr.yaml"].(os.FileInfo), + fs["/charts/components/istio-operator/templates/service-monitor.yaml"].(os.FileInfo), + fs["/charts/components/istio-operator/templates/service.yaml"].(os.FileInfo), + fs["/charts/components/istio-operator/templates/service_account.yaml"].(os.FileInfo), + } fs["/charts/components/linkerd2"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/charts/components/linkerd2/.helmignore"].(os.FileInfo), fs["/charts/components/linkerd2/Chart.yaml"].(os.FileInfo), diff --git a/pkg/components/istio-operator/component.go b/pkg/components/istio-operator/component.go new file mode 100644 index 000000000..eda175681 --- /dev/null +++ b/pkg/components/istio-operator/component.go @@ -0,0 +1,93 @@ +// Copyright 2020 The Lokomotive Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package istiooperator + +import ( + "fmt" + + "github.com/hashicorp/hcl/v2" + "github.com/hashicorp/hcl/v2/gohcl" + + internaltemplate "github.com/kinvolk/lokomotive/internal/template" + "github.com/kinvolk/lokomotive/pkg/components" + "github.com/kinvolk/lokomotive/pkg/components/util" + "github.com/kinvolk/lokomotive/pkg/k8sutil" +) + +const ( + name = "experimental-istio-operator" + namespace = "istio-operator" +) + +// nolint:gochecknoinits +func init() { + components.Register(name, newComponent()) +} + +type component struct { + Profile string `hcl:"profile,optional"` + EnableMonitoring bool `hcl:"enable_monitoring,optional"` +} + +func newComponent() *component { + return &component{ + Profile: "minimal", + EnableMonitoring: false, + } +} + +func (c *component) LoadConfig(configBody *hcl.Body, evalContext *hcl.EvalContext) hcl.Diagnostics { + diagnostics := hcl.Diagnostics{} + + if configBody == nil { + return hcl.Diagnostics{} + } + + d := gohcl.DecodeBody(*configBody, evalContext, c) + if d.HasErrors() { + return append(diagnostics, d...) + } + + return diagnostics +} + +func (c *component) RenderManifests() (map[string]string, error) { + helmChart, err := components.Chart("istio-operator") + if err != nil { + return nil, fmt.Errorf("loading chart from assets: %w", err) + } + + values, err := internaltemplate.Render(chartValuesTmpl, c) + if err != nil { + return nil, fmt.Errorf("rendering values template failed: %w", err) + } + + // Generate YAML for the istio deployment. + renderedFiles, err := util.RenderChart(helmChart, name, namespace, values) + if err != nil { + return nil, fmt.Errorf("rendering chart failed: %w", err) + } + + return renderedFiles, nil +} + +func (c *component) Metadata() components.Metadata { + return components.Metadata{ + Name: name, + Namespace: k8sutil.Namespace{ + Name: namespace, + }, + } +} diff --git a/pkg/components/istio-operator/doc.go b/pkg/components/istio-operator/doc.go new file mode 100644 index 000000000..039bd6675 --- /dev/null +++ b/pkg/components/istio-operator/doc.go @@ -0,0 +1,16 @@ +// Copyright 2020 The Lokomotive Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package istiooperator has code related to deployment of istio operator component. +package istiooperator diff --git a/pkg/components/istio-operator/manifest.go b/pkg/components/istio-operator/manifest.go new file mode 100644 index 000000000..d4ee5501b --- /dev/null +++ b/pkg/components/istio-operator/manifest.go @@ -0,0 +1,21 @@ +// Copyright 2020 The Lokomotive Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package istiooperator + +const chartValuesTmpl = ` +istioOperator: + profile: {{.Profile}} +enableMonitoring: {{.EnableMonitoring}} +` diff --git a/test/components/istio/istio_test.go b/test/components/istio/istio_test.go new file mode 100644 index 000000000..68342a40e --- /dev/null +++ b/test/components/istio/istio_test.go @@ -0,0 +1,57 @@ +// Copyright 2020 The Lokomotive Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build aws aks aws_edge packet +// +build e2e + +package istio_test + +import ( + "testing" + "time" + + testutil "github.com/kinvolk/lokomotive/test/components/util" +) + +const ( + retryInterval = 3 * time.Second + timeout = 7 * time.Minute +) + +func TestIstioDeployments(t *testing.T) { + deployments := []struct { + Namespace string + Deployment string + }{ + { + Namespace: "istio-operator", + Deployment: "istio-operator", + }, + { + Namespace: "istio-system", + Deployment: "istiod", + }, + } + + client := testutil.CreateKubeClient(t) + + for _, d := range deployments { + d := d + t.Run(d.Deployment, func(t *testing.T) { + t.Parallel() + + testutil.WaitForDeployment(t, client, d.Namespace, d.Deployment, retryInterval, timeout) + }) + } +} diff --git a/test/monitoring/components_metrics_test.go b/test/monitoring/components_metrics_test.go index 74df3053c..fb21e8a14 100644 --- a/test/monitoring/components_metrics_test.go +++ b/test/monitoring/components_metrics_test.go @@ -95,6 +95,18 @@ func testComponentsPrometheusMetrics(t *testing.T, v1api v1.API) { query: "tcp_read_bytes_total", platforms: []testutil.Platform{testutil.PlatformPacket, testutil.PlatformAWS}, }, + { + // This is from the istiod service. + componentName: "experimental-istio-operator", + query: "pilot_k8s_reg_events", + platforms: []testutil.Platform{testutil.PlatformPacket, testutil.PlatformAWS, testutil.PlatformAKS}, + }, + { + // This is from the istio operator. + componentName: "experimental-istio-operator", + query: "controller_runtime_reconcile_time_seconds_count{controller=\"istiocontrolplane-controller\"}", + platforms: []testutil.Platform{testutil.PlatformPacket, testutil.PlatformAWS, testutil.PlatformAKS}, + }, } for _, tc := range testCases {