{"id":20915103,"url":"https://github.com/microcks/microcks-ansible-operator","last_synced_at":"2025-05-13T10:32:35.913Z","repository":{"id":40761643,"uuid":"174551413","full_name":"microcks/microcks-ansible-operator","owner":"microcks","description":"Kubernetes Operator for easy setup and management of Microcks installs","archived":false,"fork":false,"pushed_at":"2024-10-21T12:03:58.000Z","size":246,"stargazers_count":26,"open_issues_count":1,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-30T05:42:57.552Z","etag":null,"topics":["ansible","kubernetes","kubernetes-operator","microcks","operator","operator-framework"],"latest_commit_sha":null,"homepage":"https://microcks.io","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/microcks.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY-INSIGHTS.yml","support":null,"governance":"GOVERNANCE.md","roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"microcks","patreon":null,"open_collective":"microcks","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2019-03-08T14:25:29.000Z","updated_at":"2024-10-21T12:03:55.000Z","dependencies_parsed_at":"2024-01-11T19:16:35.984Z","dependency_job_id":"70afbc4b-487e-4738-92a3-f68c164bc550","html_url":"https://github.com/microcks/microcks-ansible-operator","commit_stats":{"total_commits":218,"total_committers":7,"mean_commits":"31.142857142857142","dds":"0.11009174311926606","last_synced_commit":"cf9ce00a3fc819eac71b11a77ffd1ead3eb5bf27"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-ansible-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-ansible-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-ansible-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-ansible-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microcks","download_url":"https://codeload.github.com/microcks/microcks-ansible-operator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224203746,"owners_count":17272990,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","kubernetes","kubernetes-operator","microcks","operator","operator-framework"],"created_at":"2024-11-18T16:13:01.921Z","updated_at":"2025-05-13T10:32:35.891Z","avatar_url":"https://github.com/microcks.png","language":"Shell","funding_links":["https://github.com/sponsors/microcks","https://opencollective.com/microcks"],"categories":[],"sub_categories":[],"readme":"# microcks-ansible-operator\n\n\u003e [!CAUTION]\n\u003e This project is now decomissioned in favor of the [new Microcks Operator](https://github.com/microcks/microcks-operator) that is now available. This Ansible Operator will support Microcks up to the version `1.10.1`. As a consequence, we recommend not to change the Microcks version in your existing `MicrocksInstall` Custom-Resource and pin it to `1.10.1` if you temporarily want to stick with this operator.\n\nKubernetes Operator for easy setup and management of Microcks installs (using Ansible undercover 😉)\n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/microcks/microcks-ansible-operator/build-verify.yml?branch=master\u0026logo=github\u0026style=for-the-badge)](https://github.com/microcks/microcks-ansible-operator/actions)\n[![Container](https://img.shields.io/badge/dynamic/json?color=blueviolet\u0026logo=docker\u0026style=for-the-badge\u0026label=Quay.io\u0026query=tags[0].name\u0026url=https://quay.io/api/v1/repository/microcks/microcks-ansible-operator/tag/?limit=10\u0026page=1\u0026onlyActiveTags=true)](https://quay.io/repository/microcks/microcks?tab=tags)\n[![License](https://img.shields.io/github/license/microcks/microcks?style=for-the-badge\u0026logo=apache)](https://www.apache.org/licenses/LICENSE-2.0)\n[![Project Chat](https://img.shields.io/badge/discord-microcks-pink.svg?color=7289da\u0026style=for-the-badge\u0026logo=discord)](https://microcks.io/discord-invite/)\n[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/microcks-ansible-operator-image\u0026style=for-the-badge)](https://artifacthub.io/packages/search?repo=microcks-ansible-operator-image)\n[![CNCF Landscape](https://img.shields.io/badge/CNCF%20Landscape-5699C6?style=for-the-badge\u0026logo=cncf)](https://landscape.cncf.io/?item=app-definition-and-development--application-definition-image-build--microcks)\n\n## Build Status\n\nLatest released version is `1.10.0-fix-1`.\n\n\n#### Fossa license and security scans\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-testcontainers-go.svg?type=shield\u0026issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-testcontainers-go?ref=badge_shield\u0026issueType=license)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-testcontainers-go.svg?type=shield\u0026issueType=security)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-testcontainers-go?ref=badge_shield\u0026issueType=security)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-testcontainers-go.svg?type=small)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-testcontainers-go?ref=badge_small)\n\n#### OpenSSF best practices on Microcks core\n\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/7513/badge)](https://bestpractices.coreinfrastructure.org/projects/7513)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/microcks/microcks/badge)](https://securityscorecards.dev/viewer/?uri=github.com/microcks/microcks)\n\n## Community\n\n* [Documentation](https://microcks.io/documentation/tutorials/getting-started/)\n* [Microcks Community](https://github.com/microcks/community) and community meeting\n* Join us on [Discord](https://microcks.io/discord-invite/), on [GitHub Discussions](https://github.com/orgs/microcks/discussions) or [CNCF Slack #microcks channel](https://cloud-native.slack.com/archives/C05BYHW1TNJ)\n\nTo get involved with our community, please make sure you are familiar with the project's [Code of Conduct](./CODE_OF_CONDUCT.md).\n\n## Table of contents\n\n\u003c!--ts--\u003e\n   * [Installation](#installation)\n      * [Quick start](#quick-start)\n      * [Manual procedure](#manual-procedure)\n      * [Via OLM add-on](#via-olm-add-on)\n   * [Usage](#usage)\n      * [Minimalist CRD](#minimalist-crd)\n      * [Complete CRD](#complete-crd)\n      * [MicrocksInstall details](#microcksinstall-details)\n   * [Sample Custom Resources](#sample-custom-resources)\n   * [Build](#build)\n   * [Tests](#tests)\n      * [Local Tests](#local-tests)\n      * [E2E Tests](#e2e-tests)\n\u003c!--te--\u003e\n\n## Installation\n### Quick start\n\nWe provide simple shell scripts for quickly installing latest version of Microcks Operator on your OpenShift cluster or local Minikube.\n\nYou can use `install-latest-on-minikube.sh` script to prepare your cluster with Strimzi installation, SSL passthrough configuration for accessing Kafka cluster, Microcks Operator and full Microcks install in a `microcks` namespace.\n\nAfter having logged in your OpenShift cluster with `oc login`, you can use `install-latest-on-openshift.sh` script for installation of Microcks Operator and full Microcks install in a `microcks` namespace of a prepared cluster (Strimzi operator should have been installed first).\n\n### Manual procedure\n\nFor development or on bare OpenShift and Kubernetes clusters, without Operator Lifecycle Management (OLM).\n\nStart cloning this repos and then, optionally, create a new project:\n\n```sh\n$ git clone https://github.com/microcks/microcks-ansible-operator.git\n$ cd microcks-ansible-operator/\n$ kubectl create namespace microcks\n```\n\nThen, from this repository root directory, create the specific CRDS and resources needed for Operator:\n\n```sh\n$ kubectl create -f deploy/crds/microcks_v1alpha1_microcksinstall_crd.yaml\n$ kubectl create -f deploy/service_account.yaml -n microcks \n$ kubectl create -f deploy/role.yaml -n microcks\n$ kubectl create -f deploy/role_binding.yaml -n microcks\n```\n\nFinally, deploy the operator:\n\n```sh\n$ kubectl create -f deploy/operator.yaml -n microcks\n```\n\nWait a minute or two and check everything is running:\n\n```sh\n$ kubectl get pods -n microcks                                  \nNAME                                        READY     STATUS    RESTARTS   AGE\nmicrocks-ansible-operator-f58b97548-qj26l   1/1       Running   0          3m\n```\n\nNow just create a `MicrocksInstall` CRD!\n\n### Via OLM add-on\n\n[Operator Lyfecycle Manager](https://github.com/operator-framework/operator-lifecycle-manager) should be installed on your cluster first. Please follow this [guideline](https://github.com/operator-framework/operator-lifecycle-manager/blob/master/Documentation/install/install.md) to know how to proceed.\n\nYou can then use the [OperatorHub.io](https://operatorhub.io) catalog of Kubernetes Operators sourced from multiple providers. It offers you an alternative way to install stable versions of Microcks using the Microcks Operator. To install Microcks from [OperatorHub.io](https://operatorhub.io), locate the *Microcks Operator* and follow the instructions provided.\n\nAs an alternative, raw resources can also be found into the `/deploy/olm` directory of this repo. You may want to use the `install.sh` script for creating CSV and subscriptions within your target namespace.\n\n## Usage\n\nOnce operator is up and running into your Kubernetes namespace, you just have to create a `MicrocksInstall` Custom Resource Definition (CRD). This CRD simply describe the properties of the Microcks installation you want to have in your cluster. A `MicrocksInstall` CRD is made of 6 different sections that may be used for describing your setup :\n\n* Global part is mandatory and contain attributes like `name` of your install and `version` of Microcks to use,\n* `microcks` part is optional and contain attributes like the number of `replicas` and the access `url` if you want some customizations, \n* `postman` part is optional for the number of `replicas`\n* `keycloak` part is optional and allows to specify if you want a new install or reuse an existing instance. If not provided, Microcks will install its own Keycloak instance,\n* `mongodb` part is optional and allows to specify if you want a new install or reuse an existing instance. If not provided, Microcks will install its own MongoDB instance\n* `features` part is optional and allow to enable and configure opt-in features of Microcks.\n\n### Minimalist CRD\n\nHere's below a minimalistic `MicrocksInstall` CRD that you can use on vanilla Kubernetes cluster with just the information needed to configure `Ingresses`. This let all the defaults applies (see below for details).\n\n```yaml\napiVersion: microcks.github.io/v1alpha1\nkind: MicrocksInstall\nmetadata:\n  name: my-microcksinstall\nspec:\n  name: my-microcksinstall\n  version: \"1.9.1\"\n  microcks: \n    url: microcks.192.168.99.100.nip.io\n  keycloak:\n    url: keycloak.192.168.99.100.nip.io\n    privateUrl: http://my-microcksinstall-keycloak.microcks.svc.cluster.local:8080\n```\n\n\u003e This form can only be used on OpenShift as vanilla Kubernetes will need more informations to customize `Ingress` resources.\n\n### Complete CRD\n\nHere's now a complete `MicrocksInstall` CRD that I use - for example - on Minikube for testing vanilla Kubernetes support. This one adds the `url` attributes that are mandatory on vanilla Kubernetes.\n\n```yaml\napiVersion: microcks.github.io/v1alpha1\nkind: MicrocksInstall\nmetadata:\n  name: my-microcksinstall-minikube\nspec:\n  name: my-microcksinstall-minikube\n  version: \"1.9.1\"\n  microcks: \n    replicas: 1\n    url: microcks.192.168.99.100.nip.io\n    ingressSecretRef: my-secret-for-microcks-ingress\n  postman:\n    replicas: 2\n  keycloak:\n    install: true\n    persistent: true\n    volumeSize: 1Gi\n    url: keycloak.192.168.99.100.nip.io\n    privateUrl: http://my-microcksinstall-keycloak.microcks.svc.cluster.local:8080\n    ingressSecretRef: my-secret-for-keycloak-ingress\n  mongodb:\n    install: true\n    uri: mongodb:27017\n    database: sampledb\n    secretRef:\n      secret: mongodb\n      usernameKey: database-user\n      passwordKey: database-password\n    persistent: true\n    volumeSize: 2Gi\n  features:\n    repositoryFilter:\n      enabled: true\n      labelKey: app\n      labelLabel: Application\n      labelList: app,status\n```\n\n\n### MicrocksInstall details\n\nThe table below describe all the fields of the `MicrocksInstall` CRD, providing informations on what's mandatory and what's optional as well as default values.\n\n| Section       | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| ` `           | `registry`        | **Optional**. The URL of an alternative container registry where to retrive Microcks components image from. If not specified the default `quay.io` will be used. |\n| `microcks`    | `replicas`         | **Optional**. The number of replicas for the Microcks main pod. Default is `1`. |\n| `microcks`    | `url`              | **Mandatory on Kube, Optional on OpenShift**. The URL to use for exposing `Ingress`. If missing on OpenShift, default URL schema handled by Router is used. | \n| `microcks`    | `ingressSecretRef` | **Optional on Kube, not used on OpenShift**. The name of a TLS Secret for securing `Ingress`. If missing on Kubernetes, self-signed certificate is generated. | \n| `microcks`    | `ingressAnnotations` | **Optional**. Some custom annotations to add on `Ingress` or OpenShift `Route`. If these annotations are triggering a Certificate generation (for example through https://cert-manager.io/ or https://github.com/redhat-cop/cert-utils-operator), the `generateCert` property should be set to `false` for Kube. |\n| `microcks`    | `generateCert`     | **Optional on Kube, not used on OpenShift**. Whether to generate self-signed certificate or not if no valid `ingressSecretRef` provided. Default is `true` |\n| `microcks`    | `grpcIngressAnnotations` | **Optional**. Some custom annotations to add on GRPC `Ingress`. These annotations should not trigger a Certificate generation as operator takes care of generating the GRPC dedicated one. |\n| `microcks`    | `resources`        | **Optional**. Some resources constraints to apply on Microcks container. This should be expressed using [Kubernetes syntax](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#resource-requests-and-limits-of-pod-and-container). |\n| `microcks`    | `env`              | **Optional**. Some environment variables to add on Microcks container. This should be expressed using [Kubernetes syntax](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/#define-an-environment-variable-for-a-container). |\n| `microcks`    | `extraProperties`  | **Optional**. Additional application properties loaded into an `extra` Spring profile. Should follow Sring Boot YAML properties definitions. |\n| `microcks`    | `customSecretRef`  | **Optional**. Permit to use a secret (for exemple a keystore). Default is `false` (disabled). |\n| `microcks`    | `logLevel`        | **Optional**. Allows to tune the verbosity level of logs. Default is `INFO` You can use `DEBUG` for more verbosity or `WARN` for less. |\n| `microcks`    | `mockInvocationStats` | **Optional**. Allows to disable invocation stats on mocks. Default is `true` (enabled). |\n| `microcks`    | `openshift`       | **Optional**. Allows to tune some OpenShift specific resources. See [OpenShift specific tuning](#openShift-specific-tuning) below. |\n| `postman`     | `replicas`         | **Optional**. The number of replicas for the Microcks Postman pod. Default is `1`. |\n| `keycloak`    | `install`          | **Optional**. Flag for Keycloak installation. Default is `true`. Set to `false` if you want to reuse an existing Keycloak instance. |\n| `keycloak`    | `image`             | **Optional**. The reference of container image used. Operator comes with its default version. |\n| `keycloak`    | `realm`            | **Optional**. Name of Keycloak realm to use. Should be setup only if `install` is `false` and you want to reuse an existing realm. Default is `microcks`. |\n| `keycloak`    | `persistent`       | **Optional**. Flag for Keycloak persistence. Default is `true`. Set to `false` if you want an ephemeral Keycloak installation. |\n| `keycloak`    | `volumeSize`       | **Optional**. Size of persistent volume claim for Keycloak. Default is `1Gi`. Not used if not persistent install asked. |\n| `keycloak`    | `storageClassName` | **Optional**. The cluster storage class to use for persistent volume claim. If not specified, we rely on cluster default storage class. |\n| `keycloak`    | `postgresImage`    | **Optional**. The reference of container image used. Operator comes with its default version. |\n| `keycloak`    | `url`              | **Mandatory on Kube if keycloak.install==false, Optional otherwise**. The URL of Keycloak install - indeed just the hostname + port part - if it already exists on the one used for exposing Keycloak `Ingress`. If missing on OpenShift, default URL schema handled by Router is used. | \n| `keycloak`    | `privateUrl`       | **Optional but recommended**. A private URL - a full URL here - used by the Microcks component to internally join Keycloak. This is also known as `backendUrl` in [Keycloak doc](https://www.keycloak.org/docs/latest/server_installation/#_hostname). When specified, the `keycloak.url` is used as `frontendUrl` in Keycloak terms. | \n| `keycloak`    | `ingressSecretRef` | **Optional on Kube, not used on OpenShift**. The name of a TLS Secret for securing `Ingress`. If missing on Kubernetes, self-signed certificate is generated. | \n| `keycloak`    | `ingressAnnotations` | **Optional**. Some custom annotations to add on `Ingress` or OpenShift `Route`. If these annotations are triggering a Certificate generation (for example through https://cert-manager.io/ or https://github.com/redhat-cop/cert-utils-operator), the `generateCert` property should be set to `false` on Kube. |\n| `keycloak`    | `generateCert`     | **Optional on Kube, not used on OpenShift**. Whether to generate self-signed certificate or not if no valid `ingressSecretRef` provided. Default is `true` | \n| `keycloak`    | `replicas`         | **Optional**. The number of replicas for the Keycloak pod if install is required. Default is `1`. **Operator do not manage any other value for now** |\n| `keycloak`    | `resources`        | **Optional**. Some resources constraints to apply on Keycloak pods. This should be expressed using [Kubernetes syntax](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#resource-requests-and-limits-of-pod-and-container). |\n| `keycloak`    | `openshift`       | **Optional**. Allows to tune some OpenShift specific resources. See [OpenShift specific tuning](#openShift-specific-tuning) below. |\n| `mongodb`     | `install`          | **Optional**. Flag for MongoDB installation. Default is `true`. Set to `false` if you want to reuse an existing MongoDB instance. |\n| `mongodb`     | `image`             | **Optional**. The reference of container image used. Operator comes with its default version. |\n| `mongodb`     | `uri`              | **Optional**. MongoDB URI in case you're reusing existing MongoDB instance. Mandatory if `install` is `false` |\n| `mongodb`     | `uriParameters`    | **Optional**. Allows you to add parameters to the MongoDB URI connection string. |\n| `mongodb`     | `database`         | **Optional**. MongoDB database name in case you're reusing existing MongoDB instance. Useful if `install` is `false`. Default to `sampledb` |\n| `mongodb`     | `secretRef`        | **Optional**. Reference of a Secret containing credentials for connecting a provided MongoDB instance. Mandatory if `install` is `false` |\n| `mongodb`     | `persistent`       | **Optional**. Flag for MongoDB persistence. Default is `true`. Set to `false` if you want an ephemeral MongoDB installation. |\n| `mongodb`     | `volumeSize`       | **Optional**. Size of persistent volume claim for MongoDB. Default is `2Gi`. Not used if not persistent install asked. |\n| `mongodb`     | `storageClassName` | **Optional**. The cluster storage class to use for persistent volume claim. If not specified, we rely on cluster default storage class. |\n| `mongodb`     | `replicas`         | **Optional**. The number of replicas for the MongoDB pod if install is required. Default is `1`. **Operator do not manage any other value for now** |\n| `mongodb`     | `resources`        | **Optional**. Some resources constraints to apply on MongoDB pods. This should be expressed using [Kubernetes syntax](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#resource-requests-and-limits-of-pod-and-container). |\n| `features`    | `repositoryFilter` | **Optional**. Feature allowing to filter API and services on main page. Must be explicitly `enabled`. See [Organizing repository](https://microcks.io/documentation/using/advanced/organizing/#master-level-filter) for more informations |\n| `features`    | `repositoryTenancy` | **Optional**. Feature allowing to segment and delegate API and services management according the `repositoryFilter` master criteria. Must be explicitly `enabled`. See [Organizing repository](https://microcks.io/documentation/using/advanced/organizing/#rbac-security-segmentation) for more informations |\n| `features`    | `microcksHub.enabled`   | **Optional**. Feature allowing to directly import mocks coming from `hub.microcks.io` marketplace. Default is `true`. See [Micorkcs Hub](https://microcks.io/documentation/using/advanced/microcks-hub) for more information.                                                                                         |\n| `features`    | `async` | **Optional**. Feature allowing to activate mocking of Async API on a message broker. Must be explicitly `enabled`. See [this sample](https://github.com/microcks/microcks-ansible-operator/blob/master/deploy/crds/openshift-features.yaml#L28) for full informations |\n| `features`    | `async.env` | **Optional**. Some environment variables to add on `async-minion` container. This should be expressed using [Kubernetes syntax](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/#define-an-environment-variable-for-a-container).                                      |\n| `features`    | `aiCopilot` | **Optional**. Feature allowing to activate AI Copilot. Must be explicitly `enabled`. Default is `false`. |\n\n#### OpenShift specific tuning\n\nThe `openshift` object that you may find within different components properties allow the tuning of some OpenShift specific resources.\n\nEspecially, the `route` section in this object allows tuning of OpenShift `Routes` as described in the [API specification](https://docs.openshift.com/container-platform/4.9/rest_api/network_apis/route-route-openshift-io-v1.html#specification) if you don't want to rely on the default TLS settings for the OpenShift router/ingress controller. Check [Secured routes](https://docs.openshift.com/container-platform/4.9/networking/routes/secured-routes.html) for explanations on that topic.\n\n| Section    | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `route`    | `type`      | **Optional**. Allows to specify the TLS termination type of the Route. Allowed values are `reencrypt`, `passthrough` and `edge` that is the default. |\n| `route`    | `key`       | **Optional**. Allows to specify the private Key file for TLS. PEM format should be used. |\n| `route`    | `certificate`     | **Optional**. Allows to specify the certificate for TLS. PEM format should be used. |\n| `route`    | `caCertificate`      | **Optional**. Allows to specify the CA certificate for TLS. PEM format should be used. |\n| `route`    | `destinationCACertificate`  | **Optional**. Allows to specify the destination CA certificate for TLS. PEM format should be used. |\n\n#### AI Copilot feature\n\nHere are below the configuration properties of the AI Copilot feature:\n\n| Section                       | Property           | Description   |\n| ----------------------------- | ------------------ | ------------- |\n| `features.aiCopilot`          | `enabled`          | **Optional**. Flag for enabling the feature. Default is `false`. Set to `true` to activate. |\n| `features.aiCopilot`          | `implementation`   | **Optional**. Allow to choose an AI service implementation. Default is `openai` and its the only supported value at the moment. |\n| `features.aiCopilot.openai`   | `apiKey`           | **Madantory** when enabled. Put here your OpenAI API key. |\n| `features.aiCopilot.openai`   | `timeout`          | **Optional**. Allow the customization of the timeout when requesting OpenAI. Default to `20` seconds. |\n| `features.aiCopilot.openai`   | `model`            | **Optional**. Allow the customization of the OpenAI model to use. Default may vary from one Microcks version to another. |\n| `features.aiCopilot.openai`   | `maxTokens`        | **Optional**. Allow the customization of the maximum number of tokens that may be exchanged by OpenAI services. Default to `2000` tokens? |\n\n#### Kafka feature details\n\nHere are below the configuration properties of the Kafka support features:\n \n| Section    | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `features.async.kafka` | `install`    | **Optional**. Flag for Kafka installation. Default is `true` and required Strimzi Operator to be setup. Set to `false` if you want to reuse an existing Kafka instance. |\n| `features.async.kafka` | `useStrimziBeta1`  | **Optional**. Since version `1.3.0` we're using Beta2 version of Strimzi. Default is `false`. Set this flag to `true` if you still using older version of Strimzi that provides Beta1 custom resources. |\n| `features.async.kafka` | `url`        | **Optional**. The URL of Kafka broker if it already exists or the one used for exposing Kafka `Ingress` when we install it. In this later case, it should only be the subdomain part (eg: `apps.example.com`). |\n| `features.async.kafka` | `ingressClassName` | **Optional**. The ingress class to use for exposing broker to the outer world when installing it. Default is `nginx`. |\n| `features.async.kafka` | `persistent` | **Optional**. Flag for Kafka persistence. Default is `false`. Set to `true` if you want a persistent Kafka installation. |\n| `features.async.kafka` | `volumeSize` | **Optional**. Size of persistent volume claim for Kafka. Default is `2Gi`. Not used if not persistent install asked. |\n| `features.async.kafka.schemaRegistry` | `url` | **Optional**. The API URL of a Kafka Schema Registry. Used for Avro based serialization |\n| `features.async.kafka.schemaRegistry` | `confluent` | **Optional**. Flag for indicating that registry is a Confluent one, or using a Confluent compatibility mode. Default to `true` |\n| `features.async.kafka.schemaRegistry` | `username`  | **Optional**. Username for connecting to the specified Schema registry. Default to `` |\n| `features.async.kafka.schemaRegistry` | `credentialsSource`  | **Optional**. Source of the credentials for connecting to the specified Schema registry. Default to `USER_INFO` |\n| `features.async.kafka.authentication` | `type` | **Optional**. The type of authentication for connecting to a pre-existing Kafka broker. Supports `SSL` or `SASL_SSL`. Default to `none` |\n| `features.async.kafka.authentication` | `truststoreType` | **Optional**. For TLS transport, you'll probably need a truststore to hold your cluster certificate. Default to `PKCS12` |\n| `features.async.kafka.authentication` | `truststoreSecretRef` | **Optional**. For TLS transport, the reference of a Secret holding truststore and its password. Set `secret`, `storeKey` and `passwordKey` properties |\n| `features.async.kafka.authentication` | `keystoreType` | **Optional**. In case of `SSL` type, you'll also need a keystore to hold your user private key for mutual TLS authentication. Default to `PKCS12` |\n| `features.async.kafka.authentication` | `keystoreSecretRef` | **Optional**. For mutual TLS authentication, the reference of a Secret holding keystore and its password. Set `secret`, `storeKey` and `passwordKey` properties |\n| `features.async.kafka.authentication` | `saslMechanism` | **Optional**. For SASL authentication, you'll have to specify an additional authentication mechanism such as `SCRAM-SHA-512` |\n| `features.async.kafka.authentication` | `saslJaasConfig` | **Optional**. For SASL authentication, you'll have to specify a JAAS configuration line with login module, username and password. |\n| `features.async.kafka.authentication` | `saslLoginCallbackHandlerClass`  | **Optional**. For SASL authentication, you may want to provide a Login Callback Handler implementations. This implementation may be provided by extending the main and `async-minion` images and adding your own libs. |\n\n#### MQTT feature details\n\nHere are below the configuration properties of the MQTT support features:\n \n| Section    | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `features.async.mqtt` | `url`        | **Optional**. The URL of MQTT broker (eg: `my-mqtt-broker.example.com:1883`). Default is undefined which means that feature is disabled. |\n| `features.async.mqtt` | `username`   | **Optional**. The username to use for connecting to secured MQTT broker. Default to `microcks`. |\n| `features.async.mqtt` | `password`   | **Optional**. The password to use for connecting to secured MQTT broker. Default to `microcks`. |\n\n#### WebSocket feature details\n\nHere are below the configuration properties of the WebSocket support feature:\n \n| Section       | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `features.async.ws` | `ingressSecretRef`    | **Optional**. The name of a TLS Secret for securing WebSocket `Ingress`. If missing, self-signed certificate is generated. |\n| `features.async.ws` | `ingressAnnotations`  | **Optional**. A map of annotations that will be added to the `Ingress` or OpenShift `Route`for Microcks WebSocket mocks. If these annotations are triggering a Certificate generation (for example through https://cert-manager.io/ or https://github.com/redhat-cop/cert-utils-operator), the `generateCert` property should be set to `false` on Kube. |\n| `features.async.ws` | `generateCert`        | **Optional**. Whether to generate self-signed certificate or not if no valid `ingressSecretRef` provided. Default is `true` |\n| `features.async.ws` | `openshift`       | **Optional**. Allows to tune some OpenShift specific resources. See [OpenShift specific tuning](#openShift-specific-tuning) above. |\n\n#### AMQP feature details\n\nHere are below the configuration properties of the AMQP 0.9.1 support feature:\n \n| Section    | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `features.async.amqp` | `url`        | **Optional**. The URL of AMQP/RabbitMQ broker (eg: `my-amqp-broker.example.com:5672`). Default is undefined which means that feature is disabled. |\n| `features.async.amqp` | `username`   | **Optional**. The username to use for connecting to secured AMQP broker. Default to `microcks`. |\n| `features.async.amqp` | `password`   | **Optional**. The password to use for connecting to secured AMQP broker. Default to `microcks`. |\n\n#### NATS feature details\n\nHere are below the configuration properties of the NATS support feature:\n \n| Section    | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `features.async.nats` | `url`        | **Optional**. The URL of NATS broker (eg: `my-nats-broker.example.com:4222`). Default is undefined which means that feature is disabled. |\n| `features.async.nats` | `username`   | **Optional**. The username to use for connecting to secured NATS broker. Default to `microcks`. |\n| `features.async.nats` | `password`   | **Optional**. The password to use for connecting to secured NATS broker. Default to `microcks`. |\n\n#### Google PubSub feature details\n\nHere are below the configuration properties of the Google PubSub support feature:\n \n| Section    | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `features.async.googlepubsub` | `project`        | **Optional**. The GCP project id of PubSub (eg: `my-gcp-project-347219`). Default is undefined which means that feature is disabled. |\n| `features.async.googlepubsub` | `serviceAccountSecretRef`   | **Optional**. The name of a Generic Secret holding Service Account JSON credentiels. Set `secret` and `fileKey` properties. |\n\n#### Amazon SQS feature details\n\nHere are below the configuration properties of the Amazon SQS support feature:\n \n| Section    | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `features.async.sqs` | `region`        | **Optional**. The AWS region for connecting SQS service (eg: `eu-west-3`). Default is undefined which means that feature is disabled. |\n| `features.async.sqs` | `credentialsType`      | **Optional**. The type of credentials we use for authentication. 2 options here `env-variable` or `profile`. Default to `env-variable`. |\n| `features.async.sqs` | `credentialsProfile`   | **Optional**. When using `profile` authent, name of profile to use for authenticating to SQS. This profile should be present into a credentials file mounted from a Secret (see below). Default to `microcks-sqs-admin`. |\n| `features.async.sqs` | `credentialsSecretRef`   | **Optional**. The name of a Generic Secret holding either environment variables (set `secret` and `accessKeyIdKey`, `secretAccessKeyKey` and optional `sessionTokenKey` properties) or an AWS credentials file with referenced profile (set `secret` and `fileKey` properties). |\n| `features.async.sqs` | `endpointOverride`     | **Optional**. The AWS endpoint URI used for API calls. Handy for using SQS via [LocalStack](https://localstack.cloud). |\n\n#### Amazon SNS feature details\n\nHere are below the configuration properties of the Amazon SNS support feature:\n \n| Section    | Property           | Description   |\n| ------------- | ------------------ | ------------- |\n| `features.async.sns` | `region`        | **Optional**. The AWS region for connecting SNS service (eg: `eu-west-3`). Default is undefined which means that feature is disabled. |\n| `features.async.sns` | `credentialsType`      | **Optional**. The type of credentials we use for authentication. 2 options here `env-variable` or `profile`. Default to `env-variable`. |\n| `features.async.sns` | `credentialsProfile`   | **Optional**. When using `profile` authent, name of profile to use for authenticating to SNS. This profile should be present into a credentials file mounted from a Secret (see below). Default to `microcks-sns-admin`. |\n| `features.async.sns` | `credentialsSecretRef`   | **Optional**. The name of a Generic Secret holding either environment variables (set `secret` and `accessKeyIdKey`, `secretAccessKeyKey` and optional `sessionTokenKey` properties) or an AWS credentials file with referenced profile (set `secret` and `fileKey` properties). |\n| `features.async.sns` | `endpointOverride`     | **Optional**. The AWS endpoint URI used for API calls. Handy for using SNS via [LocalStack](https://localstack.cloud). |\n\n\u003e **Note:** Enabling both SQS and SNS features and using `env-variable` credentials type for both, may lead to collision as both clients rely on the\n\u003e same environment variables. So you have to specify `credentialsSecretRef` on only one of those two services and be sure that the access key and secret\n\u003e access key mounted refers to a IAM account having write access to both services.\n\n## Sample Custom Resources\n\nThe `/deploy/samples` folder contain sample `MicrocksInstall` resource allowing you to check the configuration for different setup options.\n* [openshift-minimal.yaml](./deploy/samples/openshift-minimal.yaml) illustrates a simple CR for starting a Microcks installation on OpenShift with most common options\n\n* [minikube-minimal.yaml](./deploy/samples/minikube-minimal.yaml) illustrates a simple CR for starting a Microcks installation on vanilla Kubernetes with most common options\n\n* [openshift-no-mongo.yaml](./deploy/samples/openshift-no-mongo.yaml) illustrates how to reuse an existing MongoDB database, retrieving the credential for connecting from a pre-existing `Secret`\n\n* [minikube-custom-tls.yaml](./deploy/samples/minikube-custom-tls.yaml) illustrates how to reuse existing `Secrets` to retrieve TLS certificates that will be used to secure the exposed `Ingresses`\n\n* [minikube-annotations.yaml](./deploy/samples/minikube-annotations.yaml) illustrates how to specify annotations that will be placed on exposed `Ingresses`. Such annotations can - for example - trigger some certificates generation using Cert Manager\n\n* [openshift-features.yaml](./deploy/samples/openshift-features.yaml) illustrates how to enable optional features like repository filtering or asynchronous mocking on an OpenShift cluster\n\n* [minikube-features.yaml](./deploy/samples/minikube-features.yaml) illustrates how to enable optional features like repository filtering or asynchronous mocking on a vanilla Kubernetes cluster\n\n* [openshift-features-mqtt.yaml](./deploy/samples/openshift-features-mqtt.yaml) illustrates how to connect a MQTT broker to realize asynchronous mocking and testing of MQTT messages\n\n* [openshift-features-ext-sso.yaml](./deploy/samples/openshift-features-ext-sso.yaml) illustrates how to not deploy Keycloak and reuse an existing instance\n\n* [openshift-features-ext-kafka.yaml](./deploy/samples/openshift-features-ext-kafka.yaml) illustrates how to not deploy a Kafka broker and reuse an existing instance\n\n* [openshift-features-apicurio-registry.yaml](./deploy/samples/openshift-features-apicurio-registry.yaml) illustrates how to configure mocking of Apache Kafka using a schema registry\n\nObviously, you can combine all of them together to enable any options 😉\n\n## Build\n\nYou can build the Operator locally using `docker build` command from root folder like below:\n\n```sh\n$ docker build -f build/Dockerfile -t quay.io/microcks/microcks-ansible-operator:latest .\nSending build context to Docker daemon    830kB\nStep 1/11 : FROM quay.io/operator-framework/ansible-operator:v0.16.0\n ---\u003e 19ba5006a265\nStep 2/11 : USER root\n ---\u003e Using cache\n ---\u003e 02226b2f2469\nStep 3/11 : RUN yum clean all \u0026\u0026 rm -rf /var/cache/yum/* \u0026\u0026 yum install -y openssl\n ---\u003e Using cache\n ---\u003e 66821ee710bf\nStep 4/11 : USER 1001\n ---\u003e Using cache\n ---\u003e e834d11a5146\nStep 5/11 : COPY requirements.yml ${HOME}/requirements.yml\n ---\u003e Using cache\n ---\u003e a30f7e13eb23\nStep 6/11 : RUN ansible-galaxy collection install -r ${HOME}/requirements.yml     \u0026\u0026 chmod -R ug+rwx ${HOME}/.ansible\n ---\u003e Using cache\n ---\u003e f2da6036c197\nStep 7/11 : COPY k8s/ ${HOME}/k8s/\n ---\u003e 7751789e30be\nStep 8/11 : COPY roles/ ${HOME}/roles/\n ---\u003e ae0b2c73e730\nStep 9/11 : COPY watches.yaml ${HOME}/watches.yaml\n ---\u003e 062c84d985c6\nStep 10/11 : COPY playbook.yml ${HOME}/playbook.yml\n ---\u003e a8c0505e65b7\nStep 11/11 : COPY ansible.cfg /etc/ansible/ansible.cfg\n ---\u003e 7de212ab7289\nSuccessfully built 7de212ab7289\nSuccessfully tagged quay.io/microcks/microcks-ansible-operator:latest\n```\n\n## Tests\n### Local tests\n\nThis Operator has been developed and tested using operator-sdk `v0.16.0` and ansible 2.11.6\n\n```sh\n$ operator-sdk version\noperator-sdk version: \"v0.16.0\", commit: \"55f1446c5f472e7d8e308dcdf36d0d7fc44fc4fd\", go version: \"go1.14 darwin/amd64\"\n\n$ ansible --version\nansible [core 2.11.6] \n  config file = /Users/lbroudou/Development/github/microcks-ansible-operator/ansible.cfg\n  configured module search path = ['/Users/lbroudou/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']\n  ansible python module location = /usr/local/Cellar/ansible/4.8.0/libexec/lib/python3.10/site-packages/ansible\n  ansible collection location = /Users/lbroudou/.ansible/collections:/usr/share/ansible/collections\n  executable location = /usr/local/bin/ansible\n  python version = 3.10.0 (default, Oct 13 2021, 06:45:00) [Clang 13.0.0 (clang-1300.0.29.3)]\n  jinja version = 3.0.2\n  libyaml = True\n\n$ ansible-playbook --version\nansible-playbook [core 2.11.6] \n  config file = /Users/lbroudou/Development/github/microcks-ansible-operator/ansible.cfg\n  configured module search path = ['/Users/lbroudou/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']\n  ansible python module location = /usr/local/Cellar/ansible/4.8.0/libexec/lib/python3.10/site-packages/ansible\n  ansible collection location = /Users/lbroudou/.ansible/collections:/usr/share/ansible/collections\n  executable location = /usr/local/bin/ansible-playbook\n  python version = 3.10.0 (default, Oct 13 2021, 06:45:00) [Clang 13.0.0 (clang-1300.0.29.3)]\n  jinja version = 3.0.2\n  libyaml = True\n```\n\nAnsible-playbook is convenient for testing of Jinja formatting using the `test.yaml` file at the root for this repo. You can quickly check templating results setting the right `vars` and debugging the target `test` var with following command:\n\n```sh\n$ ansible-playbook test.yaml -vvv | sed -e 's/\\\\n/'$'\\\\\\n/g'\n```\n\nAnsible-runner module is required for local execution, connected to local or remote Kubernetes cluster. You can install and set it up with following commands:\n\n```sh\n$ /usr/local/Cellar/ansible/2.9.1/libexec/bin/pip install ansible-runner-http openshift \n[...]\n$ ln -s /usr/local/Cellar/ansible/2.9.1/libexec/bin/ansible-runner /usr/local/bin/ansible-runner\n\n$ ansible-runner --version\n1.4.5\n```\n\nOnce done, local tests are possible using the following command:\n\n```sh\n$ operator-sdk run --local\nINFO[0000] Running the operator locally in namespace microcks. \n{\"level\":\"info\",\"ts\":1585060926.0604842,\"logger\":\"cmd\",\"msg\":\"Go Version: go1.14\"}\n{\"level\":\"info\",\"ts\":1585060926.060529,\"logger\":\"cmd\",\"msg\":\"Go OS/Arch: darwin/amd64\"}\n{\"level\":\"info\",\"ts\":1585060926.060534,\"logger\":\"cmd\",\"msg\":\"Version of operator-sdk: v0.16.0\"}\n{\"level\":\"info\",\"ts\":1585060926.063453,\"logger\":\"cmd\",\"msg\":\"Watching single namespace.\",\"Namespace\":\"microcks\"}\n{\"level\":\"info\",\"ts\":1585060928.423823,\"logger\":\"controller-runtime.metrics\",\"msg\":\"metrics server is starting to listen\",\"addr\":\"0.0.0.0:8383\"}\n{\"level\":\"info\",\"ts\":1585060928.424896,\"logger\":\"watches\",\"msg\":\"Environment variable not set; using default value\",\"envVar\":\"WORKER_MICROCKSINSTALL_MICROCKS_GITHUB_IO\",\"default\":1}\n{\"level\":\"info\",\"ts\":1585060928.4249249,\"logger\":\"watches\",\"msg\":\"Environment variable not set; using default value\",\"envVar\":\"ANSIBLE_VERBOSITY_MICROCKSINSTALL_MICROCKS_GITHUB_IO\",\"default\":2}\n{\"level\":\"info\",\"ts\":1585060928.42496,\"logger\":\"cmd\",\"msg\":\"Environment variable not set; using default value\",\"Namespace\":\"microcks\",\"envVar\":\"ANSIBLE_DEBUG_LOGS\",\"ANSIBLE_DEBUG_LOGS\":false}\n{\"level\":\"info\",\"ts\":1585060928.424971,\"logger\":\"ansible-controller\",\"msg\":\"Watching resource\",\"Options.Group\":\"microcks.github.io\",\"Options.Version\":\"v1alpha1\",\"Options.Kind\":\"MicrocksInstall\"}\n{\"level\":\"info\",\"ts\":1585060928.4250722,\"logger\":\"leader\",\"msg\":\"Trying to become the leader.\"}\n{\"level\":\"info\",\"ts\":1585060928.425101,\"logger\":\"leader\",\"msg\":\"Skipping leader election; not running in a cluster.\"}\n{\"level\":\"info\",\"ts\":1585060932.8614569,\"logger\":\"metrics\",\"msg\":\"Skipping metrics Service creation; not running in a cluster.\"}\n{\"level\":\"info\",\"ts\":1585060935.078951,\"logger\":\"proxy\",\"msg\":\"Starting to serve\",\"Address\":\"127.0.0.1:8888\"}\n{\"level\":\"info\",\"ts\":1585060935.079112,\"logger\":\"controller-runtime.manager\",\"msg\":\"starting metrics server\",\"path\":\"/metrics\"}\n{\"level\":\"info\",\"ts\":1585060935.079189,\"logger\":\"controller-runtime.controller\",\"msg\":\"Starting EventSource\",\"controller\":\"microcksinstall-controller\",\"source\":\"kind source: microcks.github.io/v1alpha1, Kind=MicrocksInstall\"}\n{\"level\":\"info\",\"ts\":1585060935.183991,\"logger\":\"controller-runtime.controller\",\"msg\":\"Starting Controller\",\"controller\":\"microcksinstall-controller\"}\n{\"level\":\"info\",\"ts\":1585060935.184026,\"logger\":\"controller-runtime.controller\",\"msg\":\"Starting workers\",\"controller\":\"microcksinstall-controller\",\"worker count\":1}\n{\"level\":\"info\",\"ts\":1585060938.4777331,\"logger\":\"proxy\",\"msg\":\"Skipping cache lookup\",\"resource\":{\"IsResourceRequest\":false,\"Path\":\"/version\",\"Verb\":\"get\",\"APIPrefix\":\"\",\"APIGroup\":\"\",\"APIVersion\":\"\",\"Namespace\":\"\",\"Resource\":\"\",\"Subresource\":\"\",\"Name\":\"\",\"Parts\":null}}\n{\"level\":\"info\",\"ts\":1585060938.5031219,\"logger\":\"proxy\",\"msg\":\"Skipping cache lookup\",\"resource\":{\"IsResourceRequest\":false,\"Path\":\"/version/openshift\",\"Verb\":\"get\",\"APIPrefix\":\"\",\"APIGroup\":\"\",\"APIVersion\":\"\",\"Namespace\":\"\",\"Resource\":\"\",\"Subresource\":\"\",\"Name\":\"\",\"Parts\":null}}\n{\"level\":\"info\",\"ts\":1585060938.522412,\"logger\":\"proxy\",\"msg\":\"Skipping cache lookup\",\"resource\":{\"IsResourceRequest\":false,\"Path\":\"/apis\",\"Verb\":\"get\",\"APIPrefix\":\"\",\"APIGroup\":\"\",\"APIVersion\":\"\",\"Namespace\":\"\",\"Resource\":\"\",\"Subresource\":\"\",\"Name\":\"\",\"Parts\":null}}\n{\"level\":\"info\",\"ts\":1585060938.5421581,\"logger\":\"proxy\",\"msg\":\"Skipping cache lookup\",\"resource\":{\"IsResourceRequest\":false,\"Path\":\"/apis\",\"Verb\":\"get\",\"APIPrefix\":\"\",\"APIGroup\":\"\",\"APIVersion\":\"\",\"Namespace\":\"\",\"Resource\":\"\",\"Subresource\":\"\",\"Name\":\"\",\"Parts\":null}}\n{\"level\":\"info\",\"ts\":1585060938.587947,\"logger\":\"logging_event_handler\",\"msg\":\"[playbook task]\",\"name\":\"microcks\",\"namespace\":\"microcks\",\"gvk\":\"microcks.github.io/v1alpha1, Kind=MicrocksInstall\",\"event_type\":\"playbook_on_task_start\",\"job\":\"3916589616287113937\",\"EventData.Name\":\"microcks : Get an existing MongoDB Secret\"}\n\n--------------------------- Ansible Task StdOut -------------------------------\n\nTASK [microcks : Get an existing MongoDB Secret] *******************************\ntask path: /Users/lbroudou/Development/github/microcks-ansible-operator/roles/microcks/tasks/main.yml:12\n\n-------------------------------------------------------------------------------\n[...]\n```\n\n### E2E tests\n\nWe're using the [Kuttl](https://kuttl.dev) tooling for automated end-to-end tests of this operator. Using a running Minikube instance locally (or other flavour), you can just launch following command to run e2e tests:\n\n```sh\n$ kubectl kuttl test --start-kind=false --manifest-dir=./tests/manifests ./tests/e2e\n2022/01/01 20:40:19 running without a 'kuttl-test.yaml' configuration\n2022/01/01 20:40:19 kutt-test config testdirs is overridden with args: [ ./tests/e2e ]\n=== RUN   kuttl\n    harness.go:457: starting setup\n    harness.go:248: running tests using configured kubeconfig.\n    harness.go:285: Successful connection to cluster at: https://192.168.64.11:8443\n2022/01/01 20:40:20 Namespace:/microcks created\n2022/01/01 20:40:20 CustomResourceDefinition:/microcksinstalls.microcks.github.io updated\n2022/01/01 20:40:20 Role:microcks/microcks-ansible-operator created\n2022/01/01 20:40:20 ServiceAccount:microcks/microcks-ansible-operator created\n2022/01/01 20:40:20 RoleBinding:microcks/microcks-ansible-operator created\n2022/01/01 20:40:20 Deployment:microcks/microcks-ansible-operator created\n    harness.go:353: running tests\n    harness.go:74: going to run test suite with timeout of 30 seconds for each step\n    harness.go:365: testsuite: ./tests/e2e has 1 tests\n=== RUN   kuttl/harness\n=== RUN   kuttl/harness/basic-crd\n=== PAUSE kuttl/harness/basic-crd\n=== CONT  kuttl/harness/basic-crd\n    logger.go:42: 20:40:20 | basic-crd | Creating namespace: kuttl-test-saved-robin\n    logger.go:42: 20:40:20 | basic-crd/0-basic-crd | starting test step 0-basic-crd\n    logger.go:42: 20:40:20 | basic-crd/0-basic-crd | MicrocksInstall:microcks/microcks created\n    logger.go:42: 20:40:25 | basic-crd/0-basic-crd | test step completed 0-basic-crd\n    logger.go:42: 20:40:25 | basic-crd/1- | starting test step 1-\n    logger.go:42: 20:40:42 | basic-crd/1- | test step completed 1-\n    logger.go:42: 20:40:42 | basic-crd/2- | starting test step 2-\n    logger.go:42: 20:40:42 | basic-crd/2- | test step completed 2-\n    logger.go:42: 20:40:42 | basic-crd/3- | starting test step 3-\n    logger.go:42: 20:41:11 | basic-crd/3- | test step completed 3-\n    logger.go:42: 20:41:11 | basic-crd/4- | starting test step 4-\n    logger.go:42: 20:41:27 | basic-crd/4- | test step completed 4-\nWarning: events.k8s.io/v1beta1 Event is deprecated in v1.22+, unavailable in v1.25+\n    logger.go:42: 20:41:27 | basic-crd | basic-crd events from ns kuttl-test-saved-robin:\n    logger.go:42: 20:41:27 | basic-crd | Deleting namespace: kuttl-test-saved-robin\n=== CONT  kuttl\n    harness.go:399: run tests finished\n    harness.go:508: cleaning up\n    harness.go:563: removing temp folder: \"\"\n--- PASS: kuttl (68.14s)\n    --- PASS: kuttl/harness (0.00s)\n        --- PASS: kuttl/harness/basic-crd (67.76s)\nPASS\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrocks%2Fmicrocks-ansible-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrocks%2Fmicrocks-ansible-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrocks%2Fmicrocks-ansible-operator/lists"}