{"id":16701617,"url":"https://github.com/mruoss/kubegen","last_synced_at":"2025-04-10T04:11:55.952Z","repository":{"id":230353078,"uuid":"776099054","full_name":"mruoss/kubegen","owner":"mruoss","description":"A Kubernetes Client Generator for Elixir","archived":false,"fork":false,"pushed_at":"2025-04-04T14:42:44.000Z","size":154,"stargazers_count":8,"open_issues_count":2,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-04T15:35:09.200Z","etag":null,"topics":["elixir","generator","kubernetes","kubernetes-client"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mruoss.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["mruoss"]}},"created_at":"2024-03-22T17:19:58.000Z","updated_at":"2025-04-04T14:42:47.000Z","dependencies_parsed_at":"2024-05-30T19:32:00.120Z","dependency_job_id":"1c0e9c7d-f7d6-4bcf-b134-3b4a86a8f316","html_url":"https://github.com/mruoss/kubegen","commit_stats":null,"previous_names":["mruoss/kubegen"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mruoss%2Fkubegen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mruoss%2Fkubegen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mruoss%2Fkubegen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mruoss%2Fkubegen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mruoss","download_url":"https://codeload.github.com/mruoss/kubegen/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248154994,"owners_count":21056543,"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":["elixir","generator","kubernetes","kubernetes-client"],"created_at":"2024-10-12T18:44:52.992Z","updated_at":"2025-04-10T04:11:55.929Z","avatar_url":"https://github.com/mruoss.png","language":"Elixir","funding_links":["https://github.com/sponsors/mruoss"],"categories":[],"sub_categories":[],"readme":"# Kubegen\n\nGenerate resource based Kubernetes clients with `Kubegen`.\n\n[![Module Version](https://img.shields.io/hexpm/v/kubegen.svg)](https://hex.pm/packages/kubegen)\n[![Last Updated](https://img.shields.io/github/last-commit/mruoss/kubegen.svg)](https://github.com/mruoss/kubegen/commits/main)\n\n[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/kubegen/)\n[![Total Download](https://img.shields.io/hexpm/dt/kubegen.svg)](https://hex.pm/packages/kubegen)\n[![License](https://img.shields.io/hexpm/l/kubegen.svg)](https://github.com/mruoss/kubegen/blob/main/LICENSE.md)\n\n## Installation\n\n`kubegen` is a code generator. Add the package as dev dependency. Make sure to  \nadd `kubereq` to your list of dependencies as well:\n\n```elixir\ndef deps do\n  [\n    {:kubegen, \"~\u003e 0.1.2\", only: :dev, runtime: false},\n    {:kubereq, \"~\u003e 0.3.0\"}\n  ]\nend\n```\n\nThe docs can be found at \u003chttps://hexdocs.pm/kubegen\u003e.\n\n## Configuration\n\nBefore you can generate clients, you need to create a configuration in your\n`config.exs` under `config :kubegen, :default` or `config :kubegen, :mycluster`.\nwhere a custom `:mycluster` identifier is passed as argument\n(`mix kubegen -c mycluster`)\n\n- `:module_prefix` - The prefix of the generated modules (e.g. `MyApp.K8sClient`)\n- `:kubeconfig_pipeline` - The `Pluggable` pipeline responsible for loading the Kubernetes config. (e.g. `Kubereq.Kubeconfig.Default`)\n- `:resources` - List of resources for which clients are generated.\n\nThe entries of `:resources` can be in the form of\n\n- Group-Version-Kind in the case of Kubernetes core resources.\n- Path to a local CRD YAML (multiple CRDs in one file are supported)\n- URL to a public remote CRD Yaml (multiple CRDs in one file are supported)\n\n### Example\n\n```ex\nconfig :kubegen, :default,\n  module_prefix: MyApp.K8sClient,\n  kubeconfig_pipeline: Kubereq.Kubeconfig.Default,\n  resources: [\n    \"v1/ConfigMap\",\n    \"rbac.authorization.k8s.io/v1/ClusterRole\",\n    \"test/support/foos.example.com.yaml\", # local CRD\n    \"https://raw.githubusercontent.com/mruoss/kompost/main/priv/manifest/postgresdatabase.crd.yaml\" # public remote CRD\n  ]\n```\n\n### How to find the correct Group-Version-Kind identifier\n\nUse `mix kubegen.search` to search for GVKs (e.g. `mix.kubegen.search Pod`)\n\n### Generate Resource Clients\n\nNow you can (re-)generate clients using `mix kubegen` or `mix kubegen -c mycluster`\n\n## Using the generated Clients\n\n`kubegen` creates a module per resource and subresource. Each resource is\ngeneraated with functions for the operations applicable to that resource. The\ngenerated functions also come with `@doc` documentations.\n\n### ConfigMap Example\n\nYou can use `apply/3` or `create/2` to create a new resource:\n\n```ex\nimport YamlElixir.Sigil\nalias MyApp.K8sClient.Core.V1.ConfigMap\n\nConfigMap.apply(~y\"\"\"\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  namespace: default\n  name: my-config\n  labels:\n    app: my-app\ndata:\n  foo: bar\n\"\"\")\n```\n\nTo retrieve a resource, use `get/2`:\n\n```ex\nConfigMap.get(\"default\", \"my-config\")\n```\n\nUse `list/0` or `list/1` to list resources of that kind in all namespaces or\n`list/2` to list resources in a specific namespace. Label or field selectors can\nbe passed as option if needed.\n\n```ex\nConfigMap.list(\"default\", label_selectors: [{\"app\", \"my-app\"}])\n```\n\n`delete/2` and `delete_all/2` delete a single or multiple resources (whereas the\nlatter also supports selectors).\n\n```ex\nConfigMap.delete(\"default\", \"my-config\")\nConfigMap.delete_all(\"default\", label_selectors: [{\"app\", \"my-app\"}])\n```\n\nThere are more functions like `update/1`, `json_path/3`, `merge_patch/3`,\n`watch/N`, `watch_single/3` `wait_until/4`. Checkout the generated modules for\ntheir documentation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmruoss%2Fkubegen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmruoss%2Fkubegen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmruoss%2Fkubegen/lists"}