{"id":20915095,"url":"https://github.com/microcks/microcks-operator","last_synced_at":"2026-04-09T10:07:18.199Z","repository":{"id":90376135,"uuid":"580477668","full_name":"microcks/microcks-operator","owner":"microcks","description":"New Kubernetes Operator for easy setup and management of Microcks entities","archived":false,"fork":false,"pushed_at":"2026-03-09T15:48:30.000Z","size":728,"stargazers_count":13,"open_issues_count":7,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-09T20:55:12.730Z","etag":null,"topics":["java","kubernetes","kubernetes-operator","microcks","operator"],"latest_commit_sha":null,"homepage":"https://microcks.io","language":"Java","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":null,"security":"SECURITY-INSIGHTS.yml","support":null,"governance":"GOVERNANCE.md","roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":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":"2022-12-20T16:55:46.000Z","updated_at":"2026-03-09T15:48:34.000Z","dependencies_parsed_at":"2024-11-07T15:20:17.406Z","dependency_job_id":"35f9de26-0990-41da-a1ee-71f4cdd6caf8","html_url":"https://github.com/microcks/microcks-operator","commit_stats":{"total_commits":71,"total_committers":3,"mean_commits":"23.666666666666668","dds":"0.16901408450704225","last_synced_commit":"11ab328e1c28e154ba71c17de49aaf61ebaf00bd"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/microcks/microcks-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microcks","download_url":"https://codeload.github.com/microcks/microcks-operator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microcks%2Fmicrocks-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30327549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["java","kubernetes","kubernetes-operator","microcks","operator"],"created_at":"2024-11-18T16:13:00.955Z","updated_at":"2026-04-09T10:07:18.185Z","avatar_url":"https://github.com/microcks.png","language":"Java","funding_links":["https://github.com/sponsors/microcks","https://opencollective.com/microcks"],"categories":[],"sub_categories":[],"readme":"# Microcks Operator\n\nKubernetes Operator for easy setup and management of Microcks installs and other entities (using Quarkus undercover 😉)\n\nThis Operator replaces the decommissioned [microcks-ansible-operator](https://github.com/microcks/microcks-ansible-operator)\nthat was hard to maintain and to evolve.\n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/microcks/microcks-operator/build-verify.yml?logo=github\u0026style=for-the-badge)](https://github.com/microcks/microcks/actions)\n[![Container](https://img.shields.io/badge/dynamic/json?color=blueviolet\u0026logo=docker\u0026style=for-the-badge\u0026label=Quay.io\u0026query=tags[1].name\u0026url=https://quay.io/api/v1/repository/microcks/microcks-operator/tag/?limit=10\u0026page=1\u0026onlyActiveTags=true)](https://quay.io/repository/microcks/microcks-operator?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-operator-image\u0026style=for-the-badge)](https://artifacthub.io/packages/search?repo=microcks-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 release version is `0.0.7`.\n\nThe current development version is `0.0.8-SNAPSHOT`. \n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/microcks/microcks-operator/build-verify.yml?logo=github\u0026style=for-the-badge)](https://github.com/microcks/microcks/actions)\n\n#### Fossa license and security scans\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-operator.svg?type=shield\u0026issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-operator?ref=badge_shield\u0026issueType=license)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-operator.svg?type=shield\u0026issueType=security)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-operator?ref=badge_shield\u0026issueType=security)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-operator.svg?type=small)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmicrocks%2Fmicrocks-operator?ref=badge_small)\n\n#### Signature, Provenance, SBOM\n\n[![Static Badge](https://img.shields.io/badge/supply_chain-documentation-blue?style=for-the-badge\u0026logo=securityscorecard\u0026label=Supply%20Chain\u0026link=https%3A%2F%2Fmicrocks.io%2Fdocumentation%2Freferences%2Fcontainer-images%23software-supply-chain-security)](https://microcks.io/documentation/references/container-images#software-supply-chain-security)\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## Versions\n\n| Operator                  | Microcks Versions                                    |\n|---------------------------|------------------------------------------------------|\n| `0.0.1`, `0.0.2`          | `1.10.x`                                             |\n| `0.0.3`, `0.0.4`, `0.0.5` | `1.11.x`, `1.12.x`                                   |\n| `0.0.6`, `0.0.7`          | `1.11.x`, `1.12.x`, `1.13.x`                         |\n| `0.0.8`                   | `1.11.x`, `1.12.x`, `1.13.x`, `1.14.x` and `nightly` |\n\n## Installation\n\nAssuming you're connected to a Kubernetes cluster as an administrator, you must start installing the CRD in your cluster:\n\n```sh\nkubectl apply -f deploy/crd/microckses.microcks.io-v1.yml\nkubectl apply -f deploy/crd/apisources.microcks.io-v1.yml\nkubectl apply -f deploy/crd/secretsources.microcks.io-v1.yml\n# If using operator version \u003e= 0.0.4\nkubectl apply -f deploy/crd/tests.microcks.io-v1.yml\n```\n\nThen you can install the operator itself in a dedicated namespace -let's say `microcks`- using: \n\n```sh\nkubectl create namespace microcks\nkubectl apply -f deploy/operator-jvm.yaml -n microcks\n```\n\nSince version `0.0.6`, Microcks Operator is also available as a Helm chart. Check the Helm Chart [README](./deploy/helm/microcks-operator/README.md) file for more details.\n\n## Usage\n\nOnce operator is installed, you can create a new `Microcks` Custom Resource (CR) to get a working instance of Microcks.\n\nIn below example, we're creating a new `Microcks` CR named `microcks` that will install Microcks `1.13.0`.\nYou need to customize the two `url` fields to match your environment with DNS names that will be mapped to the Microcks and Keycloak ingresses. \n\n```sh\ncat \u003c\u003cEOF | kubectl apply -f -\napiVersion: microcks.io/v1alpha1\nkind: Microcks\nmetadata:\n  name: microcks\nspec:\n  version: 1.13.0\n  microcks:\n    url: microcks.m.minikube.local\n  keycloak:\n    url: keycloak.m.minikube.local\nEOF\n```\n\n\u003e For comprehensive documentation and examples of `Microcks` CR, please refer to the [Microcks CR documentation](./documentation/microcks-cr.md).\n\nMicrocks Operator also provide the `APISource` and `SecretSource` CRs to manage the content of a Microcks instance. Thanks to those CR, \nyou can easily define load pre-existing API definitions and connection secrets into an operator-managed Microcks instance.\n\nFor example, you can create a new `APISource` CR named `tests-artifacts` that will load 4 artifacts into the `microcks` instance\nand create an addition `Hello Soep Service` importer:\n\n```sh\ncat \u003c\u003cEOF | kubectl apply -f -\napiVersion: microcks.io/v1alpha1\nkind: APISource\nmetadata:\n  name: tests-artifacts\n  annotations:\n    microcks.io/instance: microcks\nspec:\n  artifacts:\n    - url: https://raw.githubusercontent.com/microcks/microcks/master/samples/APIPastry-openapi.yaml\n      mainArtifact: true\n    - url: https://raw.githubusercontent.com/microcks/microcks/master/samples/hello-v1.proto\n      mainArtifact: true\n    - url: https://raw.githubusercontent.com/microcks/microcks/master/samples/HelloService.metadata.yml\n      mainArtifact: false\n    - url: https://raw.githubusercontent.com/microcks/microcks/master/samples/HelloService.postman.json\n      mainArtifact: false\n  importers:\n    - name: Hello Soap Service\n      mainArtifact: true\n      active: false\n      repository:\n        url: https://raw.githubusercontent.com/microcks/microcks/master/samples/HelloService-soapui-project.xml\n      labels:\n        domain: authentication\n        status: GA\n        team: Team A\nEOF\n```\n\n\u003e For comprehensive documentation and examples of `APISource` CR, please refer to the [APISource CR documentation](./documentation/apisource-cr.md).\n\nA Microcks instance may also need some secrets to be able to connect or to authenticate to external services like repositories or messaging brokers.\nThe `SecretSource` CR is here to help you define those secrets and have them loaded into the Microcks instance.\n\nFor example, you can create a new `SecretSource` CR named `tests-secrets` that will load 2 secrets into the `microcks` instance.\nThe first one is a simple secret with username, password, token and CA certificate. The second one is a secret that will be loaded \nfrom a Kubernetes secret named `microcks-keycloak-admin` and will use the `username` and `password` keys from this secret:\n\n```sh\ncat \u003c\u003cEOF | kubectl apply -f -\napiVersion: microcks.io/v1alpha1\nkind: SecretSource\nmetadata:\n  name: tests-secrets\n  annotations:\n    microcks.io/instance: microcks\nspec:\n  secrets:\n    - name: my-secret\n      description: My secret description\n      username: my-username\n      password: my-password\n      token: my-token\n      tokenHeader: my-token-header\n      caCertPem: |\n        ----BEGIN CERTIFICATE-----\n        SGVsbG8gZXZlcnlvbmUgYW5kIHdlbGNvbWUgdG8gTWljcm9ja3Mh\n        ----END CERTIFICATE-----\n    - name: my-secret-2\n      description: My secret description 2\n      valuesFrom:\n        secretRef: microcks-keycloak-admin\n        usernameKey: username\n        passwordKey: password\nEOF\n```\n\n\u003e For comprehensive documentation and examples of `SecretSource` CR, please refer to the [SecretSource CR documentation](./documentation/secretsource-cr.md).\n\nStarting with version `0.0.4`, Microcks Operator also allows you to create `Test` CRs that will be used to run API conformance \ntests in a targeted Microcks instance.\n\nFor example, you can create a new `Test` CR named `tests-apipastries-01` that trigger the execution of an API conformance test\non the Microcks instance named `microcks`. This test will be run against the `API Pastries:0.0.1` service and will target\nthe `http://apipastries-app-01:3001` endpoint, checking the conformance of the API implementation against its OpenAPI specification:\n\n```shell\ncat \u003c\u003cEOF | kubectl apply -f -\napiVersion: microcks.io/v1alpha1\nkind: Test\nmetadata:\n  name: tests-apipastries-01\n  annotations:\n    microcks.io/instance: microcks\nspec:\n  serviceId: \"API Pastries:0.0.1\"\n  testEndpoint: http://apipastries-app-01:3001\n  runnerType: OPEN_API_SCHEMA\n  timeout: 5000\n  retentionPolicy: Retain\nEOF\n```\n\n\u003e For comprehensive documentation and examples of `Test` CR, please refer to the [Test CR documentation](./documentation/test-cr.md).\n\n## How to build it?\n\nThe operator is made of 2 modules:\n* `api` contains the model for manipulating Custom Resources elements using Java,\n* `operator` contains the Kubernetes controller implementing the remediation logic. It is implemented in [Quarkus](https://www.quarkus.io).\n\n### Api module\n\nSimply execute:\n\n```sh\nmvn clean install\n```\n\n### Operator module\n\nProduce a native container image with the name elements specified within the `pom.xml`:\n\n```sh\nmvn package -Pnative -Dquarkus.native.container-build=true -Dquarkus.container-image.build=true\n```\n\n## Local development\n\nBe sure to be connected to a Kubernetes cluster first with a context set to a default namespace. \n\n### For Microcks CR\n\nIn this situation, you'll be able to use Quarkus iterative development loop. From the `operator/` folder, launch:\n\n```sh\nmvn quarkus:dev\n```\n\nThe operator will generate and then install/update the latest version of the CRD and wait for reconciliation loop to be triggered.\n\nFrom the `deploy/` folder, create a new sample CRD using:\n\n```sh\nkubectl apply -f samples/microcks-microcks.io-v1alpha1.yml\n```\n\nYou shall see the operator starting the reconciliation with a log like:\n\n```\n2024-07-31 14:12:18,732 INFO  [io.git.mic.ope.MicrocksReconciler] (ReconcilerExecutor-microcksreconciler-391) Starting reconcile operation for 'microcks'\n[...]\n2024-07-31 14:12:48,615 INFO  [io.git.mic.ope.MicrocksReconciler] (ReconcilerExecutor-microcksreconciler-716) Keycloak reconciliation triggered an update? false\n2024-07-31 14:12:48,618 INFO  [io.git.mic.ope.MicrocksReconciler] (ReconcilerExecutor-microcksreconciler-716) Mongo reconciliation triggered an update?: false\n2024-07-31 14:12:48,621 INFO  [io.git.mic.ope.MicrocksReconciler] (ReconcilerExecutor-microcksreconciler-716) Microcks reconciliation triggered an update?: false\n2024-07-31 14:12:48,623 INFO  [io.git.mic.ope.MicrocksReconciler] (ReconcilerExecutor-microcksreconciler-716) Postman reconciliation triggered an update?: false\n2024-07-31 14:12:48,627 INFO  [io.git.mic.ope.MicrocksReconciler] (ReconcilerExecutor-microcksreconciler-716) Async reconciliation triggered an update?: false\n2024-07-31 14:12:48,627 INFO  [io.git.mic.ope.MicrocksReconciler] (ReconcilerExecutor-microcksreconciler-716) Finishing reconcile operation for 'microcks'\n2024-07-31 14:12:48,628 INFO  [io.git.mic.ope.MicrocksReconciler] (ReconcilerExecutor-microcksreconciler-716) Returning a noUpdate control. =============================\n \n```\n\n### For APISource \u0026 SecretSource CR\n\nIn this situation, you won't be able to run the operator in local Quarkus process as the controllers for these CRs\nuse internal Kubernetes network names to interact with Microcks instance.\n\nThe Operator must then be deployed in your local Kubernetes cluster. You can use the `deploy/operator-dev-jvm.yaml` file to do so.\n\nThen you can create the needed sample CRs using:\n\n```sh\nkubectl apply -f samples/apisource-microcks.io-v1alpha1-tests.yml\nkubectl apply -f samples/secretsource-microcks.io-v1alpha1-tests.yml\n```\n\nYou can check the reconciliation status of those CRs using:\n\n```sh\nkc get apisources/tests-artifacts -o yaml\nkc get secretsources/tests-secrets -o yaml\n```\n\nWhen iterating on the operator code, you can rebuild the operator container image and then apply the new version using:\n\n```sh\nkc scale --replicas=0 deployment/microcks-operator\nmvn clean package \u0026\u0026 docker build -f src/main/docker/Dockerfile.jvm -t quay.io/lbroudoux/microcks-operator:jvm-latest . \u0026\u0026 docker push quay.io/lbroudoux/microcks-operator:jvm-latest\nkc scale --replicas=1 deployment/microcks-operator\n```\n\n## Local tests\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrocks%2Fmicrocks-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrocks%2Fmicrocks-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrocks%2Fmicrocks-operator/lists"}