{"id":15111559,"url":"https://github.com/digitalocean/do-operator","last_synced_at":"2025-04-06T06:07:35.334Z","repository":{"id":65325473,"uuid":"211156041","full_name":"digitalocean/do-operator","owner":"digitalocean","description":"The Kubernetes Operator for DigitalOcean","archived":false,"fork":false,"pushed_at":"2025-03-24T02:43:27.000Z","size":15587,"stargazers_count":88,"open_issues_count":28,"forks_count":11,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-03-30T05:04:37.124Z","etag":null,"topics":["databases","dbaas","digitalocean","doks","hacktoberfest","kubernetes","operator"],"latest_commit_sha":null,"homepage":"","language":"Go","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/digitalocean.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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}},"created_at":"2019-09-26T18:28:04.000Z","updated_at":"2025-03-22T23:15:35.000Z","dependencies_parsed_at":"2024-01-11T23:35:38.917Z","dependency_job_id":"de02f2e5-f0a1-49f1-9e42-93ae53aee202","html_url":"https://github.com/digitalocean/do-operator","commit_stats":{"total_commits":69,"total_committers":12,"mean_commits":5.75,"dds":0.5797101449275363,"last_synced_commit":"b9dde4f0876b62203ac94e773718ad242bb33b12"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digitalocean%2Fdo-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digitalocean%2Fdo-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digitalocean%2Fdo-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digitalocean%2Fdo-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/digitalocean","download_url":"https://codeload.github.com/digitalocean/do-operator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247441049,"owners_count":20939239,"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":["databases","dbaas","digitalocean","doks","hacktoberfest","kubernetes","operator"],"created_at":"2024-09-26T00:21:16.380Z","updated_at":"2025-04-06T06:07:35.315Z","avatar_url":"https://github.com/digitalocean.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `do-operator`: The Kubernetes Operator for DigitalOcean\n\n`do-operator` is a Kubernetes operator for managing and consuming [DigitalOcean](https://www.digitalocean.com/) resources from a Kubernetes cluster.\n\nCurrently it supports [DigitalOcean Managed Databases](https://www.digitalocean.com/products/managed-databases).\n\n## Status\n\n**This project is in BETA.**\n\n* This operator should not be depended upon for production use at this time.\n* The CRDs in this project are currently `v1alpha1` and may change in the future.\n* DigitalOcean supports this project on a best-effort basis via GitHub issues.\n\n**If you have already enabled `do-operator` by clicking `Add database operator` button from cloud control panel UI while creating your `DOKS` cluster, please `DO NOT` install it again.**\n\n## Quick Start\n\nTo install the operator on a Kubernetes cluster, you can follow these steps:\n\n1. Install cert-manager (if not already installed):\n```sh\nkubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml\n```\n2. Generate a [DigitalOcean API token](https://docs.digitalocean.com/reference/api/create-personal-access-token/) and base64 encode it.\n3. Edit the manifest for the most recent version in the `releases/` directory. Find the `do-operator-do-api-token` Secret and replace the `access-token` value with your base64-encoded token:\n```yaml\napiVersion: v1\ndata:\n  access-token: \u003cyour base64-encoded token goes here\u003e\nkind: Secret\nmetadata:\n  name: do-operator-do-api-token\n  namespace: do-operator-system\ntype: Opaque\n```\n4. Deploy the manifest:\n```sh\nkubectl apply -f releases/do-operator-\u003cversion\u003e.yaml\n```\n\n## Usage\n\nSee the full documentation in the [docs](docs/) directory.\n\n## Development\n\nThe `do-operator` is built using [kubebuilder](https://github.com/kubernetes-sigs/kubebuilder).\nThe [Kubebuilder Book](https://book.kubebuilder.io/) is a useful reference for understanding how the pieces fit together.\n\nTo test your changes you will need a Kubernetes cluster to run against.\nWe suggest using [DigitalOcean Kubernetes](https://docs.digitalocean.com/products/kubernetes/), but you may use [KIND](https://sigs.k8s.io/kind) or any other cluster for testing.\nThe following will automatically use the current context in your kubeconfig file (i.e. whatever cluster `kubectl cluster-info` shows).\n\n**Note that you will be billed for any DigitalOcean resources you create via the operator while testing.**\nMake sure you are aware of [DigitalOcean's pricing](https://www.digitalocean.com/pricing) and clean up resources when you're finished testing.\n\n### Building and Installing\n\n1. Install the Custom Resource Definitions:\n\n```sh\nmake install\n```\n\n**Note M1 Macbook users:** this project is made with Kubebuilder which uses `Kustomize v3.8.7` which doesn't have an ARM release and so you need to [manually install kustomize](#manually-installing-kustomize-m1-mac-users) for this step to succeed\n\n2. Build and push your image to the location specified by `IMG` (in the [Makefile](Makefile)):\n\n```sh\nmake docker-build docker-push IMG=\u003csome-registry\u003e/do-operator:tag\n```\n\n3. [Deploy cert-manager](https://cert-manager.io/docs/installation/), which is necessary to manage certificates for the webhooks.\n\n4. Generate a [DigitalOcean API token](https://docs.digitalocean.com/reference/api/create-personal-access-token/) to use for testing.\n\n5. Create a local environment file containing your API token. Note that this file is in the `.gitignore` so it will remain local to your machine:\n\n```sh\ncat \u003c\u003cEOF \u003e config/manager/do-api-token.env\naccess-token=\u003cyour api token here\u003e\nEOF\n```\n\nThe contents of this file will be used to create a secret in the cluster, which is used by the operator deployment to manage resources in your DigitalOcean account.\n\n6. Deploy the controller to the cluster with the image specified by `IMG`:\n\n```sh\nmake deploy IMG=\u003csome-registry\u003e/do-operator:tag\n```\n\n### Undeploying the Controller\n\nTo undeploy the controller from the cluster:\n\n```sh\nmake undeploy\n```\n\n### Uninstalling the CRDs\n\nTo delete the CRDs from the cluster:\n\n```sh\nmake uninstall\n```\n\n### Manually Installing Kustomize (M1 Mac users)\n1. Clone the [Kustomize project](https://github.com/kubernetes-sigs/kustomize)\n2. Go to the `v3.5.7` branch: `git checkout kustomize/v3.8.7`\n3. Go into the `kustomize` folder (so from the project root it would be `kustomize/kustomize/`)\n4. `go build .`\n5. Now move the generated `kustomize` binary into the `bin` directory in this project (create it if it doesn't exist `mkdir bin`): `mv kustomize \u003cproject path\u003e/bin/kustomize`\n\n### Update Go and dependencies\n1. Update Go version in\n   1. [go.mod](./go.mod)\n   2. [.github/workflows/release.yml](./.github/workflows/release.yml)\n   3. [.github/workflows/test.yml](./.github/workflows/test.yml)\n   4. [Dockerfile](./Dockerfile)\n2. Update Go dependencies\n   ```shell\n   go get -u ./...\n   go mod tidy\n   go mod vendor\n   ```\n3. Run `make test`\n4. Create and merge PR\n\n### Release\n1. Create release manifest files by running `IMG_TAG=vX.Y.Z make release-manifests`\n2. Create and merge PR\n3. [Trigger the `release` GitHub action workflow](https://github.com/digitalocean/do-operator/actions/workflows/release.yml)\n    - Draft a new release [here](https://github.com/digitalocean/do-operator/releases) for the new version\n    - Creating a new release will trigger the [release](https://github.com/digitalocean/do-operator/actions/workflows/release.yml) Github Action\n    - Follow the [release](https://github.com/digitalocean/do-operator/actions/workflows/release.yml) Github Action until successful completion.\n\n## Contributing\n\nAt DigitalOcean we value and love our community!\nIf you have any issues or would like to contribute, see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nCopyright 2022 DigitalOcean.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigitalocean%2Fdo-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdigitalocean%2Fdo-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigitalocean%2Fdo-operator/lists"}