{"id":19366256,"url":"https://github.com/afritzler/oopsie","last_synced_at":"2025-04-23T14:31:36.433Z","repository":{"id":36543856,"uuid":"226591966","full_name":"afritzler/oopsie","owner":"afritzler","description":"Helping Kubernauts sailing stormy container waters by harnessing the wisdom of the internet. 👌🦄","archived":false,"fork":false,"pushed_at":"2025-03-31T10:32:25.000Z","size":8930,"stargazers_count":35,"open_issues_count":5,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T16:11:14.449Z","etag":null,"topics":["aiops","cloud-native","devops","forensics","kubernetes","problem-solving"],"latest_commit_sha":null,"homepage":"","language":"Go","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/afritzler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-08T00:02:30.000Z","updated_at":"2025-02-17T12:08:07.000Z","dependencies_parsed_at":"2023-10-12T18:40:47.630Z","dependency_job_id":"3126525b-6f25-4ef5-ac49-2f4eae5d6637","html_url":"https://github.com/afritzler/oopsie","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afritzler%2Foopsie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afritzler%2Foopsie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afritzler%2Foopsie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afritzler%2Foopsie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/afritzler","download_url":"https://codeload.github.com/afritzler/oopsie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250451772,"owners_count":21432895,"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":["aiops","cloud-native","devops","forensics","kubernetes","problem-solving"],"created_at":"2024-11-10T07:43:49.116Z","updated_at":"2025-04-23T14:31:35.552Z","avatar_url":"https://github.com/afritzler.png","language":"Go","readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/logo_v1.png\" width=\"250\"\u003e\u003c/p\u003e\n\n# oopsie\n[![Go Report Card](https://goreportcard.com/badge/github.com/afritzler/oopsie)](https://goreportcard.com/report/github.com/afritzler/oopsie)\n\u003ca href=\"https://gitter.im/k8s-oopsie/community\"\u003e\u003cimg alt=\"Gitter\" src=\"https://img.shields.io/gitter/room/k8s-oopsie/community\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/afritzler/oopsie/actions\"\u003e\u003cimg src=\"https://github.com/afritzler/oopsie/workflows/Docker/badge.svg\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/afritzler/oopsie/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/afritzler/oopsie\"\u003e\u003c/a\u003e \u003ca href=\"https://github.com/afritzler/oopsie\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/afritzler/oopsie?style=social\"\u003e\u003c/a\u003e \u003ca href=\"https://twitter.com/afritzler\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/afritzler?style=social\"\u003e\u003c/a\u003e\n\n\n\nOopsie [/ˈuːpsi/] is a Kubernetes controller that watches all `Events` within a cluster and enriches failed objects with solutions found on [StackOverflow](https://stackoverflow.com) ([Github](https://github.com) and other sources coming soon).\n\n![recording](docs/images/recording.gif)\n\n## Why Oopsie?\n\nKubernetes is a great tool for orchestrating containerized workloads on a fleet of machines. Unfortunatelly, it is sometimes not that easy for new Kubernetes users to resolve problems which occur in their deployments. The illustration below is a visual representation of what happens when you deploy your first application after having mastered the [Wordpress and Guestbook examples](https://github.com/kubernetes/examples).\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/shipit.gif\" width=\"200\"\u003e\u003c/p\u003e\n\nOopsie helps you, the people on Slack or community mailing lists, save time by answering questions to problems which already have been solved.\n\n## Usage\n\nYou can install oopsie with `GO111MODULE=\"on\" go get github.com/afritzler/oopsie`.\n\n__NOTE__: please use the latest go to do this, ideally go 1.13 or greater.\n\nThis will put `oopsie` in `$(go env GOPATH)/bin`. If you encounter the error `oopsie: command not found` after installation then you may need to either add that directory to your `$PATH` as shown [here](https://golang.org/doc/code.html#GOPATH) or do a manual installation by cloning the repo and run `make build` from the repository.\n\n```shell\nmkdir -p $GOPATH/src/github.com/afritzler \u0026\u0026 cd $GOPATH/src/github.com/afritzler/\ngit clone https://github.com/afritzler/oopsie.git\ncd oopsie\nmake build\n```\n\nAlternatively you can build the `oopsie` binary using a Docker container\n\n```shell\nmake docker-build\n```\n\nIn order to use `oopsie` you will need to point `KUBECONFIG` to the path `kubeconfig` of your Kubernetes cluster.\n\nIf you have a [kind](https://github.com/kubernetes-sigs/kind) based cluster running, you can set the `KUBECONFIG` prior to running `oopsie`.\n\n```shell\nexport KUBECONFIG=$(kind get kubeconfig-path)\n```\n\nFor [Minikube](https://github.com/kubernetes/minikube) based setup the `kubeconfig` is typically located under `~/.kube/config`.\n\nNow it's time to start the `oopsie` controller.\n\n```shell\noopsie\n```\n\nNow lets brake something by creating a broken deployment on our cluster.\n\n```shell\nkubectl apply -f https://raw.githubusercontent.com/afritzler/oopsie/master/examples/nginx-broken.yaml\n```\n\n`kubectl` should give us the follwing output\n\n```shell\nNAME                                READY   STATUS         RESTARTS   AGE\nnginx-deployment-6b75cdff69-f6hkg   0/1     ErrImagePull   0          10s\n```\n\nIf we now look at the events of our broken pod\n\n```shell\nkubectl describe pod nginx-deployment-6b75cdff69-f6hkg\n```\n\nyou should see the following output\n\n```shell\nEvents:\n  Type     Reason     Age   From                         Message\n  ----     ------     ----  ----                         -------\n  Normal   Scheduled  8s    default-scheduler            Successfully assigned default/nginx-deployment-6b75cdff69-f6hkg to kind-control-plane\n  Normal   Pulling    7s    kubelet, kind-control-plane  Pulling image \"afritzler/nginx:1.17.6\"\n  Warning  Failed     5s    kubelet, kind-control-plane  Failed to pull image \"afritzler/nginx:1.17.6\": rpc error: code = Unknown desc = failed to resolve image \"docker.io/afritzler/nginx:1.17.6\": no available registry endpoint: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed\n  Warning  Failed     5s    kubelet, kind-control-plane  Error: ErrImagePull\n  Normal   BackOff    5s    kubelet, kind-control-plane  Back-off pulling image \"afritzler/nginx:1.17.6\"\n  Warning  Failed     5s    kubelet, kind-control-plane  Error: ImagePullBackOff\n  Normal   Hint       3s    StackOverflow                For error 'Error: ErrImagePull' I found something here -\u003e https://stackoverflow.com/questions/48832017/minikube-error-errimagepull\n  Normal   Hint       3s    StackOverflow                For error 'Error: ImagePullBackOff' I found something here -\u003e https://stackoverflow.com/questions/46002478/error-imagepullbackoff-when-scaling-working-deployment-kubernetes\n```\n\nFollow now the provided SackOverflow links which hopefully help you to resolve your issue. Since `oopsie` is observing all events inside your cluster you might also want to look into the events of other objects such as `node`, `pv`, etc.\n\n## Status and Future Work\n\nThis is the very first version of `oopsie` and currently only has one provider implemented to generate `hint` events. In the future I plan to look into the following topics:\n\n* Github provider to provide references to Github Issues\n* Use NLP techniques (tokenization/entity extraction) to improve search results\n* In-cluster operations documentation\n\n## Feedback and Support\n\nFeedback and contributions are always welcome! Feel free to open an [issue](https://github.com/afritzler/oopsie/issues) in case you hit any road bumps.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafritzler%2Foopsie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fafritzler%2Foopsie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafritzler%2Foopsie/lists"}