From 52a849ee90606ae5398cfa8bea87e80e4be7d387 Mon Sep 17 00:00:00 2001 From: Suraj Deshmukh Date: Tue, 30 Jun 2020 14:17:44 +0530 Subject: [PATCH 1/5] components: Add istio-operator Signed-off-by: Suraj Deshmukh --- .../components/istio-operator/Chart.yaml | 11 ++ .../istio-operator/crds/crd-operator.yaml | 46 +++++++ .../istio-operator/templates/clusterrole.yaml | 113 ++++++++++++++++++ .../templates/clusterrole_binding.yaml | 13 ++ .../istio-operator/templates/deployment.yaml | 46 +++++++ .../templates/istio-operator-cr.yaml | 17 +++ .../istio-operator/templates/service.yaml | 15 +++ .../templates/service_account.yaml | 6 + .../components/istio-operator/values.yaml | 8 ++ cli/cmd/component.go | 1 + pkg/assets/generated_assets.go | 99 +++++++++++++++ pkg/components/istio-operator/component.go | 91 ++++++++++++++ pkg/components/istio-operator/doc.go | 16 +++ pkg/components/istio-operator/manifest.go | 20 ++++ 14 files changed, 502 insertions(+) create mode 100644 assets/charts/components/istio-operator/Chart.yaml create mode 100644 assets/charts/components/istio-operator/crds/crd-operator.yaml create mode 100644 assets/charts/components/istio-operator/templates/clusterrole.yaml create mode 100644 assets/charts/components/istio-operator/templates/clusterrole_binding.yaml create mode 100644 assets/charts/components/istio-operator/templates/deployment.yaml create mode 100644 assets/charts/components/istio-operator/templates/istio-operator-cr.yaml create mode 100644 assets/charts/components/istio-operator/templates/service.yaml create mode 100644 assets/charts/components/istio-operator/templates/service_account.yaml create mode 100644 assets/charts/components/istio-operator/values.yaml create mode 100644 pkg/components/istio-operator/component.go create mode 100644 pkg/components/istio-operator/doc.go create mode 100644 pkg/components/istio-operator/manifest.go 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.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/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/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..a33a00c4e --- /dev/null +++ b/pkg/components/istio-operator/component.go @@ -0,0 +1,91 @@ +// 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"` +} + +func newComponent() *component { + return &component{ + Profile: "minimal", + } +} + +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..899a1445c --- /dev/null +++ b/pkg/components/istio-operator/manifest.go @@ -0,0 +1,20 @@ +// 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}} +` From 4afb2e6c07f99f38313c3870592b1bfeb9123931 Mon Sep 17 00:00:00 2001 From: Suraj Deshmukh Date: Tue, 30 Jun 2020 19:29:53 +0530 Subject: [PATCH 2/5] ci: Install istio-operator Signed-off-by: Suraj Deshmukh --- ci/aks/aks-cluster.lokocfg.envsubst | 4 ++++ ci/aws/aws-cluster.lokocfg.envsubst | 4 ++++ ci/packet/packet-cluster.lokocfg.envsubst | 4 ++++ 3 files changed, 12 insertions(+) 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 +} From 166512419fb0571df8ccc775ca37f7bb5d28a97b Mon Sep 17 00:00:00 2001 From: Suraj Deshmukh Date: Mon, 20 Jul 2020 18:07:08 +0530 Subject: [PATCH 3/5] istio-operator: Add variable to enable monitoring Adds ServiceMonitor configs for the control plane and istio-proxy sidecars which is toggled by a variable `enable_monitoring`. Signed-off-by: Suraj Deshmukh --- .../templates/service-monitor.yaml | 47 +++++++++++++++++++ pkg/components/istio-operator/component.go | 6 ++- pkg/components/istio-operator/manifest.go | 1 + 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 assets/charts/components/istio-operator/templates/service-monitor.yaml 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/pkg/components/istio-operator/component.go b/pkg/components/istio-operator/component.go index a33a00c4e..eda175681 100644 --- a/pkg/components/istio-operator/component.go +++ b/pkg/components/istio-operator/component.go @@ -37,12 +37,14 @@ func init() { } type component struct { - Profile string `hcl:"profile,optional"` + Profile string `hcl:"profile,optional"` + EnableMonitoring bool `hcl:"enable_monitoring,optional"` } func newComponent() *component { return &component{ - Profile: "minimal", + Profile: "minimal", + EnableMonitoring: false, } } diff --git a/pkg/components/istio-operator/manifest.go b/pkg/components/istio-operator/manifest.go index 899a1445c..d4ee5501b 100644 --- a/pkg/components/istio-operator/manifest.go +++ b/pkg/components/istio-operator/manifest.go @@ -17,4 +17,5 @@ package istiooperator const chartValuesTmpl = ` istioOperator: profile: {{.Profile}} +enableMonitoring: {{.EnableMonitoring}} ` From ee185b40921eb6d07ab1170bbbe5c1b91bc13459 Mon Sep 17 00:00:00 2001 From: Suraj Deshmukh Date: Fri, 3 Jul 2020 19:57:56 +0530 Subject: [PATCH 4/5] istio-operator: Add e2e test - Adds e2e test to verify if pods are up and running. - Adds test to verify if the metrics are scraped. Signed-off-by: Suraj Deshmukh --- test/components/istio/istio_test.go | 57 ++++++++++++++++++++++ test/monitoring/components_metrics_test.go | 12 +++++ 2 files changed, 69 insertions(+) create mode 100644 test/components/istio/istio_test.go 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 { From 893a1f2c96d029ecfd05f0816285c2f04244bd7c Mon Sep 17 00:00:00 2001 From: Suraj Deshmukh Date: Tue, 21 Jul 2020 12:58:36 +0530 Subject: [PATCH 5/5] docs: Add istio-operator configuration reference Signed-off-by: Suraj Deshmukh --- .../components/istio-operator.md | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 docs/configuration-reference/components/istio-operator.md 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 +```