From 695ce5edd06f60ad205601111c027c208833856b Mon Sep 17 00:00:00 2001 From: Ayoub Nasr Date: Tue, 10 Dec 2024 17:28:54 +0100 Subject: [PATCH] salt, build: automate catalogd install --- buildchain/buildchain/constants.py | 9 + buildchain/buildchain/image.py | 6 + buildchain/buildchain/salt_tree.py | 5 + buildchain/buildchain/versions.py | 11 + .../addons/olm/catalogd/deployed/catalogd.sls | 157 +++++++++++ .../addons/olm/catalogd/deployed/cert.sls | 54 ++++ .../addons/olm/catalogd/deployed/crds.sls | 232 ++++++++++++++++ .../addons/olm/catalogd/deployed/init.sls | 17 ++ .../addons/olm/catalogd/deployed/rbac.sls | 247 ++++++++++++++++++ salt/metalk8s/deployed/init.sls | 1 + 10 files changed, 739 insertions(+) create mode 100644 salt/metalk8s/addons/olm/catalogd/deployed/catalogd.sls create mode 100644 salt/metalk8s/addons/olm/catalogd/deployed/cert.sls create mode 100644 salt/metalk8s/addons/olm/catalogd/deployed/crds.sls create mode 100644 salt/metalk8s/addons/olm/catalogd/deployed/init.sls create mode 100644 salt/metalk8s/addons/olm/catalogd/deployed/rbac.sls diff --git a/buildchain/buildchain/constants.py b/buildchain/buildchain/constants.py index 945105f988..a0d5165fb4 100644 --- a/buildchain/buildchain/constants.py +++ b/buildchain/buildchain/constants.py @@ -32,6 +32,15 @@ PROMETHEUS_REPOSITORY: str = "quay.io/prometheus" THANOS_REPOSITORY: str = "quay.io/thanos" CERT_MANAGER_REPOSITORY: str = "quay.io/jetstack" +OPERATOR_FRAMEWORK_REPOSITORYT: str = "quay.io/operator-framework" +# this repository will disappear in early 2025, +# for now it is used by OLMv1 but most likely they will +# stop using it after they upgrade their version of kubebuilder +# cf. https://github.com/kubernetes-sigs/kubebuilder/discussions/3907 +# cf. https://github.com/operator-framework/catalogd/pull/460 +# therefore if you see this comment later in 2025, +# you may not be able to build this. sorry. +KUBE_BUILDER_REPOSITORY: str = "gcr.io/kubebuilder" # Paths {{{ diff --git a/buildchain/buildchain/image.py b/buildchain/buildchain/image.py index 858e473e53..f293c7f434 100644 --- a/buildchain/buildchain/image.py +++ b/buildchain/buildchain/image.py @@ -217,6 +217,12 @@ def _local_image(name: str, **kwargs: Any) -> targets.LocalImage: "cert-manager-cainjector", "cert-manager-acmesolver", ], + constants.OPERATOR_FRAMEWORK_REPOSITORYT: [ + "catalogd", + ], + constants.KUBE_BUILDER_REPOSITORY: [ + "kube-rbac-proxy", + ], } REMOTE_NAMES: Dict[str, str] = { diff --git a/buildchain/buildchain/salt_tree.py b/buildchain/buildchain/salt_tree.py index 0fdef93c6f..d95bb7b327 100644 --- a/buildchain/buildchain/salt_tree.py +++ b/buildchain/buildchain/salt_tree.py @@ -344,6 +344,11 @@ def task(self) -> types.TaskDict: file_dep=[METALK8S_OPERATOR_MANIFESTS], ), Path("salt/metalk8s/addons/metalk8s-operator/deployed/init.sls"), + Path("salt/metalk8s/addons/olm/catalogd/deployed/catalogd.sls"), + Path("salt/metalk8s/addons/olm/catalogd/deployed/cert.sls"), + Path("salt/metalk8s/addons/olm/catalogd/deployed/crds.sls"), + Path("salt/metalk8s/addons/olm/catalogd/deployed/init.sls"), + Path("salt/metalk8s/addons/olm/catalogd/deployed/rbac.sls"), Path("salt/metalk8s/addons/prometheus-adapter/deployed/chart.sls"), Path("salt/metalk8s/addons/prometheus-adapter/deployed/init.sls"), Path("salt/metalk8s/addons/prometheus-operator/macros.j2"), diff --git a/buildchain/buildchain/versions.py b/buildchain/buildchain/versions.py index a8b5d1df27..5fd4c61a97 100644 --- a/buildchain/buildchain/versions.py +++ b/buildchain/buildchain/versions.py @@ -32,6 +32,7 @@ CONTAINERD_RELEASE: str = "1" SOSREPORT_RELEASE: str = "2" +OLM_VERSION: str = "1.0.0" def load_version_information() -> None: """Load version information from `VERSION`.""" @@ -225,6 +226,16 @@ def _version_prefix(version: str, prefix: str = "v") -> str: version="v0.36.1", digest="sha256:e542959e1b36d5046083d1b64a7049c356b68a44a173c58b3ae7c0c9ada932d5", ), + Image( + name="catalogd", + version=_version_prefix(OLM_VERSION), + digest="sha256:f74153f1e83cf3066f6ba1179fa09466e6b1defcbaf628c42c02aca500acd73d", + ), + Image( + name="kube-rbac-proxy", + version="v0.15.0", + digest="sha256:d8cc6ffb98190e8dd403bfe67ddcb454e6127d32b87acc237b3e5240f70a20fb", + ), # Local images Image( name="metalk8s-alert-logger", diff --git a/salt/metalk8s/addons/olm/catalogd/deployed/catalogd.sls b/salt/metalk8s/addons/olm/catalogd/deployed/catalogd.sls new file mode 100644 index 0000000000..730a3f93e7 --- /dev/null +++ b/salt/metalk8s/addons/olm/catalogd/deployed/catalogd.sls @@ -0,0 +1,157 @@ +#!jinja | metalk8s_kubernetes +{%- from "metalk8s/repo/macro.sls" import build_image_name with context %} + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-catalogserver + namespace: olmv1-system +spec: + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 8083 + selector: + control-plane: catalogd-controller-manager +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-controller-manager-metrics-service + namespace: olmv1-system +spec: + ports: + - name: https + port: 8443 + protocol: TCP + targetPort: https + selector: + control-plane: catalogd-controller-manager +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-controller-manager + namespace: olmv1-system +spec: + replicas: 1 + selector: + matchLabels: + control-plane: catalogd-controller-manager + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: manager + labels: + control-plane: catalogd-controller-manager + spec: + nodeSelector: + kubernetes.io/os: linux + node-role.kubernetes.io/infra: "" + tolerations: + - effect: NoSchedule + key: node-role.kubernetes.io/bootstrap + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/infra + operator: Exists + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/arch + operator: In + values: + - amd64 + - arm64 + - ppc64le + - s390x + - key: kubernetes.io/os + operator: In + values: + - linux + containers: + - args: + - --secure-listen-address=0.0.0.0:8443 + - --http2-disable + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: {{ build_image_name("kube-rbac-proxy:v0.15.0") }} + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + requests: + cpu: 5m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + terminationMessagePolicy: FallbackToLogsOnError + - args: + - --leader-elect + - --metrics-bind-address=127.0.0.1:8080 + - --external-address=catalogd-catalogserver.olmv1-system.svc + - --tls-cert=/var/certs/tls.crt + - --tls-key=/var/certs/tls.key + command: + - ./manager + image: {{ build_image_name("catalogd:v0.20.0") }} + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + requests: + cpu: 100m + memory: 200Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + terminationMessagePolicy: FallbackToLogsOnError + volumeMounts: + - mountPath: /var/cache/ + name: cache + - mountPath: /var/certs + name: catalogserver-certs + securityContext: + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + serviceAccountName: catalogd-controller-manager + terminationGracePeriodSeconds: 10 + volumes: + - emptyDir: {} + name: cache + - name: catalogserver-certs + secret: + secretName: catalogd-catalogserver-cert diff --git a/salt/metalk8s/addons/olm/catalogd/deployed/cert.sls b/salt/metalk8s/addons/olm/catalogd/deployed/cert.sls new file mode 100644 index 0000000000..c95ce2e9a0 --- /dev/null +++ b/salt/metalk8s/addons/olm/catalogd/deployed/cert.sls @@ -0,0 +1,54 @@ +#!jinja | metalk8s_kubernetes + +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: olmv1-ca + namespace: metalk8s-certs +spec: + commonName: olmv1-ca + isCA: true + issuerRef: + group: cert-manager.io + kind: Issuer + name: self-sign-issuer + privateKey: + algorithm: ECDSA + size: 256 + secretName: olmv1-ca +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: catalogd-catalogserver-cert + namespace: olmv1-system +spec: + dnsNames: + - localhost + - catalogd-catalogserver.olmv1-system.svc + - catalogd-catalogserver.olmv1-system.svc.cluster.local + issuerRef: + group: cert-manager.io + kind: ClusterIssuer + name: olmv1-ca + privateKey: + algorithm: ECDSA + size: 256 + secretName: catalogd-catalogserver-cert +--- +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: olmv1-ca +spec: + ca: + secretName: olmv1-ca +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: self-sign-issuer + namespace: metalk8s-certs +spec: + selfSigned: {} diff --git a/salt/metalk8s/addons/olm/catalogd/deployed/crds.sls b/salt/metalk8s/addons/olm/catalogd/deployed/crds.sls new file mode 100644 index 0000000000..4e8e46adb2 --- /dev/null +++ b/salt/metalk8s/addons/olm/catalogd/deployed/crds.sls @@ -0,0 +1,232 @@ +#!jinja | metalk8s_kubernetes + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.15.0 + name: clustercatalogs.catalogd.operatorframework.io +spec: + group: catalogd.operatorframework.io + names: + kind: ClusterCatalog + listKind: ClusterCatalogList + plural: clustercatalogs + singular: clustercatalog + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.phase + name: Phase + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: ClusterCatalog is the Schema for the ClusterCatalogs API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ClusterCatalogSpec defines the desired state of ClusterCatalog + properties: + source: + description: |- + Source is the source of a Catalog that contains Operators' metadata in the FBC format + https://olm.operatorframework.io/docs/reference/file-based-catalogs/#docs + properties: + image: + description: Image is the catalog image that backs the content + of this catalog. + properties: + insecureSkipTLSVerify: + description: |- + InsecureSkipTLSVerify indicates that TLS certificate validation should be skipped. + If this option is specified, the HTTPS protocol will still be used to + fetch the specified image reference. + This should not be used in a production environment. + type: boolean + pollInterval: + description: |- + PollInterval indicates the interval at which the image source should be polled for new content, + specified as a duration (e.g., "5m", "1h", "24h", "etc".). Note that PollInterval may not be + specified for a catalog image referenced by a sha256 digest. + format: duration + type: string + pullSecret: + description: PullSecret contains the name of the image pull + secret in the namespace that catalogd is deployed. + type: string + ref: + description: Ref contains the reference to a container image + containing Catalog contents. + type: string + required: + - ref + type: object + type: + description: Type defines the kind of Catalog content being sourced. + enum: + - image + type: string + required: + - type + type: object + required: + - source + type: object + x-kubernetes-validations: + - message: cannot specify PollInterval while using digest-based image + rule: '!has(self.source.image.pollInterval) || (self.source.image.ref.find(''@sha256:'') + == "")' + status: + description: ClusterCatalogStatus defines the observed state of ClusterCatalog + properties: + conditions: + description: Conditions store the status conditions of the ClusterCatalog + instances + items: + description: "Condition contains details for one aspect of the current + state of this API Resource.\n---\nThis struct is intended for + direct use as an array at the field path .status.conditions. For + example,\n\n\n\ttype FooStatus struct{\n\t // Represents the + observations of a foo's current state.\n\t // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // + +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t + \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t + \ // other fields\n\t}" + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: |- + type of condition in CamelCase or in foo.example.com/CamelCase. + --- + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be + useful (see .node.status.conditions), the ability to deconflict is important. + The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + contentURL: + description: |- + ContentURL is a cluster-internal address that on-cluster components + can read the content of a catalog from + type: string + observedGeneration: + description: |- + observedGeneration is the most recent generation observed for this ClusterCatalog. It corresponds to the + ClusterCatalog's generation, which is updated on mutation by the API Server. + format: int64 + type: integer + phase: + description: |- + Phase represents a human-readable status of resolution of the content source. + It is not appropriate to use for business logic determination. + type: string + resolvedSource: + description: ResolvedSource contains information about the resolved + source + properties: + image: + description: Image is the catalog image that backs the content + of this catalog. + properties: + lastPollAttempt: + description: LastPollAtempt is the time when the source resolved + was last polled for new content. + format: date-time + type: string + pullSecret: + description: pullSecret exists to retain compatibility with + the existing v1alpha1 APIs. It will be removed in v1alpha2. + type: string + ref: + description: Ref contains the reference to a container image + containing Catalog contents. + type: string + resolvedRef: + description: ResolvedRef contains the resolved sha256 image + ref containing Catalog contents. + type: string + required: + - lastPollAttempt + - ref + - resolvedRef + type: object + type: + description: Type defines the kind of Catalog content that was + sourced. + type: string + required: + - type + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/salt/metalk8s/addons/olm/catalogd/deployed/init.sls b/salt/metalk8s/addons/olm/catalogd/deployed/init.sls new file mode 100644 index 0000000000..44e9bba2f9 --- /dev/null +++ b/salt/metalk8s/addons/olm/catalogd/deployed/init.sls @@ -0,0 +1,17 @@ +include: + - .crds + - .rbac + - .cert + - .catalogd + +Wait for the Catalogd Controller Manager deployment to be Ready: + test.configurable_test_state: + - changes: False + - result: __slot__:salt:metalk8s_kubernetes.check_object_ready( + apiVersion=apps/v1, kind=Deployment, + name=catalogd-controller-manager, namespace=olm) + - comment: Wait for the Catalog Operator to be Ready + - retry: + attempts: 30 + - require: + - sls: metalk8s.addons.olm.catalogd.deployed.catalogd diff --git a/salt/metalk8s/addons/olm/catalogd/deployed/rbac.sls b/salt/metalk8s/addons/olm/catalogd/deployed/rbac.sls new file mode 100644 index 0000000000..3e35bf9135 --- /dev/null +++ b/salt/metalk8s/addons/olm/catalogd/deployed/rbac.sls @@ -0,0 +1,247 @@ +#!jinja | metalk8s_kubernetes + +--- +apiVersion: v1 +kind: Namespace +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + pod-security.kubernetes.io/enforce: baseline + pod-security.kubernetes.io/enforce-version: latest + name: olmv1-system + annotations: + scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Exists", "effect": "NoSchedule", "key": "node-role.kubernetes.io/bootstrap"}, {"operator": "Exists", "effect": "NoSchedule", "key": "node-role.kubernetes.io/infra"}]' +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-controller-manager + namespace: olmv1-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-leader-election-role + namespace: olmv1-system +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: catalogd-manager-role + namespace: olmv1-system +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: catalogd-manager-role +rules: +- apiGroups: + - catalogd.operatorframework.io + resources: + - clustercatalogs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - catalogd.operatorframework.io + resources: + - clustercatalogs/finalizers + verbs: + - update +- apiGroups: + - catalogd.operatorframework.io + resources: + - clustercatalogs/status + verbs: + - get + - patch + - update +- apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - pods/log + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-metrics-reader +rules: +- nonResourceURLs: + - /metrics + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-proxy-role +rules: +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-leader-election-rolebinding + namespace: olmv1-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: catalogd-leader-election-role +subjects: +- kind: ServiceAccount + name: catalogd-controller-manager + namespace: olmv1-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-manager-rolebinding + namespace: olmv1-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: catalogd-manager-role +subjects: +- kind: ServiceAccount + name: catalogd-controller-manager + namespace: olmv1-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-manager-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: catalogd-manager-role +subjects: +- kind: ServiceAccount + name: catalogd-controller-manager + namespace: olmv1-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-proxy-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: catalogd-proxy-role +subjects: +- kind: ServiceAccount + name: catalogd-controller-manager + namespace: olmv1-system +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/name: catalogd + app.kubernetes.io/part-of: olm + name: catalogd-catalogserver + namespace: olmv1-system +spec: + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 8083 + selector: + control-plane: catalogd-controller-manager + diff --git a/salt/metalk8s/deployed/init.sls b/salt/metalk8s/deployed/init.sls index dec83efe11..c549830eef 100644 --- a/salt/metalk8s/deployed/init.sls +++ b/salt/metalk8s/deployed/init.sls @@ -3,6 +3,7 @@ include: - metalk8s.addons.alert-logger.deployed - metalk8s.addons.prometheus-operator.deployed - metalk8s.addons.cert-manager.deployed + - metalk8s.addons.olm.catalogd.deployed - metalk8s.addons.nginx-ingress.deployed - metalk8s.addons.nginx-ingress-control-plane.deployed - metalk8s.addons.volumes.deployed