diff --git a/.github/workflows/ai-assistant-fetch-content.yml b/.github/workflows/ai-assistant-fetch-content.yml new file mode 100644 index 00000000..71aa3553 --- /dev/null +++ b/.github/workflows/ai-assistant-fetch-content.yml @@ -0,0 +1,74 @@ +name: Fetch content for OpenAI assistant + +on: + workflow_dispatch: + inputs: + purge-all-content: + type: boolean + description: Purge all content + default: false + +env: + git-user: github-actions[bot] + git-email: 41898282+github-actions[bot]@users.noreply.github.com + +jobs: + update-content: + name: Fetch content for OpenAI assistant + runs-on: ubuntu-22.04 + env: + PURGE_ALL_CONTENT: ${{inputs.purge-all-content}} + BRANCH_NAME: fetch-ai-content-${{ github.run_id }}-${{ github.run_attempt }} + steps: + - name: "Checkout code" + uses: actions/checkout@v4 + with: + token: ${{ secrets.RELEASE_GH_DEV_ACCOUNT_PAT }} + + - name: "Set up Go" + uses: actions/setup-go@v5 + with: + go-version-file: 'go.mod' + # When the files to be extracted are already present, + # tar extraction in Golangci Lint fails with the "File exists" + # errors. These files appear to be present because of + # cache in setup-go, on disabling the cache we are no more seeing + # such error. Cache is to be enabled once the fix is available for + # this issue: + # https://github.com/golangci/golangci-lint-action/issues/807 + cache: false + + - name: Setup Node + uses: volta-cli/action@v4 + + - name: Set git 'user.name' and 'user.email' + run: | + git config user.name "${{ env.git-user }}" + git config user.email ${{ env.git-email }} + + - name: Create a branch branch + run: | + git checkout -b ${{ env.BRANCH_NAME }} + + - name: Fetch content + run: | + cd ./hack/assistant-setup + npm install + npm run fetch-content + + - name: Push changes to remote + run: | + git add . + git commit -m "Refetch content for OpenAI assistant" + git push --set-upstream origin ${{ env.BRANCH_NAME }} + + - name: Create a pull request + env: + GITHUB_TOKEN: ${{ secrets.RELEASE_GH_DEV_ACCOUNT_PAT }} + run: | + gh pr create \ + --title "Refetch content for OpenAI assistant" \ + --head "${{ env.BRANCH_NAME }}" \ + --base main \ + --label automation \ + --body "This Pull Request is created by automation to update the content for OpenAI assistant." diff --git a/.github/workflows/ai-assistant-reconfigure.yml b/.github/workflows/ai-assistant-reconfigure.yml new file mode 100644 index 00000000..c9e4b638 --- /dev/null +++ b/.github/workflows/ai-assistant-reconfigure.yml @@ -0,0 +1,40 @@ +name: Reconfigure OpenAI assistant + +on: + push: + tags: + - '*' + branches: + - main + +env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + +jobs: + reconfigure-ai-assistant: + name: Reconfigure OpenAI assistant + runs-on: ubuntu-22.04 + steps: + - name: Set environment variables + run: | + if [[ $GITHUB_REF == refs/tags/* ]]; then + # tag push + echo "ASSISTANT_ENV=prod" >> $GITHUB_ENV + elif [[ $GITHUB_REF == refs/heads/* ]]; then + # branch push + echo "ASSISTANT_ENV=dev" >> $GITHUB_ENV + fi + + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node + uses: volta-cli/action@v4 + + - name: Reconfigure assistant + run: | + cd ./hack/assistant-setup + npm install + npm start diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6017ea9c..3cceae36 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ permissions: contents: write jobs: - trigger-relase: + trigger-release: name: Trigger release runs-on: ubuntu-latest steps: diff --git a/README.md b/README.md index 8820a3ae..2cb85785 100644 --- a/README.md +++ b/README.md @@ -58,8 +58,21 @@ This repository shows Botkube Cloud plugins. ## Release +### Fetch content for OpenAI assistant + +The AI plugin uses Botkube content (website, docs, blog posts, etc.). To refresh it, follow the steps: + +1. Navigate to the [`Fetch content for OpenAI assistant` GitHub Actions workflow](https://github.com/kubeshop/botkube-cloud-plugins/actions/workflows/ai-assistant-fetch-content.yml). +1. Optionally check the "Purge all content" checkbox. +1. Trigger the pipeline. + + +The content is shared between dev and prod AI plugin, and is synchronized during the [plugin relese](#release-plugins-for-botkube-agent). + +### Release plugins for Botkube Agent + The latest plugins from `main` are released automatically to the bucket `botkube-cloud-plugins-latest`. -To release a new version of the plugins: +To release a new production version of the plugins: 1. Navigate to the [`Trigger release` GitHub Actions workflow](https://github.com/kubeshop/botkube-cloud-plugins/actions/workflows/release.yml). 1. Provide the target version in the `version` input. Do not forget about the `v` prefix. @@ -67,3 +80,5 @@ To release a new version of the plugins: For example, if you want to release version `1.2.3`, you should provide `version: v1.2.3`. 1. Trigger the pipeline. + +For both latest and production plugins, the OpenAI assistant for AI plugin is reconfigured automatically concurrently to the plugins build. diff --git a/hack/assistant-setup/README.md b/hack/assistant-setup/README.md index d0e4f405..1afb31b7 100644 --- a/hack/assistant-setup/README.md +++ b/hack/assistant-setup/README.md @@ -32,17 +32,28 @@ To use your own assistant, modify the `assistantID` variable in the `index.ts` f ## Development -## Refetch content for file search - -> **NOTE:** The process uses [Jina.AI Reader API](https://github.com/jina-ai/reader) and usually takes 10-15 minutes. All files will be removed before the process starts. +### Refetch content for file search +The process uses [Jina.AI Reader API](https://github.com/jina-ai/reader) and usually takes a few minutes. To scrap the content from the latest Botkube website and Botkube Docs, run the following command: ```sh npm run fetch-content ``` -## Format code +By default, before refetching content starts: + +- downloaded files starting with [package.json](package.json)`https://botkube.io/blog/*` and `https://botkube.io/learn/*` prefixes are kept and won't be updated, +- all other content is removed. + +To refetch all content, run the following command: + +```sh +export PURGE_ALL_CONTENT=true # default: false +npm run fetch-content +``` + +### Format code To format code, run: diff --git a/hack/assistant-setup/content-fetcher/main.go b/hack/assistant-setup/content-fetcher/main.go index 6828288e..24b2839a 100644 --- a/hack/assistant-setup/content-fetcher/main.go +++ b/hack/assistant-setup/content-fetcher/main.go @@ -7,6 +7,7 @@ import ( "net/http" "net/url" "os" + "path/filepath" "regexp" "strings" "time" @@ -27,6 +28,7 @@ const ( maxRetries = 5 retryInterval = 1 * time.Second httpCliTimeout = 1 * time.Minute + purgeAllContentEnv = "PURGE_ALL_CONTENT" ) var excludedDocsPagesRegex = regexp.MustCompile(`^https:\/\/docs\.botkube\.io\/(?:\d+\.\d+|next)\/.*`) @@ -44,9 +46,17 @@ func main() { }, } - log.Infof("Removing old %q directory...", contentDir) - err := os.RemoveAll(contentDir) - loggerx.ExitOnError(err, "while removing old directory") + shouldPurgeAllContent := os.Getenv(purgeAllContentEnv) == "true" + + if shouldPurgeAllContent { + log.Infof("Purging all content as the %s env var is set. Removing old %q directory...", purgeAllContentEnv, contentDir) + err := os.RemoveAll(contentDir) + loggerx.ExitOnError(err, "while purging old content") + } else { + log.Infof("Removing some of the content as the %s env var is not set", purgeAllContentEnv) + err := removeFrequentlyUpdatedContent(log) + loggerx.ExitOnError(err, "while removing old content") + } log.Info("Fetching Botkube sitemap...") marketingPages, err := fetcher.getURLsToDownloadFromSitemap(marketingSitemapURL) @@ -60,7 +70,7 @@ func main() { pagesToFetch := fetcher.preparePageList(docsPages, marketingPages) log.Infof("Found %d pages to fetch", len(pagesToFetch)) - log.Infof("Creating %q directory...", contentDir) + log.Infof("Creating %q directory if doesn't exist...", contentDir) err = os.MkdirAll(contentDir, os.ModePerm) loggerx.ExitOnError(err, "while creating directory") @@ -71,10 +81,19 @@ func main() { errs = multierror.Append(errs, err) continue } - log.WithFields(logrus.Fields{ + + fetchLogger := log.WithFields(logrus.Fields{ "url": page, "filePath": filePath, - }).Infof("Fetching and saving page %d of %d...", i+1, len(pagesToFetch)) + "progress": fmt.Sprintf("%d/%d", i+1, len(pagesToFetch)), + }) + + if _, err := os.Stat(filePath); err == nil { + fetchLogger.Info("Skipping as the file already exists") + continue + } + + fetchLogger.Infof("Downloading page...") err = retry.Do( func() error { @@ -97,6 +116,37 @@ func main() { log.Infof("Saved %d docs pages", len(pagesToFetch)) } +var notFrequentlyUpdatedContentPrefixes = []string{ + "botkube.io__blog__", + "botkube.io__learn__", +} + +func removeFrequentlyUpdatedContent(log logrus.FieldLogger) error { + return filepath.WalkDir(contentDir, func(path string, d os.DirEntry, err error) error { + if err != nil { + return err + } + + if d.IsDir() { + return nil + } + + for _, prefix := range notFrequentlyUpdatedContentPrefixes { + if strings.HasPrefix(d.Name(), prefix) { + log.WithField("path", path).Debug("Skipping removing not frequently updated content") + return nil + } + } + + err = os.Remove(path) + if err != nil { + return err + } + + return nil + }) +} + type contentFetcher struct { log logrus.FieldLogger httpCli *http.Client diff --git a/hack/assistant-setup/content/botkube.io.md b/hack/assistant-setup/content/botkube.io.md index 1744ede6..8db86495 100644 --- a/hack/assistant-setup/content/botkube.io.md +++ b/hack/assistant-setup/content/botkube.io.md @@ -3,14 +3,12 @@ Title: Collaborative Kubernetes Troubleshooting Platform | Botkube URL Source: https://botkube.io/ Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) - A virtual SRE, powered by AI ---------------------------- -### Powered by +Botkube, the AI-Powered Kubernetes Troubleshooting Platform -[![Image 2: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif)](https://botkube.io/solutions/enabling-developers) +[![Image 1: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif)](https://botkube.io/solutions/enabling-developers) Empowering DevOps ----------------- @@ -19,15 +17,16 @@ Error to resolution in one thread: Centralize alerting and troubleshooting in on Botkube integrates essential notifications, with context, and troubleshooting tools directly into your chat platform. Powered by artificial intelligence and automation, it allows teams to tackle common issues without wasting time on repetitive tasks. -[Developer Self-Service ----------------------](https://botkube.io/solutions/enabling-developers) +Developer Self-Service +---------------------- Developers aren’t Kubernetes experts, and they don’t have to be! Botkube empowers developers to self-service and solve Kubernetes problems from the comfort of their existing chat platforms without extensive K8s knowledge. Our AI assistant provides actionable insights and recommendations directly to developers, enabling quick problem resolution without heavy reliance on support teams. -[![Image 3: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/654d07eb1993ada26a1f17b1_Enabling_Developers.gif)](https://botkube.io/solutions/enabling-developers) +[![Image 2: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/654d07eb1993ada26a1f17b1_Enabling_Developers.gif)](https://botkube.io/solutions/enabling-developers) -![Image 4: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/654d0856e99da8d8bd98bf27_flux-diff-1.gif) +![Image 3: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/654d0856e99da8d8bd98bf27_flux-diff-1.gif) Improving Reliability --------------------- @@ -36,9 +35,6 @@ Botkube gives you reliable Kubernetes monitoring in minutes, not days. With powerful filtering, Botkube gets the right notifications to the right teams. Lighten their workload by automating responses to common problems. Accelerate mean time to recovery by receiving alerts, troubleshooting, and resolving issues all in the same place — the chat platform where you already spend much of your time. -See Botkube in Action ---------------------- - Why our users love Botkube: Case Study -------------------------------------- @@ -58,7 +54,7 @@ Join Maria, Developer Advocate for Botkube, in an insightful workshop that lever Speakers: -![Image 5: Mateusz Stostok, Botkube Backend Engineer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 4: Mateusz Stostok, Botkube Backend Engineer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -69,41 +65,22 @@ Botkube Latest Blog Post ---------------- -User Quotes ------------ - -![Image 6: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) - -The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options - -![Image 7: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) - -The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options - -![Image 8: three blue circles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) - -![Image 9: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) - -For me, monitoring health and performance of the infrastructure in realtime was done with the help of Botkube. Botkube provided me security features such as unauthorized access attempts. - -![Image 10: three blue circles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) - -![Image 11: a pair of white speech bubbles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) +![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) For me, monitoring health and performance of the infrastructure in realtime was done with the help of Botkube. Botkube provided me security features such as unauthorized access attempts. -![Image 12: a pair of white speech bubbles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) +![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options -![Image 13: a pair of white speech bubbles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) +![Image 7](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) “Perfect! When i have the repo i will write here, thank you very much for the support! I really like this project!” Stay in the Loop ---------------- -![Image 14: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/636d3117b8612105c60e0bd9_botkube-front-right.svg) +![Image 8: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/636d3117b8612105c60e0bd9_botkube-front-right.svg) Join the Botkube Community in one of these channels diff --git a/hack/assistant-setup/content/botkube.io__about.md b/hack/assistant-setup/content/botkube.io__about.md index 7396be3f..ef4f8f59 100644 --- a/hack/assistant-setup/content/botkube.io__about.md +++ b/hack/assistant-setup/content/botkube.io__about.md @@ -6,7 +6,7 @@ Markdown Content: Designed to Connect the Cloud Native Landscape into your Chat Channel --------------------------------------------------------------------- -![Image 1: a blue bird flying over a mountain](https://assets-global.website-files.com/633705de6adaa38599d8e258/65b2a089afca9fd872a83d94_Main-Botkube-5.webp) +![Image 1](https://assets-global.website-files.com/633705de6adaa38599d8e258/65b2a089afca9fd872a83d94_Main-Botkube-5.webp) Started in 2019 Reimagined in 2022 ---------------------------------- @@ -25,7 +25,7 @@ In 2021, Botkube joined the ranks of other innovative Kubernetes tools like Test Now, Botkube stands poised to revolutionize the way we interact with Kubernetes, fueled by the passion of its creators and the unwavering support of its community. -![Image 2: three blue and purple characters with speech bubbles that say hello i'm botube](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a03662368d2582292298b1_bk_aboutus_ill.webp) +![Image 2](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a03662368d2582292298b1_bk_aboutus_ill.webp) Botkube is one of the three commercial products from Kubeshop, a first of its kind open source incubator and accelerator, focused on the challenges of Kubernetes and the cloud native ecosystem. @@ -36,15 +36,15 @@ Joining the [Kubeshop accelerator](https://kubeshop.io/) proved a boon for Botku Access to cutting-edge infrastructure and expertise facilitated rapid development, while close proximity to other top Kubernetes tools fostered cross-pollination of ideas and a vibrant collaborative spirit. The biggest draw, however, was the Kubeshop team's wealth of experience. -![Image 3: a man wearing glasses and a jacket](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a04ab9c691cc5bf77bca6b_ole-lensmar-2.webp) +![Image 3](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a04ab9c691cc5bf77bca6b_ole-lensmar-2.webp) Working alongside seasoned veterans like Ole Lensmar—the CTO, and mastermind behind SOAP UI—provided invaluable mentorship and guidance, propelling Botkube's growth. -![Image 4: a man with a beard wearing a black shirt](https://assets-global.website-files.com/633705de6adaa38599d8e258/634ee5c0455ce28d5f1d965c_blair-rampling.jpeg) +![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/634ee5c0455ce28d5f1d965c_blair-rampling.jpeg) Additionally, the accelerator enabled Botkube to bolster its own team with seasoned professionals like  the product lead, Blair Rampling. His enterprise expertise honed at Red Hat proved instrumental in shaping Botkube for the big leagues. -![Image 5: a blue bird with a blue square on its head](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a053449bd21c386e00da05_Bird-with-fire-Botkube-right%201.webp) +![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a053449bd21c386e00da05_Bird-with-fire-Botkube-right%201.webp) We believe ---------- @@ -66,13 +66,13 @@ Started with Slack, now we're here Upcoming Events --------------- -![Image 6: a white and black logo with a circle in the middle](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b651155fb498c472792_livestream-icon.svg) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b651155fb498c472792_livestream-icon.svg) Livestream ### 90DaysOfDevOps - 2024 Community Edition -![Image 7: an orange arrow pointing down in a circle](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) +![Image 7](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) Join Maria, Developer Advocate for Botkube, in an insightful workshop that leverages the power of Botkube for effortless multi-cluster management in Kubernetes. In this session, we will explore three key areas: @@ -82,13 +82,13 @@ Join Maria, Developer Advocate for Botkube, in an insightful workshop that lever 3\. Simplifying Collaborative Kubernetes Troubleshooting: Three Best Practices with the aid of Botkube -![Image 8: a white and black logo with a circle in the middle](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b0cb4328c0f07a53397_conference-icon.svg) +![Image 8](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b0cb4328c0f07a53397_conference-icon.svg) Conference ### Developer Week 2024 -![Image 9: an orange arrow pointing down in a circle](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) +![Image 9](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) San Francisco, CA USA @@ -96,13 +96,13 @@ Each year, 8,000+ developers, engineers, software architects, dev teams, manager Botkube DevRel, Maria Ashby, will present **_"Unlocking K8s Troubleshooting Best Practices with Botkube."_** See you there... -![Image 10: a white and black logo with a circle in the middle](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b651155fb498c472792_livestream-icon.svg) +![Image 10](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b651155fb498c472792_livestream-icon.svg) Livestream ### Office Hours: 5 Essential Kubernetes Monitoring and Troubleshooting Tasks to Automate -![Image 11: an orange arrow pointing down in a circle](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) +![Image 11](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) Join us for an office hours session where we'll explore five ways for DevOps teams to automate common Kubernetes tasks to save time each week.This session is useful and informative for those new to Kubernetes or those with years of K8s experience under their belt. We'll talk through: diff --git a/hack/assistant-setup/content/botkube.io__blog.md b/hack/assistant-setup/content/botkube.io__blog.md index bb83f727..6ba27094 100644 --- a/hack/assistant-setup/content/botkube.io__blog.md +++ b/hack/assistant-setup/content/botkube.io__blog.md @@ -3,101 +3,42 @@ Title: Blog URL Source: https://botkube.io/blog Markdown Content: -Blog posts ----------- - -< - -[1](https://botkube.io/blog?page=1)[2](https://botkube.io/blog?page=2)[3](https://botkube.io/blog?page=3)...[9](https://botkube.io/blog?page=9) - -[\>](https://botkube.io/blog?page=2) - -[![Image 1: botkube - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6620766f1b4d9e191b51bc9c_4_17%20Botkube%20BLOG%20Thumbnail(SRE%20AI%20assistant).png) - -Apr 18, 2024 - - read - -### Level Up Your SRE Workflow: Automating Manual Tasks with Botkube AI Assistant - -See how Botkube is optimizing SRE workflows with the new AI assistant - -](https://botkube.io/blog/level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant) - -[![Image 2: botkube - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/661eb9d9c3fe057b001d93b5_simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.png) - -Apr 4, 2024 - -5 mins - - read - -### Developer Self-Service Made Easy with Botkube AI Assistant - -Discover how Botkube AI's simplifies Kubernetes troubleshooting for devs with natural language interactions, and seamless integration for enhanced productivity. - -](https://botkube.io/blog/simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy) - -[![Image 3: botkube tutorial - screenshot 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70cf0a7f079f477b8a7c9_Botkube%20BLOG%20Thumbnail%20(2).png) +Botkube articles +---------------- -Mar 11, 2024 +Thank you! Your submission has been received! -5 mins +Oops! Something went wrong while submitting the form. - read - -### Explore the New Era of AIOps with Botkube's AI Assistant - -Discover how to revolutionize Kubernetes management with Botkube's AI Assistant! Simplify K8s operations, automate incident reporting, and more. - -](https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant) - -[![Image 4: botkube - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6f2c82818eaad200539d8_Botkube%20BLOG%20Thumbnail%20(8).png) - -Mar 6, 2024 - -5 mins - - read - -### 4 AI-Driven Strategies for Enhanced Kubernetes Troubleshooting Workflows - -Optimizing Kubernetes Management with Botkube's AI Insights - -](https://botkube.io/blog/ai-for-kubernetes-operations) - -[![Image 5: botkube announces a new game for android and ios](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ea15e683d48fe21ddd98c5_Blog_Thumbnail%20(4).png) - -Mar 6, 2024 - -5min - - read +Blog posts +---------- -### Real-Time Platform Engineer Advice with Botkube's AI Assistant +No results found. Please try to search with different keywords. -Imagine having K8s experts available, providing help to your team 24/7. Get real-time, data-driven insights about your Kubernetes clusters without ever leaving your chat window with AI Assistant. +Stay in the Loop +---------------- -](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) +![Image 1: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/636d3117b8612105c60e0bd9_botkube-front-right.svg) -[![Image 6: botkube tutorial - screenshot 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65c5156e73ce06b361c822f6_Botkube%20BLOG%20Thumbnail%20(10).png) +Join the Botkube Community in one of these channels -Feb 8, 2024 +Subscribe to our monthly newsletter to stay up to date with all-things Botkube. -5 mins +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) - read +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem -### Empowering Your Kubernetes Multi-Cluster Observability with Intelligent Monitoring +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -Discover how Botkube optimizes multi-cluster Kubernetes observability with automation, real time alerts and more.. +[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 6](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 7](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) -](https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring) +#### Get to Know Kubeshop -< +#### Botkube -[1](https://botkube.io/blog?page=1)[2](https://botkube.io/blog?page=2)[3](https://botkube.io/blog?page=3)...[9](https://botkube.io/blog?page=9) +Copyright © 2022 Kubeshop, LLC. All rights reserved. -[\>](https://botkube.io/blog?page=2) +Copyright © 2024 Kubeshop, LLC. All rights reserved. -No results found. Please try to search with different keywords. +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__blog__ai-for-kubernetes-operations.md b/hack/assistant-setup/content/botkube.io__blog__ai-for-kubernetes-operations.md index 9d67604d..9d57d712 100644 --- a/hack/assistant-setup/content/botkube.io__blog__ai-for-kubernetes-operations.md +++ b/hack/assistant-setup/content/botkube.io__blog__ai-for-kubernetes-operations.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/ai-for-kubernetes-operations Published Time: Mar 06, 2024 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,12 +17,12 @@ Optimizing Kubernetes Management with Botkube's AI Insights ### Table of Contents -* [Strategy 1: Automated Incident Reporting](#strategy-1-automated-incident-reporting) -* [Strategy 2: Optimize Resource Allocation](#strategy-2-optimize-resource-allocation) -* [Strategy 3: Enhance Cluster Diagnostics](#strategy-3-enhance-cluster-diagnostics-) -* [Strategy 4: Enable Proactive Anomaly Detection](#strategy-4-enable-proactive-anomaly-detection) -* [Bonus Strategy: Simplify Application Lifecycle Management](#bonus-strategy-simplify-application-lifecycle-management) -* [Getting Started with Botkube’s AI Assistant](#getting-started-with-botkube-s-ai-assistant) +* [Strategy 1: Automated Incident Reporting](#strategy-1-automated-incident-reporting-2) +* [Strategy 2: Optimize Resource Allocation](#strategy-2-optimize-resource-allocation-2) +* [Strategy 3: Enhance Cluster Diagnostics](#strategy-3-enhance-cluster-diagnostics--2) +* [Strategy 4: Enable Proactive Anomaly Detection](#strategy-4-enable-proactive-anomaly-detection-2) +* [Bonus Strategy: Simplify Application Lifecycle Management](#bonus-strategy-simplify-application-lifecycle-management-2) +* [Getting Started with Botkube’s AI Assistant](#getting-started-with-botkube-s-ai-assistant-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -37,7 +37,7 @@ In this guide we will explore how AI assistants transform Kubernetes management Strategy 1: Automated Incident Reporting ---------------------------------------- -![Image 2: a screenshot of a chat window on a computer screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) ‍ @@ -46,30 +46,30 @@ Managing Kubernetes can be a challenging task, especially when dealing with comp Strategy 2: Optimize Resource Allocation ---------------------------------------- -![Image 3: a screenshot of a message in a google chat](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef180190c3682238b922_9kalnKKcBw_q5sdluVLbLDy9ch5mY-RxHKxDa6edtIj5fIITzJz8lL3BRAaSMnldHACqcEHteUaFeKIN4RYkB-uGXRCISEMHlvM2crujb2yRfN2_QtNFXUISA3-YfABPLl5_t6LcMKwsO0a39lZXKl4.gif) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef180190c3682238b922_9kalnKKcBw_q5sdluVLbLDy9ch5mY-RxHKxDa6edtIj5fIITzJz8lL3BRAaSMnldHACqcEHteUaFeKIN4RYkB-uGXRCISEMHlvM2crujb2yRfN2_QtNFXUISA3-YfABPLl5_t6LcMKwsO0a39lZXKl4.gif) ‍ -Resource management is crucial for optimal performance and cost-efficiency in Kubernetes. Teams face difficulties in keeping pace with real-time requirements, which can lead to performance issues or unnecessary overspending on resources. Botkube’s AI assistant automates resource usage monitoring and analysis, providing recommendations for ideal distribution. It intelligently evaluates workload patterns, enabling dynamic CPU, memory, and storage adjustments, aligning with current demands without manual intervention. This predictive approach prevents performance bottlenecks and achieves cost savings, making Kubernetes resource allocation simpler and more effective. +Resource management is crucial for optimal performance and cost-efficiency in Kubernetes. Teams face difficulties in keeping pace with real-time requirements, which can lead to performance issues or unnecessary overspending on resources. Botkube’s AI assistant automates resource usage monitoring and analysis, providing recommendations for ideal distribution. It intelligently evaluates workload patterns, enabling dynamic  CPU, memory, and storage adjustments, aligning with current demands without manual intervention. This predictive approach prevents performance bottlenecks and achieves cost savings, making Kubernetes resource allocation simpler and more effective. -Strategy 3: Enhance Cluster Diagnostics ---------------------------------------- +Strategy 3:  Enhance Cluster Diagnostics +---------------------------------------- -![Image 4: a screenshot of a twitter page showing a message](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) -Troubleshooting in Kubernetes production environments presents a significant challenge, requiring not just an in-depth knowledge of Kubernetes itself but also the ability to quickly address and resolve issues to maintain system stability. AI-powered Kubernetes assistants streamline this process through detailed diagnostics and automated resolution guides or runbooks. These tools are invaluable for those tasked with Kubernetes management, streamlining the identification and rectification of cluster issues. Botkube automatically detects issues, offering clear explanations and steps for resolution, thus ensuring system reliability and efficiency. These tools save time and promote consistency in troubleshooting, adapting to your cluster's specific needs and best practices. +Troubleshooting in Kubernetes production environments presents a significant challenge, requiring not just an in-depth knowledge of Kubernetes itself but also the ability to quickly address and resolve issues to maintain system stability. AI-powered Kubernetes assistants streamline this process through detailed diagnostics and automated resolution guides or runbooks. These tools are invaluable for those tasked with Kubernetes management, streamlining the identification and rectification of cluster issues. Botkube automatically detects issues, offering clear explanations and steps for resolution, thus ensuring system reliability and efficiency. These tools  save time and promote consistency in troubleshooting, adapting to your cluster's specific needs and best practices. Strategy 4: Enable Proactive Anomaly Detection ---------------------------------------------- -![Image 5: a screenshot of a tweet from a twitter account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a037ee1160c06c47b0cc_LopU3vbDXwRSiyWbJgwCkZ2vsifEeikrsi9f16OWeJE83BBJGt2tqJn2O-2mq8nTvDlNejOFdH2LyHXcKccnsFcyjeDoccaBZSLLuxm3HZtsE3-TBmPgOEkLEjSr9_K5DcIvpZkd1KVFyN4uly3aImU.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a037ee1160c06c47b0cc_LopU3vbDXwRSiyWbJgwCkZ2vsifEeikrsi9f16OWeJE83BBJGt2tqJn2O-2mq8nTvDlNejOFdH2LyHXcKccnsFcyjeDoccaBZSLLuxm3HZtsE3-TBmPgOEkLEjSr9_K5DcIvpZkd1KVFyN4uly3aImU.png) In Kubernetes environments, catching and fixing issues early is key to avoiding big problems. A system that monitors in real-time helps keep things running smoothly. Kubernetes AI assistants, such as Botkube, are great at spotting problems early with their real-time monitoring, heading off issues before they impact performance. Botkube doesn't just spot problems; it also runs diagnostic commands (like kubectl get, describe, logs) to quickly give you a clearer picture of what's going wrong. It even suggests fixes tailored to your setup, boosting its ability to self-repair. Over time, Botkube gets better at predicting and fixing issues, thanks to its continuous learning. You can also customize it to take certain actions automatically, making sure it fits your operational needs. By handling anomaly detection and resolution on its own, Botkube lessens the need for manual checks, making managing Kubernetes simpler and ensuring systems run reliably. Bonus Strategy: Simplify Application Lifecycle Management --------------------------------------------------------- -![Image 6: a screen shot of a screen showing a screen showing a screen showing a screen showing a screen showing a screen showing](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6946be4cd9b0c47a55f75_flux-interactivity-1.gif) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6946be4cd9b0c47a55f75_flux-interactivity-1.gif) The application lifecycle in Kubernetes is a challenging process from development to deployment. This process demands constant vigilance over application performance, resource constraints, and deployment health. Botkube aids in automating deployment strategies, scaling, and updates, responding to real-time system needs. It analyzes performance metrics and user feedback to determine effective deployment strategies, offering a safety net for rollbacks based on historical data. @@ -78,4 +78,4 @@ Botkube eases the management of application secrets and configurations, automati Getting Started with Botkube’s AI Assistant ------------------------------------------- -[Starting with our AI Assistant is simple and intuitive.](https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant) It's included in every Botkube Cloud instance, ensuring a smooth integration for users updating to the latest version. New users can easily begin with Botkube, quickly enjoying AI-enhanced Kubernetes management.\*\* [Start with Botkube here](http://app.botkube.io/). For those using the open-source version, [follow our migration guide](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to swiftly upgrade to Botkube Cloud and access all new features. Dive into the Botkube AI Assistant for a superior Kubernetes management experience. Sign up now to integrate real-time, AI-powered support into your cluster management, improving efficiency and reliability. With the Botkube AI Assistant, you gain a 24/7 platform engineer at your service. +[Starting with our AI Assistant is simple and intuitive.](https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant) It's included in every Botkube Cloud instance, ensuring a smooth integration for users updating to the latest version. New users can easily begin with Botkube, quickly enjoying AI-enhanced Kubernetes management.\*\* \[Start with Botkube here\](http://app.botkube.io). For those using the open-source version, \[follow our migration guide\](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to swiftly upgrade to Botkube Cloud and access all new features. Dive into the Botkube AI Assistant for a superior Kubernetes management experience. Sign up now to integrate real-time, AI-powered support into your cluster management, improving efficiency and reliability. With the Botkube AI Assistant, you gain a 24/7 platform engineer at your service. diff --git a/hack/assistant-setup/content/botkube.io__blog__argo-cd-botkube-integration.md b/hack/assistant-setup/content/botkube.io__blog__argo-cd-botkube-integration.md index 4f2907a1..d29da8f1 100644 --- a/hack/assistant-setup/content/botkube.io__blog__argo-cd-botkube-integration.md +++ b/hack/assistant-setup/content/botkube.io__blog__argo-cd-botkube-integration.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/argo-cd-botkube-integration Published Time: Sep 22, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,11 +17,11 @@ Argo CD now integrates with Botkube, allowing users to receive and interact with ### Table of Contents -* [What is Argo CD?](#what-is-argo-cd-) -* [Why was a Botkube & Argo Connection Necessary?](#why-was-a-botkube-argo-connection-necessary-) -* [What is Botkube?](#what-is-botkube-) -* [Using Argo CD with Botkube](#using-argo-cd-with-botkube) -* [Get Started with Botkube’s new Argo CD Plugin](#get-started-with-botkube-s-new-argo-cd-plugin) +* [What is Argo CD?](#what-is-argo-cd--2) +* [Why was a Botkube & Argo Connection Necessary?](#why-was-a-botkube-argo-connection-necessary--2) +* [What is Botkube?](#what-is-botkube--2) +* [Using Argo CD with Botkube](#using-argo-cd-with-botkube-2) +* [Get Started with Botkube’s new Argo CD Plugin](#get-started-with-botkube-s-new-argo-cd-plugin-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -29,49 +29,45 @@ Argo CD now integrates with Botkube, allowing users to receive and interact with Are you dealing with the complexities of scaling operations and collaborative workflows using GitOps tools like ArgoCD? As your organization expands, staying on top of repository and configuration changes, as well as managing pull requests and issues, can become increasingly difficult. -‍ Today, we are happy to announce the new [Botkube Argo CD integration](https://docs.botkube.io/configuration/source/argocd/)! This integration enables you and your team to leverage automation to scale and optimize your Argo CD troubleshooting workflow. +‍ +Today, we are happy to announce the new \[Botkube Argo CD integration\](https://docs.botkube.io/configuration/source/argocd/)! This integration enables you and your team to leverage automation to scale and optimize your Argo CD troubleshooting workflow. -What is Argo CD? ----------------- +\## What is Argo CD? -![Image 2: a screen shot of a computer screen showing a number of different devices](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09b69191288d41cf2161_rih56gy96kbqx4UzlDDmVadKW9ieXnfmbXLOwzJiDWgHBDzmW0vG867PZM74YdzH5YkNHY-9F2xaVfJTam8eFpvSgzoB4EX-FxDPzLzqMvKJmSNtSBwIRifp2EctcHW3oeh_ruepqkKpwhfFyDzS5Kc.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09b69191288d41cf2161_rih56gy96kbqx4UzlDDmVadKW9ieXnfmbXLOwzJiDWgHBDzmW0vG867PZM74YdzH5YkNHY-9F2xaVfJTam8eFpvSgzoB4EX-FxDPzLzqMvKJmSNtSBwIRifp2EctcHW3oeh_ruepqkKpwhfFyDzS5Kc.gif) ‍ -[Argo CD](https://botkube.io/integration/argo-cd-botkube-kubernetes-integration) is a Kubernetes controller that oversees the status of all active applications. It can pull updated code from Git repositories and deploy it directly to Kubernetes resources. It enables developers to manage both infrastructure configuration and application updates in one system. +\[Argo CD\](https://botkube.io/integration/argo-cd-botkube-kubernetes-integration) is a Kubernetes controller that oversees the status of all active applications. It can pull updated code from Git repositories and deploy it directly to Kubernetes resources. It enables developers to manage both infrastructure configuration and application updates in one system. -Why was a Botkube & Argo Connection Necessary? ----------------------------------------------- +\## Why was a Botkube & Argo Connection Necessary? With the new Botkube ArgoCD plugin, users can significantly enhance their Argo CD notifications experience. This plugin offers a streamlined approach to managing platform secrets and notifications, eliminating the need for project-specific configurations, whether it's Kubernetes, Prometheus, Argo, or others. Enabling Argo notifications becomes more straightforward, providing users with an efficient and centralized solution. Furthermore, the plugin enhances visibility into the Argo deployment process by consolidating GitHub and Argo events and delivering them directly to the user's configured communication platform, ensuring a more informed and responsive workflow. -What is Botkube? ----------------- +\## What is Botkube? -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred collaboration platforms like [Slack, Microsoft Teams, Discord, and Mattermost.](https://botkube.io/integrations) This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred collaboration platforms like \[Slack, Microsoft Teams, Discord, and Mattermost.\](https://botkube.io/integrations) This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. -Using Argo CD with Botkube --------------------------- +\## Using Argo CD with Botkube -![Image 3: a screenshot of a screen showing the status of an application](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09c855b42178c42a1d9b_jOhrHB90gwPhqwSU94v3y1Q7Q2Y_1Ltfap5j-mY6XbgieOkVITkVOoOboVTaVHT55onYtmncvcVt_zMrOQehiIOKbM2unJi5NKvWpXhjN222CbEB31JP_oSxT9QowgHWFcKv0YoK2FvZZvJMwGpET4s.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09c855b42178c42a1d9b_jOhrHB90gwPhqwSU94v3y1Q7Q2Y_1Ltfap5j-mY6XbgieOkVITkVOoOboVTaVHT55onYtmncvcVt_zMrOQehiIOKbM2unJi5NKvWpXhjN222CbEB31JP_oSxT9QowgHWFcKv0YoK2FvZZvJMwGpET4s.png) ‍ -The new [Botkube ArgoCD](https://docs.botkube.io/configuration/source/argocd/) plugin offers a compelling use case for users seeking seamless integration between Argo CD and their preferred communication platforms. With this plugin, users can effortlessly receive real-time notifications from their Argo CD deployments directly in their communication channels. This feature proves invaluable for teams relying on Argo CD for managing Kubernetes workflows within GitHub. Botkube's ArgoCD plugin harnesses Argo CD's native notification system, expanding its functionality by provinteractive notifications for popular cloud-based services like Slack, as well as support for platforms like Discord, which are not covered by Argo CD's default notifications. +The new \[Botkube ArgoCD\](https://docs.botkube.io/configuration/source/argocd/) plugin offers a compelling use case for users seeking seamless integration between Argo CD and their preferred communication platforms. With this plugin, users can effortlessly receive real-time notifications from their Argo CD deployments directly in their communication channels. This feature proves invaluable for teams relying on Argo CD for managing Kubernetes workflows within GitHub. Botkube's ArgoCD plugin harnesses Argo CD's native notification system, expanding its functionality by provinteractive notifications for popular cloud-based services like Slack, as well as support for platforms like Discord, which are not covered by Argo CD's default notifications. One of the standout benefits of this plugin is its automation of the entire notification system setup, simplifying a traditionally complex process. By configuring the plugin in Botkube, users can save time and effort previously required to define webhooks, triggers, templates, and annotations within Argo CD. Additionally, the plugin enhances notifications, allowing users to run commands and access application details conveniently in a slack channel, ultimately aiding in debugging and troubleshooting. Overall, the Botkube ArgoCD plugin enhances the user experience by bridging the gap between Argo CD and their communication platforms, offering a streamlined, efficient, and interactive approach to managing Kubernetes deployments. -Get Started with Botkube’s new Argo CD Plugin ---------------------------------------------- +\## Get Started with Botkube’s new Argo CD Plugin -Ready to try it out on your own? The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/source/argocd). Check our [tutorial](https://botkube.io/blog/getting-started-with-botkube-and-argocd) for step by step instruction on how to get started. +Ready to try it out on your own? The easiest way to configure it is through the \[Botkube web app \](https://app.botkube.io/)if your cluster is connected. Otherwise you can enable it in your \[Botkube YAML configuration\](https://docs.botkube.io/configuration/source/argocd). Check our [tutorial](https://botkube.io/blog/getting-started-with-botkube-and-argocd) for step by step instruction on how to get started. -Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use [the Argo plugin](https://docs.botkube.io/usage/source/argocd) in the documentation. +Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use \[the Argo plugin \](https://docs.botkube.io/usage/source/argocd)in the documentation. -We’d love to hear how you are using the new Argo CD plugin! Share your experiences with us in the Botkube [Slack community](https://join.botkube.io/) or [email our Developer Advocate, Maria](mailto:maria@kubeshop.io) and we’ll send you some Botkube swag. +We’d love to hear how you are using the new Argo CD plugin! Share your experiences with us in the Botkube \[Slack community\](https://join.botkube.io/) or \[email our Developer Advocate, Maria\](mailto:maria@kubeshop.io) and we’ll send you some Botkube swag. ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools.md b/hack/assistant-setup/content/botkube.io__blog__beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools.md index 2b50bf38..10cc5994 100644 --- a/hack/assistant-setup/content/botkube.io__blog__beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools.md +++ b/hack/assistant-setup/content/botkube.io__blog__beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/beginners-guide-to-botkube-plugin-developmen Published Time: Mar 30, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,46 +17,49 @@ This introduction will teach you how Botkube plug-ins can unify your cloud nativ ### Table of Contents -* [Why make a Botkube Plug-in: The Power of CNCF Tools Together](#why-make-a-botkube-plug-in-the-power-of-cncf-tools-together-) -* [How Botkube Plug-Ins Work:](#how-botkube-plug-ins-work-) -* [Conclusion](#conclusion-) +* [Why make a Botkube Plug-in: The Power of CNCF Tools Together](#why-make-a-botkube-plug-in-the-power-of-cncf-tools-together--2) +* [How Botkube Plug-Ins Work:](#how-botkube-plug-ins-work--2) +* [Conclusion](#conclusion--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -So you want to make a [Botkube Plug-in](https://botkube.io/integrations), but don't know where to begin? Fear not, because this series has got you covered! In short, Botkube plugins are tools that enhance the Botkube user experience to make it more suited to fit their goals. They provide users with extra features and options to customize their experience. However, to fully utilize Botkube, it is necessary to configure it according to your specific needs. Starting from scratch with only documentation to guide you can be intimidating, which is why I am writing this series to help jumpstart your plug-in development journey regardless of your experience level. With this series, you’ll have everything you need to build your own Botkube Plug-in. +So you want to make a \[Botkube Plug-in\](https://botkube.io/integrations), but don't know where to begin? Fear not, because this series has got you covered! In short, Botkube plugins are tools that enhance the Botkube user experience to make it more suited to fit their goals. They provide users with extra features and options to customize their experience.  However, to fully utilize Botkube, it is necessary to configure it according to your specific needs. Starting from scratch with only documentation to guide you can be intimidating, which is why I am writing this series to help jumpstart your plug-in development journey regardless of your experience level. With this series, you’ll have everything you need to build your own Botkube Plug-in. -![Image 2: a diagram showing the different parts of an app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259de0f04e131b26b323ab_YDm2BILjPQoWfmfEClCKc4da4Acv3ASayZTaEEEdd27wxMLEb-eWsECh1qpEKoqabyu43YFgDmSULoDFTIwBMCF7ndEFnTzG0bLBSjA1xFx0v_cBNjx8zBD1owLk8IfqA8nK2IiIJ_qtrJcU3dGb-s8.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259de0f04e131b26b323ab_YDm2BILjPQoWfmfEClCKc4da4Acv3ASayZTaEEEdd27wxMLEb-eWsECh1qpEKoqabyu43YFgDmSULoDFTIwBMCF7ndEFnTzG0bLBSjA1xFx0v_cBNjx8zBD1owLk8IfqA8nK2IiIJ_qtrJcU3dGb-s8.png) But first things first, let's talk about why plug-ins are so important. -**Why make a Botkube Plug-in: The Power of CNCF Tools Together** ----------------------------------------------------------------- +**Why make a Botkube Plug-in: The Power of CNCF Tools Together** -As a DevOps or platform engineer, your role is to ensure that your team has access to a suite of tools that enable efficient and quality deployments. However, with over 1,178 open-source tools available in the [CNCF Landscape](https://landscape.cncf.io/?organization=kubeshop&selected=botkube) across multiple categories, choosing which tools to use and integrating them into your organization's workflow can be overwhelming. +------------------------------------------------------------------- -![Image 3: a screenshot of the bottube logo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259def371cfe07bc0f2b8e_s7cvlLKT1mIpSir81gNynMEUtfKsi34yzhstUPE8tTuzP8sRizuzesbF3elxcr1ynfIKa_fWLqAsX2a0jT9Z52xisGCDxGUlKZACDTlJkmQ7lKOttNSomQgDDiYKJ0yt_mZF2KhHRlSbygHiNiod_3g.png) +As a DevOps or platform engineer, your role is to ensure that your team has access to a suite of tools that enable efficient and quality deployments. However, with over 1,178 open-source tools available in the \[CNCF Landscape\](https://landscape.cncf.io/?organization=kubeshop&selected=botkube) across multiple categories, choosing which tools to use and integrating them into your organization's workflow can be overwhelming. + +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259def371cfe07bc0f2b8e_s7cvlLKT1mIpSir81gNynMEUtfKsi34yzhstUPE8tTuzP8sRizuzesbF3elxcr1ynfIKa_fWLqAsX2a0jT9Z52xisGCDxGUlKZACDTlJkmQ7lKOttNSomQgDDiYKJ0yt_mZF2KhHRlSbygHiNiod_3g.png) Choosing independent tools that work well together and unifying them to work alongside other collaborative conversation tools can be a daunting task. Furthermore, the lack of established or certified routes for Kubernetes deployment, monitoring, and management can lead to a situation where your tools don't communicate well with each other, which is a significant problem. -Fortunately, [Botkube](https://botkube.io/) and its plugin system provide an effective solution to this problem. +Fortunately, \[Botkube\](https://botkube.io/) and its plugin system provide an effective solution to this problem. -Botkube makes it easy to unify all the cloud-native tools into a single platform. As a developer or operations team member, you know that automation is the key to simplifying your workflow and increasing productivity. If you're using Botkube for monitoring and troubleshooting Kubernetes clusters, you're already ahead of the game. But with the [introduction of a plugin system](https://botkube.io/blog/botkube-v017-release-notes) in Botkube v0.17.0, you can take Botkube to the next level with your own custom plugins. +Botkube makes it easy to unify all the cloud-native tools into a single platform. As a developer or operations team member, you know that automation is the key to simplifying your workflow and increasing productivity. If you're using Botkube for monitoring and troubleshooting Kubernetes clusters, you're already ahead of the game. But with the \[introduction of a plugin system\](https://botkube.io/blog/botkube-v017-release-notes) in Botkube v0.17.0, you can take Botkube to the next level with your own custom plugins. The plugin system allows anyone to write new plugins for sources and executors, which can be published for other Botkube users to install and use. This means that you can extend the functionality of Botkube to fit your specific needs, making it an even more valuable tool in your toolkit. -**How Botkube Plug-Ins Work:** ------------------------------- +**How Botkube Plug-Ins Work:** + +--------------------------------- -![Image 4: a diagram of a basic azure stack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259e0b4fdb15ca2aa6e839_iKasmcohH7JW9C8d9Y10Y6AM8n1uSpA-HtyxcqE6jxI9XBN53Nott737B5XTDLMGB1nXUnkGPN-fHeNbq4RIbsuy6Kko3LdT9hrdf-YpXukG2kVCCgbSDNvPltY4coW4PmCmXIdeyO0luWUNcDxVk0I.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259e0b4fdb15ca2aa6e839_iKasmcohH7JW9C8d9Y10Y6AM8n1uSpA-HtyxcqE6jxI9XBN53Nott737B5XTDLMGB1nXUnkGPN-fHeNbq4RIbsuy6Kko3LdT9hrdf-YpXukG2kVCCgbSDNvPltY4coW4PmCmXIdeyO0luWUNcDxVk0I.png) -Botkube's architecture is designed to make it easy for developers and operations teams to interact with APIs and other tools through sources and executors. Think of __sources as the ears of Botkube__ - they listen for events or notifications from any tool that can send them. This means that you can easily integrate any tool that can send events, like [Prometheus](https://botkube.io/integration/prometheus) into Botkube, and have those events sent to communication channels based on the source bindings that you've configured. +Botkube's architecture is designed to make it easy for developers and operations teams to interact with APIs and other tools through sources and executors. Think of _\*sources as the ears of Botkube\*_ - they listen for events or notifications from any tool that can send them. This means that you can easily integrate any tool that can send events, like \[Prometheus\](https://botkube.io/integration/prometheus)  into Botkube, and have those events sent to communication channels based on the source bindings that you've configured. -Alternatively, __executors are like the hands of Botkube__ - they're used to run commands from other tools within a chat channel. This means that you can execute commands from your favorite tools, like kubectl or Helm, directly within your chat channel and have the output of those commands returned to the same channel for easy visibility. +Alternatively, _\*executors are like the hands of Botkube\*_ - they're used to run commands from other tools within a chat channel. This means that you can execute commands from your favorite tools, like kubectl or Helm, directly within your chat channel and have the output of those commands returned to the same channel for easy visibility. Botkube already comes with a native source for Kubernetes events, which has been part of Botkube since the beginning. But with the release of the new plugin system, you can now add additional sources and executors to Botkube, including helm and Prometheus plugins that we already support. -**Conclusion** --------------- +**Conclusion** + +----------------- Now that you understand the importance of Botkube's plugin system and how it works, it's time to start building your own Botkube plugin. In the next blog post, we'll walk through a step-by-step guide on how to build a Botkube plugin from scratch, using a simple example. diff --git a/hack/assistant-setup/content/botkube.io__blog__best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments.md b/hack/assistant-setup/content/botkube.io__blog__best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments.md index 311311a2..0ff4b090 100644 --- a/hack/assistant-setup/content/botkube.io__blog__best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments.md +++ b/hack/assistant-setup/content/botkube.io__blog__best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/best-practices-for-kubernetes-troubleshootin Published Time: Jul 20, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,28 +17,26 @@ As K8s becomes the solution for container orchestration and remote work environm ### Table of Contents -* [Introduction to Troubleshooting Kubernetes](#introduction-to-troubleshooting-kubernetes) -* [What is Kubernetes Troubleshooting?](#what-is-kubernetes-troubleshooting-) -* [How does Kubernetes troubleshooting work?](#how-does-kubernetes-troubleshooting-work-) -* [What makes troubleshooting multiple Kubernetes clusters so difficult?](#what-makes-troubleshooting-multiple-kubernetes-clusters-so-difficult-) -* [Best Practices for Kubernetes Multi-cluster Troubleshooting](#best-practices-for-kubernetes-multi-cluster-troubleshooting) -* [Some Common Kubernetes Errors](#some-common-kubernetes-errors) -* [Conclusion](#conclusion) -* [CNCF Islamabad and Botkube Webinar](#cncf-islamabad-and-botkube-webinar) +* [Introduction to Troubleshooting Kubernetes](#introduction-to-troubleshooting-kubernetes-2) +* [What is Kubernetes Troubleshooting?](#what-is-kubernetes-troubleshooting--2) +* [How does Kubernetes troubleshooting work?](#how-does-kubernetes-troubleshooting-work--2) +* [What makes troubleshooting multiple Kubernetes clusters so difficult?](#what-makes-troubleshooting-multiple-kubernetes-clusters-so-difficult--2) +* [Best Practices for Kubernetes Multi-cluster Troubleshooting](#best-practices-for-kubernetes-multi-cluster-troubleshooting-2) +* [Some Common Kubernetes Errors](#some-common-kubernetes-errors-2) +* [Conclusion](#conclusion-2) +* [CNCF Islamabad and Botkube Webinar](#cncf-islamabad-and-botkube-webinar-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! #### Get started with Botkube Cloud -Introduction to Troubleshooting Kubernetes ------------------------------------------- +\## Introduction to Troubleshooting Kubernetes Managing and troubleshooting multiple Kubernetes clusters comes with many challenges like complexity and coordination. However, there is a strategic approach to Kubernetes troubleshooting across multiple clusters. In this blog, we will explore some best practices that can enhance the efficiency and effectiveness of your Kubernetes troubleshooting efforts. I will delve into the benefits of centralizing monitoring, utilizing multi-cluster management features, streamlining command execution, and promoting effective incident response and collaboration. By addressing these challenges and leveraging the right tools, development and operations teams can unlock the full potential of Kubernetes in the cloud-native world. -What is Kubernetes Troubleshooting? ------------------------------------ +\## What is Kubernetes Troubleshooting? ![Image 2: learn k8s help article on the process for troubleshooting Kubernetes related issues](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b968a920dcc2ab5ff83fb7_4QTYY_4jwo5E0DeGgXARbgT_xYK4VyNKjg9OGcMmAMJPlaJFDcozwToB_GSkt5bM3rS5IIAFKBwiGFaLzuOrQMqHQoKHoDisEHGJRyZpMjS7yNHRciYG5KN9omOGrR6_AxCx1hKY5ksNqNLg81P24l8.png) @@ -48,13 +46,11 @@ A diagram of the K8s troubleshooting process from [LearnK8s](https://learnk8s.io Kubernetes troubleshooting is the process of identifying and resolving issues that arise within a Kubernetes cluster. It involves diagnosing and resolving problems related to application deployment, networking, resource allocation, configuration errors, and other factors that can impact the stability and performance of a Kubernetes environment. Troubleshooting in Kubernetes is a complex process that often requires a combination of monitoring tools, log analysis, and a knowledge of the Kubernetes architecture. -How does Kubernetes troubleshooting work? ------------------------------------------ +\## How does Kubernetes troubleshooting work? -Kubernetes troubleshooting involves analyzing logs, examining cluster events, optimizing resource utilization, and ensuring network connectivity. Essential commands like `kubectl logs`, `kubectl describe`, and `kubectl exec` are valuable tools for uncovering and resolving problems within the cluster. By analyzing logs and events, Kubernetes Administrators can gain insights into their app behavior. Network connectivity is verified to maintain communication between pods and services. These techniques and commands aid in efficiently diagnosing and resolving issues, ensuring a smooth and efficient Kubernetes environment. +Kubernetes troubleshooting involves analyzing logs, examining cluster events, optimizing resource utilization, and ensuring network connectivity. Essential commands like \`kubectl logs\`, \`kubectl describe\`, and \`kubectl exec\` are valuable tools for uncovering and resolving problems within the cluster. By analyzing logs and events, Kubernetes Administrators can gain insights into their app behavior. Network connectivity is verified to maintain communication between pods and services. These techniques and commands aid in efficiently diagnosing and resolving issues, ensuring a smooth and efficient Kubernetes environment. -What makes troubleshooting multiple Kubernetes clusters so difficult? ---------------------------------------------------------------------- +\## What makes troubleshooting multiple Kubernetes clusters so difficult? Even in a small local Kubernetes cluster, unraveling the root causes of issues can be challenging, with problems hiding in individual containers, pods, controllers, or even components of the control plane. But when it comes to large-scale production environments, these challenges are amplified. Visibility diminishes, and the complexity increases. Engineering teams often find themselves juggling multiple tools to gather the necessary data for diagnosis, and additional tools may be required to address and resolve detected issues. Complicating matters further, Kubernetes is frequently employed in building microservices applications, involving separate development teams for each microservice or collaboration between DevOps and application development teams within the same cluster. @@ -62,10 +58,9 @@ The complexity of Kubernetes troubleshooting is further compounded by the ambigu Fortunately, there is a solution to streamline this challenging endeavor: Botkube, a collaborative tool built specifically for Kubernetes users. With Botkube, you can receive and respond to alerts effortlessly within your preferred messaging and collaboration platforms, such as Slack, Microsoft Teams, Mattermost and more. This integration eliminates the need to switch between multiple platforms, granting you immediate visibility and control over your cluster resources. -Best Practices for Kubernetes Multi-cluster Troubleshooting ------------------------------------------------------------ +\## Best Practices for Kubernetes Multi-cluster Troubleshooting -### Centralize Monitoring and Observability +\### Centralize Monitoring and Observability Efficient troubleshooting across multiple Kubernetes clusters begins with the crucial step of consolidating monitoring and observability information in one centralized location. By doing so, you gain a bird's eye view of your entire infrastructure as data from all clusters is brought together. This comprehensive perspective enables quicker issue identification and streamlined troubleshooting, regardless of the specific cluster involved. Having all the essential information in one place empowers your team to tackle problems more efficiently, saving valuable time and ensuring a smooth troubleshooting process. @@ -75,7 +70,7 @@ Efficient troubleshooting across multiple Kubernetes clusters begins with the cr Botkube’s high level view of all of your clusters allows you to pinpoint exactly which cluster(s) are in need of help. -### Incident Response and Collaboration +\### Incident Response and Collaboration Effective incident response and collaboration are critical in multi-cluster environments. Implement solutions that facilitate real-time notifications and seamless communication among team members. By integrating incident response tools with popular collaboration platforms like Slack, Microsoft Teams, and Discord, teams can effectively resolve incidents and improve coordination, reducing downtime and enhancing overall productivity. As an example, Botkube integrates natively with Slack, Microsoft Teams, Mattermost, and Discord – all communication platforms that teams use daily to talk to each other. @@ -83,34 +78,31 @@ By leveraging incident response and collaboration tools that integrate with fami ![Image 4: AI Kubernetes assistant helps find errors with cluster management or deployment for quick K8s troubleshooting](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) -### Establish a Feedback Loop +\### Establish a Feedback Loop To ensure continuous improvement in troubleshooting Kubernetes-based applications across multiple clusters, it is essential to establish a feedback loop. This feedback loop involves gathering comprehensive data about the application's behavior through tools like observability, performance monitoring, tracing, and logging. By providing developers with access to relevant data, they can gain insights into the application's performance and identify potential issues more effectively. This feedback loop enables prompt issue resolution, allowing for continuous enhancements and optimizations. -### Streamline Command Execution +\### Streamline Command Execution Efficiency is key when troubleshooting Kubernetes across multiple clusters. Streamline command execution by leveraging tools that enable you to execute commands simultaneously across all connected clusters. This eliminates the need to perform actions individually on each cluster, saving time and effort. -### Automate Observability and Delivery Processes +\### Automate Observability and Delivery Processes Automation plays a crucial role in streamlining troubleshooting processes and ensuring the reliability of Kubernetes clusters. By automating the collection, aggregation, and correlation of observability data, such as metrics, logs, events, and traces, teams can significantly reduce the time and effort required for monitoring and managing services. Automated observability processes enable quick identification of anomalies or performance deviations, allowing for proactive troubleshooting and resolution. ![Image 5: Scrolling through kubectl logs in slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b9697c82dc01bf31f863b1_automation.gif) -Some Common Kubernetes Errors ------------------------------ +\## Some Common Kubernetes Errors -* [CreateContainerConfigError](https://botkube.io/learn/createcontainererror) -* [CrashLoopBackOff](https://botkube.io/learn/how-to-debug-crashloopbackoff) -* [OOMKilled](https://botkube.io/learn/what-is-oomkilled) +\* \[CreateContainerConfigError\](https://botkube.io/learn/createcontainererror) +\* \[CrashLoopBackOff\](https://botkube.io/learn/how-to-debug-crashloopbackoff) +\* \[OOMKilled\](https://botkube.io/learn/what-is-oomkilled) -Conclusion ----------- +\## Conclusion Troubleshooting Kubernetes-based applications across multiple clusters requires a strategic approach. By centralizing monitoring, utilizing multi-cluster management features, streamlining command execution, and promoting effective incident response and collaboration, teams can streamline troubleshooting processes in multi-cluster environments. Integrating tools and solutions like Botkube can significantly enhance efficiency and ensure reliable performance across all Kubernetes clusters. -CNCF Islamabad and Botkube Webinar ----------------------------------- +\## CNCF Islamabad and Botkube Webinar In conclusion, effective Kubernetes troubleshooting is paramount for maintaining the stability and performance of multiple clusters. If you are looking for a deep dive on this topic, I encourage you to watch the CNCF Islamabad webinar I did in August 2023. I presented more on this topic with a demo of Botkube and answered Kubernetes troubleshooting questions. diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-1-6-release.md b/hack/assistant-setup/content/botkube.io__blog__botkube-1-6-release.md index 6d531914..9f028303 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-1-6-release.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-1-6-release.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-1-6-release Published Time: Nov 27, 2023 Markdown Content: -![Image 1: a woman with short hair smiling for the camera](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) Kelly Revenaugh diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-5-essential-devopstasks-to-automate.md b/hack/assistant-setup/content/botkube.io__blog__botkube-5-essential-devopstasks-to-automate.md index a472ad3b..a15f1c9b 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-5-essential-devopstasks-to-automate.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-5-essential-devopstasks-to-automate.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate Published Time: Jan 16, 2024 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -35,7 +35,7 @@ In this blog post, we will explore how Botkube improves Kubernetes management. W Task 1: Monitoring and Alerting Kubernetes Clusters --------------------------------------------------- -![Image 2: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) [Monitoring](https://botkube.io/learn/how-botkube-makes-monitoring-kubernetes-easy) is the foundation of Kubernetes management. In a Kubernetes environment, real-time insights into resource utilization, application behavior, and system health are crucial. @@ -51,7 +51,7 @@ Botkube simplifies this process significantly. It allows you to bypass these ste ‍ -![Image 3: a screenshot of the settings page in a google chrome browser](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef19dff9832e1e6921af_qoSGg0E14xJDRtOKrTN04Yhis2esc8cZSyYbg7BJR2-DBeeLcV5Ppkj3BtgQ83MDpA0EQEzMni_x4nqyaRpq7eNrKCQtO0JFO1_mQFsqV9i8vMfVfvBN891-Y3ulmFm2K-SYzt7wg4w-oYK7YqGG-x8.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef19dff9832e1e6921af_qoSGg0E14xJDRtOKrTN04Yhis2esc8cZSyYbg7BJR2-DBeeLcV5Ppkj3BtgQ83MDpA0EQEzMni_x4nqyaRpq7eNrKCQtO0JFO1_mQFsqV9i8vMfVfvBN891-Y3ulmFm2K-SYzt7wg4w-oYK7YqGG-x8.png) ‍ @@ -62,7 +62,7 @@ Task 2: Resource Scaling Resource scaling in Kubernetes can be a challenging endeavor, especially in response to fluctuating workloads. Manually adjusting resources can be time-consuming and error-prone, leading to inefficiencies. Botkube offers a valuable solution for automating resource scaling within a team. It simplifies access to Kubernetes clusters by providing actionable notifications and the ability to execute kubectl, helm, and GitOps commands directly from a shared team channel. -![Image 4: a screenshot of a message in a google chat](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef180190c3682238b922_9kalnKKcBw_q5sdluVLbLDy9ch5mY-RxHKxDa6edtIj5fIITzJz8lL3BRAaSMnldHACqcEHteUaFeKIN4RYkB-uGXRCISEMHlvM2crujb2yRfN2_QtNFXUISA3-YfABPLl5_t6LcMKwsO0a39lZXKl4.gif) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef180190c3682238b922_9kalnKKcBw_q5sdluVLbLDy9ch5mY-RxHKxDa6edtIj5fIITzJz8lL3BRAaSMnldHACqcEHteUaFeKIN4RYkB-uGXRCISEMHlvM2crujb2yRfN2_QtNFXUISA3-YfABPLl5_t6LcMKwsO0a39lZXKl4.gif) ‍ @@ -71,7 +71,7 @@ One example of this is the ability to [automate the process of creating GitHub i Task 3: Kubernetes Log Management --------------------------------- -![Image 5: a screenshot of the settings for a twitch channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef18dc6fd8090139fc6b_ltpBkuCO8q4U1VzRan20ITCkj1pTWlbAT2BUN4o_sYYHZX7WViTLuhpvPI4LNAoE16dzT8UrUqiTzQQ1D4OnCM9eMV4Vip8dzv9zFVL0SHZRm_GAg0SmmKKZvJxIqFZBkoPMZr6HV7Q1OgpIu9AO8XI.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef18dc6fd8090139fc6b_ltpBkuCO8q4U1VzRan20ITCkj1pTWlbAT2BUN4o_sYYHZX7WViTLuhpvPI4LNAoE16dzT8UrUqiTzQQ1D4OnCM9eMV4Vip8dzv9zFVL0SHZRm_GAg0SmmKKZvJxIqFZBkoPMZr6HV7Q1OgpIu9AO8XI.png) ‍ @@ -83,11 +83,11 @@ This scenario illustrates Botkube's log management functionality: when a respons 1. Start by listing the pods using the command @Botkube kubectl get pods -n kube-systemget\_pods -![Image 6: a screenshot of a web page showing a number of different types of data](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef187b627284d396b7f9_3Y1COCukHpcz9VD42EBi8QyYQOpSdosArtmifHwEUnGSBt_4qUaebUOMUi26jAgczZtLXDr8JQZSZUsGHeOGVBGejyQUF6GbsYzpHTsWoMAxZvyLiIrLcGjbyfl0hrkxh5pLO4nxnlJgbsQYhKKU_hg.png) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef187b627284d396b7f9_3Y1COCukHpcz9VD42EBi8QyYQOpSdosArtmifHwEUnGSBt_4qUaebUOMUi26jAgczZtLXDr8JQZSZUsGHeOGVBGejyQUF6GbsYzpHTsWoMAxZvyLiIrLcGjbyfl0hrkxh5pLO4nxnlJgbsQYhKKU_hg.png) 2. Next, to access the logs for a specific pod, such as Traefik, use the command @Botkube kubectl logs -f traefik-df4ff85d6-f2mkz -n kube-system. -![Image 7: a screenshot of a web page showing the results of a search](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef1886f49705800e9d7b_daM1ilw9S5iqc3xAC9xmotCzuqcyJhOB9QBW7xDk1DZPy_E05t5U0CZANC-0hQrUIVIUOQYPpIVNUsYak46OEiKjo0JVCrLKbh73xreULqHIpcK5dHc-h3fS9Zp6JOoNGXqUNr_VfO5cglMsPvwGGsI.png) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef1886f49705800e9d7b_daM1ilw9S5iqc3xAC9xmotCzuqcyJhOB9QBW7xDk1DZPy_E05t5U0CZANC-0hQrUIVIUOQYPpIVNUsYak46OEiKjo0JVCrLKbh73xreULqHIpcK5dHc-h3fS9Zp6JOoNGXqUNr_VfO5cglMsPvwGGsI.png) ‍ @@ -97,14 +97,14 @@ This scenario illustrates Botkube's log management functionality: when a respons 4. For more specific log details, such as filtering for log lines containing the word "Configuration," enter "Configuration" into the Filter Output input box and hit enter. Botkube will then present you with the filtered log results. -![Image 8: a screen shot of a web page with a text box and a button](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef187b398bc7569516e9_zF_0o6ZVI24nmlcit4DYR0Pi6Pev79rAgvM-RMuxApGnmhBQQLdkb8795ObG5Ez905YtVhUwT5Q3t6g5Jc2I5OQU_E8QB_E9VeGfyT0yiDd21YQuTnwQdPzdOsrg-gcoiq8z2FoxyR0NNq_kobJ-sKE.png) +![Image 8](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef187b398bc7569516e9_zF_0o6ZVI24nmlcit4DYR0Pi6Pev79rAgvM-RMuxApGnmhBQQLdkb8795ObG5Ez905YtVhUwT5Q3t6g5Jc2I5OQU_E8QB_E9VeGfyT0yiDd21YQuTnwQdPzdOsrg-gcoiq8z2FoxyR0NNq_kobJ-sKE.png) ‍ Task 4: GitOps Workflows ------------------------ -![Image 9: a screen shot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) +![Image 9](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) ‍ @@ -121,7 +121,7 @@ In summary, Botkube's GitOps plugins bridge the gap between GitOps tools and com Task 5: K8s Configuration Management ------------------------------------ -![Image 10: a screenshot of a web page with a file output highlighted](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef1841f8fcbf64004e51_0gkwjMX-mrCQfN7REuJLBmEOCIt29ZaMaWUSKcBpvLxMqUjCK88hnlNQDMDHiETnASkpYW9n30pDi-7gOAvkvBAukHSx7IySsAd2av4upfFdN2DbM1hBJQ4torAVEu7Ydc53GxtSrmTBa6I5pFImIUs.png) +![Image 10](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef1841f8fcbf64004e51_0gkwjMX-mrCQfN7REuJLBmEOCIt29ZaMaWUSKcBpvLxMqUjCK88hnlNQDMDHiETnASkpYW9n30pDi-7gOAvkvBAukHSx7IySsAd2av4upfFdN2DbM1hBJQ4torAVEu7Ydc53GxtSrmTBa6I5pFImIUs.png) ‍ @@ -131,7 +131,7 @@ Managing Kubernetes configurations can be challenging, especially when done manu [Botkube's Helm executor plugin](https://botkube.io/learn/helm-charts) enhances this process.This plugin allows users to run Helm commands directly from their chat interface. This integration streamlines Kubernetes configuration management, making it more accessible and less error-prone compared to manual methods. -![Image 11: a screen shot of the settings for a game](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef185ae0f9b8f277eca9_dMnDLc0lomaKWLSqQX2mtc8ozegyDiwz0vvdpvZRw0Y6BMDIidfU_tYNbb0nsO5JczHDgAyUU_eoOdTsTLAsAVelHY6cWwtdB8OaP9wkIby5oV2pAohoonjFF6y-rCOjyuPrA210xtL6dL97M3aCESM.gif) +![Image 11](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef185ae0f9b8f277eca9_dMnDLc0lomaKWLSqQX2mtc8ozegyDiwz0vvdpvZRw0Y6BMDIidfU_tYNbb0nsO5JczHDgAyUU_eoOdTsTLAsAVelHY6cWwtdB8OaP9wkIby5oV2pAohoonjFF6y-rCOjyuPrA210xtL6dL97M3aCESM.gif) ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-open-source-to-cloud-migration.md b/hack/assistant-setup/content/botkube.io__blog__botkube-open-source-to-cloud-migration.md index 624f28a8..a8960717 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-open-source-to-cloud-migration.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-open-source-to-cloud-migration.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-open-source-to-cloud-migration Published Time: Aug 09, 2023 Markdown Content: -![Image 1: a woman with short hair smiling for the camera](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) Kelly Revenaugh @@ -17,78 +17,72 @@ With our new CLI migration tool, current open-source users are able to migrate t ### Table of Contents -* [Differences Between Botkube Open Source and Botkube Cloud](#differences-between-botkube-open-source-and-botkube-cloud) -* [What is the Botkube CLI?](#what-is-the-botkube-cli-) -* [How to Migrate Your Existing Botkube Account to Cloud](#how-to-migrate-your-existing-botkube-account-to-cloud) -* [Give it a try!](#give-it-a-try-) +* [Differences Between Botkube Open Source and Botkube Cloud](#differences-between-botkube-open-source-and-botkube-cloud-2) +* [What is the Botkube CLI?](#what-is-the-botkube-cli--2) +* [How to Migrate Your Existing Botkube Account to Cloud](#how-to-migrate-your-existing-botkube-account-to-cloud-2) +* [Give it a try!](#give-it-a-try--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! #### Get started with Botkube Cloud -With our latest release, we’ve made transitioning from the open source version of Botkube to our Cloud version even easier. [Botkube Cloud](http://botkube.io/) is built on top of our open source core and gives users even more benefits – including audit and event logs to track changes in your Kubernetes clusters, an easy-to-use visual dashboard to configure your settings, multi-cluster management, and much more. +With our latest release, we’ve made transitioning from the open source version of Botkube to our Cloud version even easier. \[Botkube Cloud\](http://botkube.io/) is built on top of our open source core and gives users even more benefits – including audit and event logs to track changes in your Kubernetes clusters, an easy-to-use visual dashboard to configure your settings, multi-cluster management, and much more. -With our new [CLI migration too](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud)l, current open-source users are able to migrate their data and configurations over to the Cloud version of Botkube with a few simple steps. - -Differences Between Botkube Open Source and Botkube Cloud ---------------------------------------------------------- +With our new \[CLI migration too\](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud)l, current open-source users are able to migrate their data and configurations over to the Cloud version of Botkube with a few simple steps. +\## Differences Between Botkube Open Source and Botkube Cloud We believe that both the open source version and cloud version of Botkube help supercharge Kubernetes teams’ technical workflows with seamless alert consolidation, monitoring, and troubleshooting – all from the same communication platforms that teams use every day. Botkube was developed in 2019 and has helped hundreds of teams collaborate and take on challenging Kubernetes-related tasks each day. We’ve create Botkube Cloud for teams that have growing multi-cluster environments and/or want to take of advanced features, not available in our open source version. Here are some of the highlights of Botkube Cloud:**‍** -**Easy configuration and installation** +\*\*Easy configuration and installation\*\* Botkube Cloud makes it easy to configure and install Botkube in a new Kubernetes cluster. Before Botkube Cloud, users had to manually install Botkube with a YAML file and update their Helm charts manually for each configuration change. To install with Cloud, just create an instance in the web app, then configure your communication platforms and Botkube plugins. You'll get an installation command that you can copy and paste to install Botkube. Once installed, Botkube will synchronize its configuration with the cloud and any changes you make in the web management interface will automatically be pushed to the cluster.**‍** -**Multi-cluster management** +\*\*Multi-cluster management\*\* -![Image 2: a screen shot of a web page showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d5072717f5862f1c0ba90e_64385d9ea0e4ca059b5a7a1d_Botkube.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d5072717f5862f1c0ba90e_64385d9ea0e4ca059b5a7a1d_Botkube.png) -Botkube Cloud makes it easy to manage Botkube in multiple Kubernetes clusters. Previously, if users wanted to use Botkube executors (e.g. kubectl commands) and have multiple Kubernetes clusters, users needed to create and install a Botkube Slack app for each cluster. +Botkube Cloud makes it easy to manage Botkube in multiple Kubernetes clusters. Previously,  if users wanted to use Botkube executors (e.g. kubectl commands) and have multiple Kubernetes clusters, users needed to create and install a Botkube Slack app for each cluster. Today, with Botkube Cloud, you can see the status and manage configuration for all of your clusters in one place in the web hosted app. When adding new clusters, you can copy an existing configuration to get going even faster.**‍** -**Advanced Multi-Cluster Slack bot** +\*\*Advanced Multi-Cluster Slack bot\*\* The Botkube Cloud Slack bot can be installed in your Slack workspace with a single click. It allows you to see your Slack channels in your instance configuration, ensure the Botkube bot is invited to the correct channels, and select which channels to use with Botkube plugins. It uses Botkube cloud services to route executor commands to the correct Kubernetes cluster so you can control multiple clusters from one Slack channel. This solves the multi-cluster problem that many open source users encountered previously.**‍** -**Audit and Event logs** +\*\*Audit and Event logs\*\* -![Image 3: a screen shot of a web page showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d507420a0b1ce9ecb2d0dd_64385e6998cfac2dfc8d887f_Event%20and%20Audit%20Logs.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d507420a0b1ce9ecb2d0dd_64385e6998cfac2dfc8d887f_Event%20and%20Audit%20Logs.png) Botkube Cloud collects and aggregates audit and event logs from all of your Botkube-enabled Kubernetes clusters. All Botkube notifications are stored as events and any Botkube executor commands are stored as audit log entries. Logs can be filtered and sorted and you can see what activity is happening in your clusters, correlate events, and find the root cause of problems that arise.**‍** -What is the Botkube CLI? ------------------------- +\## What is the Botkube CLI? -[Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) is a tool for installing and migrating Botkube installations from an open source instance to a Botkube Cloud instance. +\[Botkube CLI\](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) is a tool for installing and migrating Botkube installations from an open source instance to a Botkube Cloud instance. Botkube CLI is the best way to do an interactive installation of Botkube. The botkube install command runs the installation process and reports the progress and any errors back to you immediately. For automated installations using CI or GitOps tools, you can still use Helm to install the Botkube Helm chart unattended.**‍** -How to Migrate Your Existing Botkube Account to Cloud ------------------------------------------------------ +\## How to Migrate Your Existing Botkube Account to Cloud If you are using Botkube in your Kubernetes cluster with local configuration, the CLI provides a simple on-ramp to the advanced Botkube Cloud services. Migrating to the Cloud version of Botkube is extremely easy and only takes a few commands! -Here's how to [migrate your Botkube instance](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud): - -1. Create a [Botkube Cloud](https://app.botkube.io/) account +Here's how to \[migrate your Botkube instance\](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud): -2. Install the [Botkube CLI](https://docs.botkube.io/cli/getting-started) +1\. Create a \[Botkube Cloud\](https://app.botkube.io/) account -3. Run `botkube login` to [authenticate](https://docs.botkube.io/cli/getting-started#first-use) your CLI +2\. Install the \[Botkube CLI\](https://docs.botkube.io/cli/getting-started) -4. Run `botkube migrate` to [move your configuration](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to the cloud and connect your Botkube installation automatically +3\. Run \`botkube login\` to \[authenticate\](https://docs.botkube.io/cli/getting-started#first-use) your CLI +4\. Run \`botkube migrate\` to \[move your configuration\](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to the cloud and connect your Botkube installation automatically -Give it a try! --------------- +\## Give it a try! **‍**We’re here to help! If you need some help about migrating over, please reach out to us on the Botkube Slack workspace. Our team is happy to lend a hand as you make the transition over and answer any questions you may have. We’d love for you to try out the advanced features that we’ve developed over the past few months to make managing and troubleshooting your Kubernetes clusters as painless as possible. -Existing Botkube users can take advantage of new features like the interactive control plane and configuration dashboard immediately with the Free tier after migrating. New Cloud users also receive the Pro tier for free with a 30-day trial period (no credit card required!). If your team is looking to upgrade to the Pro or Enterprise tiers, we are giving a special discounted pricing to existing Botkube users. Please reach out to our [project leader, Blair](mailto:blair@kubeshop.io), to inquire about the discount. +Existing Botkube users can take advantage of new features like the interactive control plane and configuration dashboard immediately with the Free tier after migrating. New Cloud users also receive the Pro tier for free with a 30-day trial period (no credit card required!). If your team is looking to upgrade to the Pro or Enterprise tiers, we are giving a special discounted pricing to existing Botkube users. Please reach out to our \[project leader, Blair\](mailto:blair@kubeshop.io), to inquire about the discount. Hope you enjoy the new features. diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-socket-slack-getting-started.md b/hack/assistant-setup/content/botkube.io__blog__botkube-socket-slack-getting-started.md index ffef4042..1aa7025a 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-socket-slack-getting-started.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-socket-slack-getting-started.md @@ -5,128 +5,101 @@ URL Source: https://botkube.io/blog/botkube-socket-slack-getting-started Published Time: Dec 05, 2022 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) - -Blair Rampling - -Product Leader - -Botkube - -The new Botkube Slack app provides more great interactive features and better security when compared to the legacy Botkube Slack app. - -### Table of Contents - -* [Installing the Slack App in your workspace](#installing-the-slack-app-in-your-workspace) -* [Botkube Slack App Tokens](#botkube-slack-app-tokens) -* [Invite Botkube to a channel](#invite-botkube-to-a-channel) -* [Installing Botkube](#installing-botkube) -* [Explore the New Slack App](#explore-the-new-slack-app) -* [What Could Go Wrong?](#what-could-go-wrong-) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) - -#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! - -The [new Botkube Slack app](https://docs.botkube.io/installation/slack/) provides more great interactive features and better security when compared to the [legacy Botkube Slack app](https://docs.botkube.io/0.15/installation/slack/). We announced the new socket mode Slack app in the [Botkube v0.14.0 release notes](https://botkube.io/blog/botkube-v014-release-notes#new-botkube-slack-app). The new Slack app has some specific requirements and a new installation process, so let's have a look at how to get started with the most modern [ChatOps tool for Kubernetes!](http://botkube.io/) You can also use the Botkube [installation documentation](https://docs.botkube.io/installation/slack/) to get started, but this post is to give you more context about the changes to the new app and some caveats to watch out for. +The \[new Botkube Slack app\](https://docs.botkube.io/installation/slack/) provides more great interactive features and better security when compared to the \[legacy Botkube Slack app\](https://docs.botkube.io/0.15/installation/slack/). We announced the new socket mode Slack app in the \[Botkube v0.14.0 release notes\](https://botkube.io/blog/botkube-v014-release-notes#new-botkube-slack-app). The new Slack app has some specific requirements and a new installation process, so let's have a look at how to get started with the most modern \[ChatOps tool for Kubernetes!\](http://botkube.io) You can also use the Botkube \[installation documentation\](https://docs.botkube.io/installation/slack/) to get started, but this post is to give you more context about the changes to the new app and some caveats to watch out for. This blog post assumes that we're starting a completely new Botkube installation. Requirements: -* A Slack workspace where you have permission to install apps and create channels - -* A Kubernetes cluster where you have access to install Botkube +\- A Slack workspace where you have permission to install apps and create channels -* Working kubectl and helm installation +\- A Kubernetes cluster where you have access to install Botkube +\- Working kubectl and helm installation Multi-cluster caveat: The architecture of socket-based Slack apps is different from the older Slack app. If you are using Botkube executors (e.g. kubectl commands) and have multiple Kubernetes clusters, you need to install a Botkube Slack app for each cluster. This is required so that the Slack to Botkube connections go to the right place. We recommend you set the name of each app to reflect the cluster it will connect to in the next steps. -Installing the Slack App in your workspace ------------------------------------------- +\## Installing the Slack App in your workspace Let's go through the initial steps for installing the socket-based Slack app itself in your Slack workspace. -1. Open the [Slack App Console](https://api.slack.com/apps) and click Create an App or Create New App. - -2. Click "From an app manifest" as we will use the Botkube-provided manifest for the new app. - - -![Image 2: Kubernetes Deployment Setup wizard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5bd91dbba0faccc21_9xHsAYF1sDUzf92VzItiVmpg6pPfW8mLBma5StF_-j8ZfzyqSgBnPbqpPnTLGLzn2nCGy_wEPBw9E5dpwbZBNXbKm0jSWixj-ufmFk-7JtqPw5TXhXO4a4LpwXLVJgh2pRe2U-bx0KhPJoUCB5EkdhT20QMTg4VVQvty5IqPCG3ITKmfL_f1nNdZQ_hlcQ.png) - -3. Select the workspace into which you want to install the app and click Next. - -4. You can find the latest app manifests [in the Botkube documentation](https://docs.botkube.io/installation/slack/#create-slack-app). There are three different YAML manifests available. The manifests vary based on whether you want to use Botkube in a public Slack channel, a private channel, or both. This is one of the new improved security features that limits the scope of the token that Botkube uses. This is an example of the manifest for both public and private channels: - - -display_information: -name: Botkube -description: Botkube -background_color: "#a653a6" -features: -bot_user: -display_name: Botkube -always_online: false -oauth_config: -scopes: -bot: -- channels:read -- groups:read -- app_mentions:read -- chat:write -- files:write -settings: -event_subscriptions: -bot_events: -- app_mention -interactivity: -is_enabled: true -org_deploy_enabled: false -socket_mode_enabled: true -token_rotation_enabled: false +1\. Open the \[Slack App Console\](https://api.slack.com/apps) and click Create an App or Create New App. + +2\. Click "From an app manifest" as we will use the Botkube-provided manifest for the new app. + +![Image 1: Kubernetes Deployment Setup wizard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5bd91dbba0faccc21_9xHsAYF1sDUzf92VzItiVmpg6pPfW8mLBma5StF_-j8ZfzyqSgBnPbqpPnTLGLzn2nCGy_wEPBw9E5dpwbZBNXbKm0jSWixj-ufmFk-7JtqPw5TXhXO4a4LpwXLVJgh2pRe2U-bx0KhPJoUCB5EkdhT20QMTg4VVQvty5IqPCG3ITKmfL_f1nNdZQ_hlcQ.png) + +3\. Select the workspace into which you want to install the app and click Next. + +4\. You can find the latest app manifests \[in the Botkube documentation\](https://docs.botkube.io/installation/slack/#create-slack-app). There are three different YAML manifests available. The manifests vary based on whether you want to use Botkube in a public Slack channel, a private channel, or both. This is one of the new improved security features that limits the scope of the token that Botkube uses. This is an example of the manifest for both public and private channels: + +\`\`\`bash + +display\_information: + name: Botkube + description: Botkube + background\_color: "#a653a6" +features: + bot\_user: +   display\_name: Botkube +   always\_online: false +oauth\_config: + scopes: +   bot: +     - channels:read +     - groups:read +     - app\_mentions:read +     - chat:write +     - files:write +settings: + event\_subscriptions: +   bot\_events: +     - app\_mention + interactivity: +   is\_enabled: true + org\_deploy\_enabled: false + socket\_mode\_enabled: true + token\_rotation\_enabled: false + +\`\`\` If you are using Botkube with multiple Kubernetes clusters as mentioned in the earlier caveat, set the name and description fields to something specific to the cluster this app will manage. This will make it clear in Slack itself which bot maps to which cluster. Paste this YAML into the app manifest dialog and click Next. -![Image 3: Kubernetes Manifest file for Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd59be2c7f0b4231ab2_rT70Rd59URrbNTS0SF4iTHlKyh9YkqZylD9a_vi_umpJJghbKTkrlq4dc1SUb1JmLa-TvD-Zv0fgQZiAdNgv--_ptj2Jf7vwNDxX20KMin3O80Xrjyl1BzDCM8Sfe2MXizEODQqKb1Cuz-Rlz_69CzhYKRhFr12eYAXezbr5YnRkjw_k6VUft--i1led9Q.png) +![Image 2: Kubernetes Manifest file for Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd59be2c7f0b4231ab2_rT70Rd59URrbNTS0SF4iTHlKyh9YkqZylD9a_vi_umpJJghbKTkrlq4dc1SUb1JmLa-TvD-Zv0fgQZiAdNgv--_ptj2Jf7vwNDxX20KMin3O80Xrjyl1BzDCM8Sfe2MXizEODQqKb1Cuz-Rlz_69CzhYKRhFr12eYAXezbr5YnRkjw_k6VUft--i1led9Q.png) -5. You now have a chance to review the app settings. Click the Create button. +5\. You now have a chance to review the app settings. Click the Create button. -6. Click the Install to Workspace button to add this newly created app to the Slack Workspace. +6\. Click the Install to Workspace button to add this newly created app to the Slack Workspace. +![Image 3: Slack Webhook API for building Slack Bots](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd53a3620a880c1429d_2lBQzqtvc7o-h5cHB7Hp-qyFgGwlqldNSxf1lHVyYUDUwGBXgpmBEPHOH5xj_bEQnudTJx6d1agQgl6EZoptfPbrgxwWU3hwn-C-0-23ImODUiph_cvEFxMcMPEjewJEeL8Gvj-NNj_ysyTstwz8fFB5jtyGIy6-dmpTM1v8D097Tx6VQ12Q-mumwzFGhA.png) -![Image 4: Slack Webhook API for building Slack Bots](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd53a3620a880c1429d_2lBQzqtvc7o-h5cHB7Hp-qyFgGwlqldNSxf1lHVyYUDUwGBXgpmBEPHOH5xj_bEQnudTJx6d1agQgl6EZoptfPbrgxwWU3hwn-C-0-23ImODUiph_cvEFxMcMPEjewJEeL8Gvj-NNj_ysyTstwz8fFB5jtyGIy6-dmpTM1v8D097Tx6VQ12Q-mumwzFGhA.png) +7\. Review the permissions and click Allow. The app is now installed in your Slack workspace. -7. Review the permissions and click Allow. The app is now installed in your Slack workspace. +![Image 4: Allow Botkube permissions into Group Channels](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5d46fe3cc1ec655d1_kR2N0u3ZQlfHarVS2aC5lfyerRXjRmE25noMdLH2yp3l1Rd8gNeplU-JbQ4aak4LlhHk-H7-G3nxO8CXJyD5eH0mhy5-69gJsjwSUJaWeHijGc94iFse5AYCKYEG9-fxZ5Q57C9JUcPTfRsqiiPpBzU4Bc_7MlJo2lzKrnBhtudCygDS0M35okbc39reEg.png) -![Image 5: Allow Botkube permissions into Group Channels](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5d46fe3cc1ec655d1_kR2N0u3ZQlfHarVS2aC5lfyerRXjRmE25noMdLH2yp3l1Rd8gNeplU-JbQ4aak4LlhHk-H7-G3nxO8CXJyD5eH0mhy5-69gJsjwSUJaWeHijGc94iFse5AYCKYEG9-fxZ5Q57C9JUcPTfRsqiiPpBzU4Bc_7MlJo2lzKrnBhtudCygDS0M35okbc39reEg.png) +\## Botkube Slack App Tokens -Botkube Slack App Tokens ------------------------- +Now that the Slack app is installed in your workspace, you can proceed to installing Botkube in your Kubernetes cluster. First, you need two tokens, a bot token and an app-level token. This is another additional security measure in the new Slack app. You can see details on these token types in the \[Slack documentation\](https://api.slack.com/authentication/token-types). You will use these tokens in the Botkube installation process. -Now that the Slack app is installed in your workspace, you can proceed to installing Botkube in your Kubernetes cluster. First, you need two tokens, a bot token and an app-level token. This is another additional security measure in the new Slack app. You can see details on these token types in the [Slack documentation](https://api.slack.com/authentication/token-types). You will use these tokens in the Botkube installation process. +1\. From the Slack app page where you left off after installing the app in your workspace, select OAuth & Permissions in the left navigation bar. -1. From the Slack app page where you left off after installing the app in your workspace, select OAuth & Permissions in the left navigation bar. +2\. Copy the Bot User OAuth Token shown here. -2. Copy the Bot User OAuth Token shown here. +![Image 5: Oauth Tokens for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd57f6d2658565c2802_EbTpqUY7Kxtxi7pDnIVQREtoVR7lLKJaHYlFSo5Ald7PPzcwWuoNxhTIfjSu5b8on04-YKAtxwuwBPSAlO-MBAGNkM9RsjYLb-D9prje8FoOORshIpi3AUvnyPP9aFj08weq-EjK0bMLtb_II93-zftUqceLGV3SropKhaNaRckmI7UHx3BMPSpyU0JhSQ.png) +3\. Click Basic Information in the left navigation bar. -![Image 6: Oauth Tokens for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd57f6d2658565c2802_EbTpqUY7Kxtxi7pDnIVQREtoVR7lLKJaHYlFSo5Ald7PPzcwWuoNxhTIfjSu5b8on04-YKAtxwuwBPSAlO-MBAGNkM9RsjYLb-D9prje8FoOORshIpi3AUvnyPP9aFj08weq-EjK0bMLtb_II93-zftUqceLGV3SropKhaNaRckmI7UHx3BMPSpyU0JhSQ.png) +4\. Scroll down to the App-Level Tokens section and click the Generate Token and Scopes button. -3. Click Basic Information in the left navigation bar. +5\. Give the token an appropriate name and click Add Scope. -4. Scroll down to the App-Level Tokens section and click the Generate Token and Scopes button. +6\. Select the connections:write scope, then click the Generate button. -5. Give the token an appropriate name and click Add Scope. +![Image 6: Generating app token for custom Slack Bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd57787389c7b4d6eac_Wl7cvk72vCB_r0giRxWLTQlmew8rmPFkFTZUaj7urPf2C4LM_YaVuO5XrDXOl9Ql58cOrnQT3LiDl4dcY0PjyIUWHivxBlIsTOsWdYX4un0JJaI8DIQfIxOfTHjVxD50Yk9QaLTQ_zlbcmhdZzjZN_1-4FSFZCYzO8k8N1uLxDQRcIXRZZIAMLFQJuG5iw.png) -6. Select the connections:write scope, then click the Generate button. +7\. Copy the created token and click Done. - -![Image 7: Generating app token for custom Slack Bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd57787389c7b4d6eac_Wl7cvk72vCB_r0giRxWLTQlmew8rmPFkFTZUaj7urPf2C4LM_YaVuO5XrDXOl9Ql58cOrnQT3LiDl4dcY0PjyIUWHivxBlIsTOsWdYX4un0JJaI8DIQfIxOfTHjVxD50Yk9QaLTQ_zlbcmhdZzjZN_1-4FSFZCYzO8k8N1uLxDQRcIXRZZIAMLFQJuG5iw.png) - -7. Copy the created token and click Done. - -Invite Botkube to a channel ---------------------------- +\## Invite Botkube to a channel Now that everything is set up for the Slack app, you need to invite the Botkube bot to a Slack channel. This is the channel that you will use for notifications and command execution and is required for the Botkube configuration before it is installed in Kubernetes. @@ -134,96 +107,94 @@ You should see a new Slack bot in your workspace under "Apps" with the name that Invite the bot to the channel. The easiest way to do this is to open the Slack channel and send a message to _@botkube bot name_. You will be prompted to add the bot to the channel, click the Add to Channel button. -![Image 8: Adding Botube to your cluster chat channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5bd91db676aaccc2a_5FVGjg5gJZRQdEsdM2zokGiw_bH5m2tUJm100sy1unbpCAwupyN2hYkXLc21-emgPzST00zRg5srK_eQXKsJ_X8xnBRe4tHcyCnvH97uePNhnRt4TA2B6y0sqr-Um2-V1V9U-mJcpFvuPxo5LzH3kLBMnSbHWnycZ6BTSNb7e9issQ2kcAwLv6oue8ePUg.png) +![Image 7: Adding Botube to your cluster chat channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5bd91db676aaccc2a_5FVGjg5gJZRQdEsdM2zokGiw_bH5m2tUJm100sy1unbpCAwupyN2hYkXLc21-emgPzST00zRg5srK_eQXKsJ_X8xnBRe4tHcyCnvH97uePNhnRt4TA2B6y0sqr-Um2-V1V9U-mJcpFvuPxo5LzH3kLBMnSbHWnycZ6BTSNb7e9issQ2kcAwLv6oue8ePUg.png) -Installing Botkube ------------------- +\## Installing Botkube -We now have everything we need to configure and install Botkube. We will use helm to install it in a Kubernetes cluster. First, configure some environment variables that we will pass to the `helm install` command. +We now have everything we need to configure and install Botkube. We will use helm to install it in a Kubernetes cluster. First, configure some environment variables that we will pass to the \`helm install\` command. The Slack app bot token from earlier: -`export SLACK_API_BOT_TOKEN="xoxb-{botToken}"` +\`export SLACK\_API\_BOT\_TOKEN="xoxb-{botToken}"\` The Slack app-level token from earlier: -`export SLACK_API_APP_TOKEN="xapp-{appToken}"` +\`export SLACK\_API\_APP\_TOKEN="xapp-{appToken}"\` The cluster name that will be used when interacting with this instance of Botkube. Notifications and other interactive commands will use this name to reference this cluster: -`export CLUSTER_NAME={cluster_name}` +\`export CLUSTER\_NAME={cluster\_name}\` Set to true to allow execution of kubectl commands, false to make this bot instance for event notifications only: -`export ALLOW_KUBECTL={allow_kubectl}` +\`export ALLOW\_KUBECTL={allow\_kubectl}\` Specify the Slack channel name where you invited the bot earlier. Make sure you do not include the # in the channel name: -`export SLACK_CHANNEL_NAME={channel_name}` +\`export SLACK\_CHANNEL\_NAME={channel\_name}\` Now that those five environment variables are set, make sure you have the Botkube helm repository configured: -`helm repo add botkube https://charts.botkube.io` +\`helm repo add botkube https://charts.botkube.io\` -`helm repo update` +\`helm repo update\` -Now you can simply run the helm install command shown here, or copy from the [documentation](https://docs.botkube.io/installation/slack/#install-botkube-backend-in-kubernetes-cluster). Note that this installs version v0.16.0 of Botkube which is the latest version as of this article: +Now you can simply run the helm install command shown here, or copy from the \[documentation\](https://docs.botkube.io/installation/slack/#install-botkube-backend-in-kubernetes-cluster). Note that this installs version v0.16.0 of Botkube which is the latest version as of this article: -helm install --version v0.16.0 botkube --namespace botkube --create-namespace \ +\`\`\` ---set communications.default-group.socketSlack.enabled=true \ +helm install --version v0.16.0 botkube --namespace botkube --create-namespace \\ ---set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \ +\--set communications.default-group.socketSlack.enabled=true \\ ---set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \ +\--set communications.default-group.socketSlack.channels.default.name=${SLACK\_CHANNEL\_NAME} \\ ---set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \ +\--set communications.default-group.socketSlack.appToken=${SLACK\_API\_APP\_TOKEN} \\ ---set settings.clusterName=${CLUSTER_NAME} \ +\--set communications.default-group.socketSlack.botToken=${SLACK\_API\_BOT\_TOKEN} \\ ---set executors.kubectl-read-only.kubectl.enabled=${ALLOW_KUBECTL} \ +\--set settings.clusterName=${CLUSTER\_NAME} \\ + +\--set executors.kubectl-read-only.kubectl.enabled=${ALLOW\_KUBECTL} \\ botkube/botkube +\`\`\` If everything goes according to plans, you will see Botkube start up in the Slack channel and print the initial interactive help menu. -![Image 9: Kubernetes Alerts now actively alerting Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd53a3620ccfbc1429e_T_WAEBM055UezMigtRJmb49_MhQocCrlbgee7nW_ekbsIKvexG3KzQrjn9gUsJkbOYCGPhanm9mYriXQu0JaDrB4Pr7AsQdg3xQfLqLB6Qi1gLRay8uSRfJGke15DOmfBFWoCL9xGQTjBdi50CRU4z_thYxXVS3mASf-cbxluEV7EezHvV4sill1apGpEw.png) +![Image 8: Kubernetes Alerts now actively alerting Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd53a3620ccfbc1429e_T_WAEBM055UezMigtRJmb49_MhQocCrlbgee7nW_ekbsIKvexG3KzQrjn9gUsJkbOYCGPhanm9mYriXQu0JaDrB4Pr7AsQdg3xQfLqLB6Qi1gLRay8uSRfJGke15DOmfBFWoCL9xGQTjBdi50CRU4z_thYxXVS3mASf-cbxluEV7EezHvV4sill1apGpEw.png) Botkube is now ready to go! -Explore the New Slack App -------------------------- +\## Explore the New Slack App The new Botkube Slack app adds some great features that weren't previously available, particularly around interactive event response. You saw the interactive help at the end of the installation process in the previous section. You can click the buttons in the interactive help to run the commands as shown. You can also make configuration changes interactively, try clicking the Adjust notifications button and you can set notification settings using a dialog rather than editing YAML. -Another interactive feature is the Run command option shown with events. Any time an event is sent to the channel, you can select a contextual command from the Run command drop-down box. The list of commands will be only those relevant to the resource type in the event. Selecting a command will use the kubectl executor to run the command against the specific resource in the event. This saves typing out the kubectl commands by hand if you want to quickly get some information about a resource, like `describe` a new resource or get `logs` on a pod with errors. +Another interactive feature is the Run command option shown with events. Any time an event is sent to the channel, you can select a contextual command from the Run command drop-down box. The list of commands will be only those relevant to the resource type in the event. Selecting a command will use the kubectl executor to run the command against the specific resource in the event. This saves typing out the kubectl commands by hand if you want to quickly get some information about a resource, like \`describe\` a new resource or get \`logs\` on a pod with errors. -![Image 10: Run Kubernetes troubleshooting commands](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638dfeee173eea4859c13681_aeB3oRSq_LvBSkdLujcv2ls4WiN8M1W-Mo6KDzL2MmC7bQ487s0DSqXd5X4iejHKHgtD1abNQn6LEREE-J4U-TR5VEre1aATDi51rzTn2WQVogIE6qV6bFYRZe_2O7o7ZkH_5iUa5j5DcVMbzzo7mXKi3N2n04WcE7cqj5MEly6On-gg-fRNpxsmDAxn9A.png) +![Image 9: Run Kubernetes troubleshooting commands](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638dfeee173eea4859c13681_aeB3oRSq_LvBSkdLujcv2ls4WiN8M1W-Mo6KDzL2MmC7bQ487s0DSqXd5X4iejHKHgtD1abNQn6LEREE-J4U-TR5VEre1aATDi51rzTn2WQVogIE6qV6bFYRZe_2O7o7ZkH_5iUa5j5DcVMbzzo7mXKi3N2n04WcE7cqj5MEly6On-gg-fRNpxsmDAxn9A.png) -Another interactive feature can be found by running `@botkube kubectl` with no options. This starts the interactive command generator. This presents you with a list of verbs that you can run and as you make selections, automatically offers the contextually-relevant options in drop-down boxes until you have built a complete command. You can then click the Run command button and see the resulting output. You can also filter the output by specifying a match string in the Filter output box. +Another interactive feature can be found by running \`@botkube kubectl\` with no options. This starts the interactive command generator. This presents you with a list of verbs that you can run and as you make selections, automatically offers the contextually-relevant options in drop-down boxes until you have built a complete command. You can then click the Run command button and see the resulting output. You can also filter the output by specifying a match string in the Filter output box. -![Image 11: Pulling K8s Logs](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638dfeee5c48734b1151fe69_VBgNCtn62GTB7Ee-xc2z5xMXs92IaE5blN1CZPVNeV18fpAF4dSTi_giYZyoA80T4BBTnajpiBnsl7kX-xlWPKTdjTb1-6zKxNSJCQwjsqA9HyYinugvHNE-B0oQKj0MkV-FsRNbuIvmJe77SdtuFJv6tR5WxKwmvLkMzxDMFlLCA6lCItB8uUtFHS7Lmg.png) +![Image 10: Pulling K8s Logs](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638dfeee5c48734b1151fe69_VBgNCtn62GTB7Ee-xc2z5xMXs92IaE5blN1CZPVNeV18fpAF4dSTi_giYZyoA80T4BBTnajpiBnsl7kX-xlWPKTdjTb1-6zKxNSJCQwjsqA9HyYinugvHNE-B0oQKj0MkV-FsRNbuIvmJe77SdtuFJv6tR5WxKwmvLkMzxDMFlLCA6lCItB8uUtFHS7Lmg.png) -What Could Go Wrong? --------------------- +\## What Could Go Wrong? There are several steps in the process to look out for. These are where things could go wrong and you could end up with a Botkube installation that doesn't work. Always check the Botkube pod logs for details on why something might not be working, but here are a few things to look out for: -* Slack App Manifest Scope: When using the YAML app manifest to create the Slack app, make sure you use the [appropriate version](https://docs.botkube.io/installation/slack/#create-slack-app) for public, private, or both Slack channel types. - -* Slack app-level token scope: The app-level token needs to have the `connections:write` scope assigned. +\- Slack App Manifest Scope: When using the YAML app manifest to create the Slack app, make sure you use the \[appropriate version\](https://docs.botkube.io/installation/slack/#create-slack-app) for public, private, or both Slack channel types. -* Multiple clusters: When using Botkube to execute commands in multiple Kubernetes clusters, you need to install a Slack app for each cluster to ensure the commands are routed to the correct one. If you are using Botkube for **notifications only** and have command execution disabled, you can get away with a single app for multiple clusters. If you ever do want to enable command executions though, you will need to revert to the Slack app per cluster model. +\- Slack app-level token scope: The app-level token needs to have the \`connections:write\` scope assigned. -* Incorrect tokens: Make sure your bot and app-level tokens are correct and match those in the Slack App Console. +\- Multiple clusters: When using Botkube to execute commands in multiple Kubernetes clusters, you need to install a Slack app for each cluster to ensure the commands are routed to the correct one. If you are using Botkube for \*\*notifications only\*\* and have command execution disabled, you can get away with a single app for multiple clusters. If you ever do want to enable command executions though, you will need to revert to the Slack app per cluster model. -* Slack channel configuration: Make sure you omit the # when specifying the Slack channel that Botkube will use. +\- Incorrect tokens: Make sure your bot and app-level tokens are correct and match those in the Slack App Console. +\- Slack channel configuration: Make sure you omit the # when specifying the Slack channel that Botkube will use. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-takes-on-amsterdam-a-kubecon-recap.md b/hack/assistant-setup/content/botkube.io__blog__botkube-takes-on-amsterdam-a-kubecon-recap.md index 0f5a5418..430c1ae7 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-takes-on-amsterdam-a-kubecon-recap.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-takes-on-amsterdam-a-kubecon-recap.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-takes-on-amsterdam-a-kubecon-recap Published Time: May 04, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v0-18-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v0-18-0-release-notes.md index 1d1d5bb4..4b692057 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v0-18-0-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v0-18-0-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v0-18-0-release-notes Published Time: Feb 06, 2023 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,47 +17,43 @@ Botkube v0.18.0 adds a Prometheus source plugin and command aliases. ### Table of Contents -* [Prometheus Plugin](#prometheus-plugin) -* [Aliases](#aliases) -* [Bug Fixes](#bug-fixes) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [Prometheus Plugin](#prometheus-plugin-2) +* [Aliases](#aliases-2) +* [Bug Fixes](#bug-fixes-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -Botkube v0.18.0 has arrived. We've added our first new source plugin for Prometheus, and customizable command aliases. Botkube is the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! +Botkube v0.18.0 has arrived. We've added our first new source plugin for Prometheus, and customizable command aliases. Botkube is the most modern \[ChatOps tool for Kubernetes\](http://botkube.io)! -This release builds on the [plugin system](https://botkube.io/blog/build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins) we released in [Botkube v0.17.0](https://botkube.io/blog/botkube-v017-release-notes). In that version we also released the first Botkube-developed executor [plugin for Helm](https://docs.botkube.io/configuration/executor/helm). We have made some other small enhancements to the plugin system in this version. +This release builds on the \[plugin system\](https://botkube.io/blog/build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins) we released in \[Botkube v0.17.0\](https://botkube.io/blog/botkube-v017-release-notes). In that version we also released the first Botkube-developed executor \[plugin for Helm\](https://docs.botkube.io/configuration/executor/helm). We have made some other small enhancements to the plugin system in this version. -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +_If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)_ -Prometheus Plugin ------------------ +\## Prometheus Plugin -While Botkube has supported Kubernetes events for a long time, K8s clusters tend to have a lot more state events and metrics going on. Typically tools like kube-state-metrics and custom applications are configured to use Prometheus as a store for metrics. Prometheus' Alertmanager can then find metrics that are in anomalous states and trigger alerts. We've built the Botkube source plugin for [Prometheus](https://docs.botkube.io/configuration/source/prometheus) to give Botkube access to those alerts. Once enabled, the Prometheus plugin can be configured to consume any alerts in the specified states and display them in any channels you have configured in your source binding configuration. +While Botkube has supported Kubernetes events for a long time, K8s clusters tend to have a lot more state events and metrics going on. Typically tools like kube-state-metrics and custom applications are configured to use Prometheus as a store for metrics. Prometheus' Alertmanager can then find metrics that are in anomalous states and trigger alerts. We've built the Botkube source plugin for \[Prometheus\](https://docs.botkube.io/configuration/source/prometheus) to give Botkube access to those alerts. Once enabled, the Prometheus plugin can be configured to consume any alerts in the specified states and display them in any channels you have configured in your source binding configuration. ![Image 2: Prometheus alerts in Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63e104c5fb11822e79cc09c8_ijd6WpT3jxksxNoy-fni7NrXRKM3p1iZAHutyVNDPEMjUTsgBkpAZ_pDEHEHgDKIHjjtpl_8V1Eu60mHmFUt2RIcRLv-TKdnmQIbF9op1r-VGZY6d6XTsB6zGkQHWB3r7wuk2ekw0o8Hl6adAZaoJmQ.png) -See the [documentation](https://docs.botkube.io/configuration/source/prometheus) to enable and configure the Prometheus plugin, it only requires a few settings. +See the \[documentation\](https://docs.botkube.io/configuration/source/prometheus) to enable and configure the Prometheus plugin, it only requires a few settings. -Aliases -------- +\## Aliases -As a way to save typing, Botkube had implemented the k and kc aliases for the kubectl command, much like DevOps admins like to do on the command line. Now you can [configure your own custom aliases](https://docs.botkube.io/configuration/alias) for any command in Botkube. Not only can you alias a single command like kubectl, you can create an alias for the full command including options and flags. In the example shown here, `kgp` is an alias for the full `kubectl get pods` command. +As a way to save typing, Botkube had implemented the k and kc aliases for the kubectl command, much like DevOps admins like to do on the command line. Now you can \[configure your own custom aliases\](https://docs.botkube.io/configuration/alias) for any command in Botkube. Not only can you alias a single command like kubectl, you can create an alias for the full command including options and flags. In the example shown here, \`kgp\` is an alias for the full \`kubectl get pods\` command. ![Image 3: Kubectl aliases setup](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63e104c5e04d8205b4b47aa9_yHASb87npDigom97MSabXqtK812CEfQ08iOuqf9UU9KgcSY0kRwbcCdapzCZDonNyKi-HuxxAWgAFcKaMt0MYLJKZDTW9LY75QCNi4JA_vS7V0n8A0XmMBh-WzJLxMMoyBms6HUjDEiGcEs_VSZbTms.png) Maria wrote another article on [Kubectl aliases](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) and their use cases. For more details on how to configure your own Kubernetes aliases read this article and the documentation above. -Bug Fixes ---------- +\## Bug Fixes -We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.18.0). +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v0.18.0). -We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v013-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v013-release-notes.md index 3bef76cf..2e6fe72f 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v013-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v013-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v013-release-notes Published Time: Sep 01, 2022 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,28 +17,27 @@ The latest release of Botkube is here! This release from the new Botkube team in ### Table of Contents -* [Multi-Channel Support](#multi-channel-support) -* [Bug Fixes](#bug-fixes) -* [Release Pipeline Enhancements](#release-pipeline-enhancements) -* [Telemetry](#telemetry) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [Multi-Channel Support](#multi-channel-support-2) +* [Bug Fixes](#bug-fixes-2) +* [Release Pipeline Enhancements](#release-pipeline-enhancements-2) +* [Telemetry](#telemetry-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -BotKube, welcome to Kubeshop! We're happy to have the most modern [ChatOps tool for Kubernetes](http://botkube.io/) join the team. +BotKube, welcome to Kubeshop! We're happy to have the most modern \[ChatOps tool for Kubernetes\](http://botkube.io) join the team. BotKube v0.13.0 is the first release under Kubeshop and the newly formed dedicated Botkube team. We are picking up the pace of development and you can expect to see more frequent BotKube releases with lots of new, great features and bug fixes. -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +\*If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)\* In this release, we focused on multi-channel support, bug fixes, and optimizing the BotKube release pipeline. -Multi-Channel Support ---------------------- +\## Multi-Channel Support ![Image 2: Connecting Multiple Kubernetes Clusters to Multiple Slack Channels](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb6a2fdfd662d24a9ca0_6310c1dc595cf2e50475bc23_2dGs46sYiazq09JJsR0RtJZwNSQPpS_FFV3EcATxfr7Om0vQQgafkiLDUdFNfVg31adYxk0VRVgyPxjr4nFPLENhF8XSeLPmBAAWVS6dDYtRkgat9EqCF5ApyMZyVhDBJX0cW0y9knrOPcDdSQIsRg.png) -While BotKube is now part of the Kubeshop team, BotKube development is still community-driven. Multi-channel support was requested by several users in the BotKube community and the reason why we implemented it in our first release. We also worked with the community to review the [configuration proposal](https://github.com/kubeshop/botkube/issues/628) and will continue this kind of community involvement as we go. +While BotKube is now part of the Kubeshop team, BotKube development is still community-driven. Multi-channel support was requested by several users in the BotKube community and the reason why we implemented it in our first release. We also worked with the community to review the \[configuration proposal\](https://github.com/kubeshop/botkube/issues/628) and will continue this kind of community involvement as we go. BotKube now supports multiple channels and communication tools using a single BotKube installation in your Kubernetes cluster. You can group and send events to different channels and tools. For example, some events are sent as Slack chat messages for an immediate response and others to ElasticSearch for archiving. You can even have multiple instances of these tools and send specific events to different channels in each of them. This previously required multiple BotKube installations in a cluster or complex annotations. You can also toggle filters and recommendations per-rule now, where filters and recommendation settings were global in previous versions. @@ -46,26 +45,23 @@ In future releases, we plan to streamline this source to channel mapping further It is also possible to configure the executor configuration on a per-channel basis, so that kubectl permissions can be controlled. You can set different kubectl permissions that restrict the commands, resources, and namespaces users in a specified channel can access. This is great for environments with multi-tenant Kubernetes clusters where teams use separate namespaces. -We have simplified and enhanced the BotKube configuration syntax to enable the new multi-channel support. If you are running BotKube v0.12.4 (or earlier) using a default configuration, you can specify an updated configuration when using the helm upgrade command. If you are using a custom configuration, see the [changelog](https://github.com/kubeshop/botkube/blob/main/CHANGELOG.md#v0130-2022-08-29) for details on the configuration syntax changes. You can modify your config.yaml file with the new structure and pass that to the helm upgrade -f command. +We have simplified and enhanced the BotKube configuration syntax to enable the new multi-channel support. If you are running BotKube v0.12.4 (or earlier) using a default configuration, you can specify an updated configuration when using the helm upgrade command. If you are using a custom configuration, see the \[changelog\](https://github.com/kubeshop/botkube/blob/main/CHANGELOG.md#v0130-2022-08-29) for details on the configuration syntax changes. You can modify your config.yaml file with the new structure and pass that to the helm upgrade -f command. -You can also see the configuration details for [sources](https://botkube.io/configuration/source/) and [executors](https://botkube.io/configuration/executor/) in the BotKube documentation. +You can also see the configuration details for \[sources\](https://botkube.io/configuration/source/) and \[executors\](https://botkube.io/configuration/executor/) in the BotKube documentation. -Bug Fixes ---------- +\## Bug Fixes -We have fixed several bugs in BotKube that were reported to us by users. We also spent some time refactoring code and increasing test coverage to improve the quality of BotKube. You can see the list of bug fixes in the [changelog](https://github.com/kubeshop/botkube/blob/main/CHANGELOG.md#v0130-2022-08-29). +We have fixed several bugs in BotKube that were reported to us by users. We also spent some time refactoring code and increasing test coverage to improve the quality of BotKube. You can see the list of bug fixes in the \[changelog\](https://github.com/kubeshop/botkube/blob/main/CHANGELOG.md#v0130-2022-08-29). -We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Release Pipeline Enhancements ------------------------------ +\## Release Pipeline Enhancements We are working on improving the BotKube release pipeline with each release. Our goal is to fully automate the release pipeline, so that we can collect all pull requests in a release branch, perform automated end-to-end testing with the various communication platforms, and build and release the BotKube container image. In this release we have cleaned up the overall CI pipeline and automated end-to-end testing of BotKube on Slack. As we add more automation, BotKube releases will be more frequent and more reliable. -Telemetry ---------- +\## Telemetry BotKube has introduced anonymized telemetry collection in v0.13. @@ -73,39 +69,37 @@ Why: We are collecting this telemetry data in order to focus our development eff What:All data is anonymized. We use UUIDs in order to aggregate telemetry from individual BotKube installations. Other data that could identify users or environments is redacted, such as namespace names, pod names, etc. For transparency, we collect the following data: -* BotKube version +\- BotKube version -* Kubernetes version +\- Kubernetes version -* Names of enabled integrations (notifiers and bots) +\- Names of enabled integrations (notifiers and bots) -* Handled events in anonymized form, grouped by the integration (communication platform) name +\- Handled events in anonymized form, grouped by the integration (communication platform) name -* For each event, we collect its type (e.g. create or delete), resource API Version and resource Kind. Any custom resource API groups or Kinds are excluded from the analytics collection. +\- For each event, we collect its type (e.g. create or delete), resource API Version and resource Kind. Any custom resource API groups or Kinds are excluded from the analytics collection. -* Executed commands in anonymized form +\- Executed commands in anonymized form -* For kubectl commands, only the command verb is collected. Resource name and namespace are excluded from the analytics collection. +\- For kubectl commands, only the command verb is collected. Resource name and namespace are excluded from the analytics collection. -* App errors (crashes, configuration and notification errors) +\- App errors (crashes, configuration and notification errors) -* For identifying BotKube installations, we use unique identifiers generated in the following way: +\- For identifying BotKube installations, we use unique identifiers generated in the following way: -* As an anonymous cluster identifier, we use the uid of kube-system Namespace, +\- As an anonymous cluster identifier, we use the uid of kube-system Namespace, -* As an anonymous installation identifier, we use UUID generated during Helm chart installation and persisted in a ConfigMap. +\- As an anonymous installation identifier, we use UUID generated during Helm chart installation and persisted in a ConfigMap. +Opt-out: \*\*You can opt out of telemetry collection by setting the \`analytics.disable: true\` parameter when installing or upgrading the Helm chart.\*\* This prevents all analytics collection and we do not track the installation and opt-out actions. -Opt-out: **You can opt out of telemetry collection by setting the `analytics.disable: true` parameter when installing or upgrading the Helm chart.** This prevents all analytics collection and we do not track the installation and opt-out actions. +Please see the BotKube \[Privacy Policy\](https://botkube.io/privacy/) for more details. -Please see the BotKube [Privacy Policy](https://botkube.io/privacy/) for more details. - -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about BotKube. Help us plan the BotKube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the BotKube [GitHub issues](https://github.com/kubeshop/botkube/issues), BotKube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the BotKube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), BotKube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v014-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v014-release-notes.md index 66e95506..e907264d 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v014-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v014-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v014-release-notes Published Time: Oct 06, 2022 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,26 +17,25 @@ BotKube v0.14.0 addresses a number of community-suggested issues and adds some g ### Table of Contents -* [Dynamic notification setting changes](#dynamic-notification-setting-changes) -* [New Botkube Slack App](#new-botkube-slack-app) -* [Improved Help](#improved-help) -* [Persistent Settings](#persistent-settings) -* [Mattermost v7 Support](#mattermost-v7-support) -* [Bug Fixes](#bug-fixes) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [Dynamic notification setting changes](#dynamic-notification-setting-changes-2) +* [New Botkube Slack App](#new-botkube-slack-app-2) +* [Improved Help](#improved-help-2) +* [Persistent Settings](#persistent-settings-2) +* [Mattermost v7 Support](#mattermost-v7-support-2) +* [Bug Fixes](#bug-fixes-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -In the previous release of Botkube we promised to accelerate the pace of development and release. Well, here is another new release of Botkube, the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! +In the previous release of Botkube we promised to accelerate the pace of development and release. Well, here is another new release of Botkube, the most modern \[ChatOps tool for Kubernetes\](http://botkube.io)! BotKube v0.14.0 addresses a number of community-suggested issues and adds some great features to help you control the notification levels you receive from your Kubernetes clusters. -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +\*If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)\* In this release, we focused on improvements to the Botkube onboarding experience and notification tuning, persistent settings, and bug fixes. Some of the enhancements are currently Slack-specific using the additional interactive capabilities of the new Slack app. We plan to enhance other platforms with interactive features where technically feasible. -Dynamic notification setting changes ------------------------------------- +\## Dynamic notification setting changes We've received frequent feedback from users about the notification settings in Botkube. By default, Botkube monitors and shows all Kubernetes events in a configured communication channel. Previously, this could only be configured in the YAML configuration or during the Helm installation/upgrade. @@ -44,8 +43,7 @@ You can now also configure notification settings right from the Botkube interfac ![Image 2: Monitoring Kubernetes in Slack Channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb5b0c5188f8691d6b94_633ef84e656938a0ae571fc0_iRbu4PGydNxlrRVX0s4UpTz9QFyoUzE-l5Onxt_TW2YVakCXmxLkWfqXpgtJ7ecj136UrCZdgJGubxY_hdd2IEsiq8tyanu5ITCqu-fgUB0mP_tPZLGYtghrVHYx5uU3bhAi0H-lW6PKNIE24trMca9NWzPrlqHj-CYGLZqoA2CiKsNrr3i2TeFGfQ.png) -New Botkube Slack App ---------------------- +\## New Botkube Slack App We have created a brand new Botkube Slack app. The new app uses the Slack Socket Mode which provides a much more robust platform for interactivity and uses the new Slack permissions model for enhanced security. @@ -53,42 +51,37 @@ You will see many enhancements to Botkube in Slack in this and upcoming releases ![Image 3: Adding Kubernetes Alerts to Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb5b4e8002657684fc0e_633ef84e908df6431e4dd34d_SelrLZepl_wTwzOgctqA0qtliy6LH3SnfV8l8I2r6iMivCxRNdzhtdo9T5TvjNw9boEGHGD1jqnOcld_4B5MxTLxO01xwGq41cZ_SKhyFJLacFJFK7HMXOJ7lrP93TrM9M6CmhTpauoLdoG1D7bWLXYK-rryjw0SCVi5c-xXTh_eKe9JAB73QHI0Dg.png) -The installation process has changed for the new Slack app. See the [installation guide](https://botkube.io/docs/installation/socketslack) to get started with the enhanced interactive experience. +The installation process has changed for the new Slack app. See the \[installation guide\](https://botkube.io/docs/installation/socketslack) to get started with the enhanced interactive experience. -The [legacy Slack app](https://botkube.io/docs/installation/slack/) is still available, but will be deprecated in future versions. +The \[legacy Slack app\](https://botkube.io/docs/installation/slack/) is still available, but will be deprecated in future versions. -Improved Help -------------- +\## Improved Help The @Botkube help command has been enhanced when using the new Botkube Slack app. Run @Botkube help and you will see an interactive help message. You can click any of the buttons in the interactive help to run the commands, change settings, and more. This new, interactive help will enable new Botkube users to get up and running even faster. You can also send us feedback and access documentation and additional external help resources directly from the interactive help. -![Image 4: Botkube help suggestions for cluster management](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb5b82ec26bf25ce56ed_633ef850e5ef9f0d7d116776_EO0U7RPVKtnFJKGI9P-P-ra7xxTD04eyiGXF_khHkvFL8Age_YGzOa7YM3iTZZ6g9OfTmH_HgJYyJNEN75LDiP5jij3hsQjAF9z0nWw2xJ42aEJlskc_lNSh6XIiwwybgIl0TGxlJRgOSKkUmGbJv9d5NLGOW-x_iVWUj5GyPevaKTWieW5B1QmpCw.png) +![Image 4: Botkube help suggestions for cluster management ](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb5b82ec26bf25ce56ed_633ef850e5ef9f0d7d116776_EO0U7RPVKtnFJKGI9P-P-ra7xxTD04eyiGXF_khHkvFL8Age_YGzOa7YM3iTZZ6g9OfTmH_HgJYyJNEN75LDiP5jij3hsQjAF9z0nWw2xJ42aEJlskc_lNSh6XIiwwybgIl0TGxlJRgOSKkUmGbJv9d5NLGOW-x_iVWUj5GyPevaKTWieW5B1QmpCw.png) -Persistent Settings -------------------- +\## Persistent Settings Changes to settings made from the Botkube interface, such as notifier start/stop, notification level settings, and filter enable/disable now persist across Botkube restarts. In earlier versions, these settings would reset to the settings in the Botkube configuration file upon restarting the Botkube pod. -Mattermost v7 Support ---------------------- +\## Mattermost v7 Support -Botkube now supports Mattermost version 7.x! See the [installation guide for Mattermost](https://botkube.io/docs/installation/mattermost) to get started. +Botkube now supports Mattermost version 7.x! See the \[installation guide for Mattermost\](https://botkube.io/docs/installation/mattermost) to get started. -Bug Fixes ---------- +\## Bug Fixes -We have fixed several bugs in BotKube that were reported to us by users. We also spent some time refactoring code and increasing test coverage to improve the quality of BotKube. You can see the list of bug fixes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.14.0). +We have fixed several bugs in BotKube that were reported to us by users. We also spent some time refactoring code and increasing test coverage to improve the quality of BotKube. You can see the list of bug fixes in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v0.14.0). -We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about BotKube. Help us plan the BotKube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the BotKube [GitHub issues](https://github.com/kubeshop/botkube/issues), BotKube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the BotKube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), BotKube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v015-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v015-release-notes.md index 4090d314..1e00de3c 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v015-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v015-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v015-release-notes Published Time: Oct 24, 2022 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,25 +17,24 @@ Botkube v0.15.0 adds some great interactivity features aimed at application deve ### Table of Contents -* [Interactive kubectl](#interactive-kubectl) -* [Actionable Events](#actionable-events) -* [Output Filtering](#output-filtering) -* [Interactive Output Filtering](#interactive-output-filtering) -* [Bug Fixes](#bug-fixes) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [Interactive kubectl](#interactive-kubectl-2) +* [Actionable Events](#actionable-events-2) +* [Output Filtering](#output-filtering-2) +* [Interactive Output Filtering](#interactive-output-filtering-2) +* [Bug Fixes](#bug-fixes-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -We have an exciting early release of Botkube, just in time for KubeCon! We've been working as fast as we can to get some great new features ready to release. Here's v0.15.0 of Botkube, the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! +We have an exciting early release of Botkube, just in time for KubeCon! We've been working as fast as we can to get some great new features ready to release. Here's v0.15.0 of Botkube, the most modern \[ChatOps tool for Kubernetes\](http://botkube.io)! v0.15.0 adds some great interactivity features aimed at application developers who may not be Kubernetes experts. -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +\*If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)\* -In this release, we focused on interactivity with Botkube and the kubectl executor. Some of the enhancements are currently Slack-specific using the additional interactive capabilities of the [new Slack app](https://botkube.io/docs/installation/socketslack/). We plan to enhance other platforms with interactive features where technically feasible. +In this release, we focused on interactivity with Botkube and the kubectl executor. Some of the enhancements are currently Slack-specific using the additional interactive capabilities of the  \[new Slack app\](https://botkube.io/docs/installation/socketslack/). We plan to enhance other platforms with interactive features where technically feasible. -Interactive kubectl -------------------- +\## Interactive kubectl If you're using the new Slack app, you can now use kubectl interactively. Simply run @botkube kubectl (or use the alias k or kc) and you will see an interactive kubectl command builder. Select the verb (get, in this example) and you can select the object type to get. Once you have selected those, based on context, you can select a namespace and, optionally, a specific object to act on. Leaving out the object will generally show the list of available objects. Once you've made your selections, you can see a preview of the constructed command. You can also specify a filter string to apply to the output (more about that later!) and click Run command. The command runs and you can see the output in the channel as usual. @@ -43,40 +42,35 @@ This interactive kubectl tool is especially useful for developers and other user ![Image 2: Getting Log reports of Kubernetes reports into Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb442fdfd602024a9acd_6356bdf725fcea68c282c460_Y3wu_jOs-Ujqsrm-K_p5k9ixbT54IMlPnlOAyBDjuVsmkqOsLDkvcN2x3ji2mRn_CU0M-1ZAnp_lwDvLRhJ_eOTYodpOZAVhLHWxpjVfrTildXKVksWotV07CJHe9H7XRhRuxiVqJ2oTLEr7zr_vT6mRQQJKV_hD1EV65oMSXkUu2YYNFTXFdY6thg.png) -Actionable Events ------------------ +\## Actionable Events If you're receiving events in the new Slack app, you can now run contextual actions right from the event message. When a pod error comes in, for example, you can run kubectl commands that are relevant to the pod object right from the "Run command" drop-down box. The command runs automatically without any typing and returns the output in the channel. This makes it quick an easy to start investigating your alerts. ![Image 3: Run Kubectl commands directly from Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb44adbd3b434f7dcbd4_6356bdf7fd97a85f48b6f4eb_tGR4IkDUpaGrpMiF7u7VXfDpliSzKiF6H8nCPk-xGSddI9heXZx6sKKPVzpy6PZVsMZ4znb37qqyJRsZZ5dQsOmxcVYNu_sXDLGcoFg88Htm7xjt_8pSsXxM3EQd-yigz8RAkChykcJEHGz8gY2zMUJca4nhxcaJoMfGLI2ZmD9YkWHn_4WTgsNPMQ.png) -Output Filtering ----------------- +\## Output Filtering -You can now filter the output of any command you run with Botkube, on any platform. Simply run the command with the `--filter "string"` flag and you will only see the matching output. The filter flag does simple linewise string matching. Any line in the output with a matching string will be shown, lines without a match are discarded. +You can now filter the output of any command you run with Botkube, on any platform. Simply run the command with the \`--filter "string"\` flag and you will only see the matching output. The filter flag does simple linewise string matching. Any line in the output with a matching string will be shown, lines without a match are discarded. ![Image 4: Filtering Kubernetes logs for important alerts](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb44701e5f37a18b49db_6356bdf7f7a6792610d5e3ca_kjx3ejlR6Aaq2y9mENfRr81flF6H3HMljZWwFis4-1rkG6jyjEiPmYwfxeMfU-_NoEE0OLtGHkPUxM90PhuFauG-7iPdakZtFEdZcqkbxRXEcnfkQnErMqivmwplsPmem-JQL-2X71Kpmh5-NS8jZJMSkWtfd2hqinQhht64CWwIJxgV4SBI1uwKzQ.png) -Interactive Output Filtering ----------------------------- +\## Interactive Output Filtering -Output filtering is even easier if you're using the [new Slack app](https://botkube.io/docs/installation/socketslack/). When you run a command with a lot of output (>15 lines) you will see a Filter output box. If you type a string in the box and press enter, you will then see the output of the previous command filtered to only show lines matching the filter string. This is great for quickly sifting through logs of a problematic pod, for example. +Output filtering is even easier if you're using the \[new Slack app\](https://botkube.io/docs/installation/socketslack/). When you run a command with a lot of output (>15 lines) you will see a Filter output box. If you type a string in the box and press enter, you will then see the output of the previous command filtered to only show lines matching the filter string. This is great for quickly sifting through logs of a problematic pod, for example. ![Image 5: Searching through K8s logs](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb4426a735c2c230b1cb_6356bdf7b95716455530d559_eIDU6Illetw8nvSmjY2RF0DUfo480e8Cg-z9oo9TrZoUMc82X5QeBP_LDPjPAByGdJGZVjqAZAeFF9MphVVECeN-D1KbDxttppO-YtjdKo6dUvOhLo9b1TypQbvEX9vTnvcTJVKaC1kDxQHOdTWFqHFty4VUYZKoIgXBMmch6sNCQp2-7Mde9Zm78g.png) -Bug Fixes ---------- +\## Bug Fixes -We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.15.0). +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v0.15.0). -We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v016-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v016-release-notes.md index 642453b3..578b9a89 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v016-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v016-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v016-release-notes Published Time: Nov 28, 2022 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,28 +17,27 @@ Botkube v0.16.0 adds new event filter criteria allowing more granular event tuni ### Table of Contents -* [Filters](#filters) -* [Actions](#actions) -* [Legacy Slack App Deprecation](#legacy-slack-app-deprecation) -* [Bug Fixes](#bug-fixes) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [Filters](#filters-2) +* [Actions](#actions-2) +* [Legacy Slack App Deprecation](#legacy-slack-app-deprecation-2) +* [Bug Fixes](#bug-fixes-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -The latest version of Botkube is here, v0.16.0. Like peanut butter and chocolate, we've brought together two great parts of Botkube to make your life working with Kubernetes even easier. Botkube is the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! +The latest version of Botkube is here, v0.16.0. Like peanut butter and chocolate, we've brought together two great parts of Botkube to make your life working with Kubernetes even easier. Botkube is the most modern \[ChatOps tool for Kubernetes\](http://botkube.io)! We've addressed two things that have been frequently requested by users. First, we've added a more configurable filter system for events, meaning you can better filter what kind of events you want to see. Second, we've added actions, which can be configured to run commands automatically when an event is received and the command output is included with the event. These features work behind the scenes in the Botkube engine and are not specific to any communication platform. -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +\*If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)\* -Filters -------- +\## Filters Botkube now has additional event and resource constraints that you can use to filter events when you're defining sources. Sources define the event stream you want to watch and are then bound to a communication channel that will receive all matching events. In earlier versions of Botkube you could create sources based on Kubernetes resource type (e.g. Pod, ConfigMap, etc.), Namespace, and event type (e.g. Create, Delete, Error). This is useful for getting all events of a certain type in a namespace, for example, but in some cases still results in a lot of events that aren't relevant to all users in a channel. In addition, this doesn't provide the granular level of control needed to automatically act on events (see Actions below!). -In Botkube v0.16.0 we've added the following [event filter criteria](https://docs.botkube.io/next/configuration/source#kubernetes-resource-events): +In Botkube v0.16.0 we've added the following \[event filter criteria\](https://docs.botkube.io/next/configuration/source#kubernetes-resource-events): * **labels and annotations**: These filters simply have to (exactly) match the labels or annotations applied to a resource in order for the event to be logged. * **name**: This is a Regex field to match resource names. Events pertaining to any resource that matches the specified pattern will be logged. @@ -48,12 +47,11 @@ The new filter criteria have lots of great uses. You may have a suspect resource They also enable Botkube actions! -Actions -------- +\## Actions -Along with the new, more granular filter options, we have introduced [actions](https://docs.botkube.io/next/configuration/action) to Botkube. Actions allow you to automatically trigger a specific command when a matching event occurs. You can have more context for an event delivered directly to your communication channels with no additional manual work. +Along with the new, more granular filter options, we have introduced \[actions\](https://docs.botkube.io/next/configuration/action) to Botkube. Actions allow you to automatically trigger a specific command when a matching event occurs. You can have more context for an event delivered directly to your communication channels with no additional manual work. -Actions consist of two parts, the command and the source binding. The command is the specific executor command that will be run by the action. In v0.16.0 only the kubectl executor is available but more will be coming soon. The command itself is defined using the [Go template](https://golang.org/pkg/text/template/) syntax and allows you to pass the event metadata in order to build the command you need. The source binding specifies the event source that will trigger the action and uses the same sources that can be bound to communication channels. These sources use the event filters discussed earlier. +Actions consist of two parts, the command and the source binding. The command is the specific executor command that will be run by the action. In v0.16.0 only the kubectl executor is available but more will be coming soon. The command itself is defined using the \[Go template\](https://golang.org/pkg/text/template/) syntax and allows you to pass the event metadata in order to build the command you need. The source binding specifies the event source that will trigger the action and uses the same sources that can be bound to communication channels. These sources use the event filters discussed earlier. When a source is bound to both an action and a communication channel, the results of the action command are delivered to the communication channel along with the original event. Actions can be used to get information using the default read-only kubectl configuration. If you want, you can even configure the executor to allow other actions beyond those that are read-only. You could have Botkube restart a hang pod automatically, for example, and the results will be sent to the communication channel along with the event. @@ -66,25 +64,22 @@ There are two preconfigured actions included with Botkube to help you get starte * **describe-created resource**: This action runs the kubectl describe command against the resource associated with an event. It is bound to the default k8s-create-events source by default. When enabled, the command will be run each time a resource is created and the event is logged by the k8s-create-events source. The results of the kubectl describe command will then be attached to the event and delivered to any channel to which the k8s-create-events source is bound. * **show-logs-on-error**: This action runs kubectl logs against a resource. It is bound to the k8s-err-with-logs-events source by default. Any event captured by this source (triggered by error event types) will include the output of the kubectl logs command and be delivered to any communication channel to which it is bound. -Legacy Slack App Deprecation ----------------------------- +\## Legacy Slack App Deprecation -With the release of the [new Socket-mode Slack app](https://docs.botkube.io/installation/socketslack/) in [Botkube v0.14.0](https://botkube.io/blog/botkube-v014-release-notes#new-botkube-slack-app), the legacy Slack app is being deprecated. In the next version (v0.17.0), it will no longer be supported in the Botkube app and Botkube will need to be configured to use the new Slack app. +With the release of the \[new Socket-mode Slack app\](https://docs.botkube.io/installation/socketslack/) in \[Botkube v0.14.0\](https://botkube.io/blog/botkube-v014-release-notes#new-botkube-slack-app), the legacy Slack app is being deprecated. In the next version (v0.17.0), it will no longer be supported in the Botkube app and Botkube will need to be configured to use the new Slack app. -This change is happening because Botkube requires the socket-mode Slack app for the new [interactivity features](https://botkube.io/blog/botkube-v015-release-notes#interactive-kubectl) we introduced in Botkube v0.15.0. We plan to put all of our development efforts into this new app so we can continue to build great interactive features. In addition, Slack is recommending the migration from the legacy app type to socket mode as it introduces more granular permissions for bot users and OAuth tokens. This means you have more control over what Botkube and other Slack apps can do in your Slack workspace. +This change is happening because Botkube requires the socket-mode Slack app for the new \[interactivity features\](https://botkube.io/blog/botkube-v015-release-notes#interactive-kubectl) we introduced in Botkube v0.15.0. We plan to put all of our development efforts into this new app so we can continue to build great interactive features. In addition, Slack is recommending the migration from the legacy app type to socket mode as it introduces more granular permissions for bot users and OAuth tokens. This means you have more control over what Botkube and other Slack apps can do in your Slack workspace. -Slack will be unapproving the legacy Botkube Slack app in their Slack App Directory on December 21, 2022. After this date you will still be able to install the legacy Slack app using the Add to Slack button in the [legacy Slack installation](https://docs.botkube.io/0.15/installation/slack/) guide but you will receive a warning that the app is not authorized by the Slack App Directory. You will need to accept this warning to proceed if you want to keep using the legacy Slack app with Botkube v0.16 or earlier. +Slack will be unapproving the legacy Botkube Slack app in their Slack App Directory on December 21, 2022. After this date you will still be able to install the legacy Slack app using the Add to Slack button in the \[legacy Slack installation\](https://docs.botkube.io/0.15/installation/slack/) guide but you will receive a warning that the app is not authorized by the Slack App Directory. You will need to accept this warning to proceed if you want to keep using the legacy Slack app with Botkube v0.16 or earlier. -Bug Fixes ---------- +\## Bug Fixes -We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.16.0). +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v0.16.0). -We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v017-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v017-release-notes.md index 9733da71..7d260835 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v017-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v017-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v017-release-notes Published Time: Jan 09, 2023 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,25 +17,24 @@ Botkube v0.17.0 adds a plugin system and the first executor plugin allowing you ### Table of Contents -* [Plugin System](#plugin-system) -* [Helm Plugin](#helm-plugin) -* [Kubectl Prefix Required](#kubectl-prefix-required) -* [Botkube Command Tidying](#botkube-command-tidying) -* [Bug Fixes](#bug-fixes) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [Plugin System](#plugin-system-2) +* [Helm Plugin](#helm-plugin-2) +* [Kubectl Prefix Required](#kubectl-prefix-required-2) +* [Botkube Command Tidying](#botkube-command-tidying-2) +* [Bug Fixes](#bug-fixes-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -Botkube v0.17.0 is here, and it's huge! We've introduced a plugin system for sources and executors along with the first plugin for Helm. Botkube is the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! +Botkube v0.17.0 is here, and it's huge! We've introduced a plugin system for sources and executors along with the first plugin for Helm. Botkube is the most modern \[ChatOps tool for Kubernetes\](http://botkube.io)! This release is a major upgrade for Botkube. Kubernetes users are embracing all kinds of new tools and technologies for their application delivery workflows. GitOps and other DevOps tooling is changing the way Kubernetes is managed and monitored and automating a lot of the traditional processes. We wanted to go beyond the Kubernetes basics of monitoring the Kubernetes event stream and running kubectl commands. We decided to do that by implementing a plugin system that allows anyone to build a plugin for Botkube to add sources and executors. -With the addition of plugins in v0.17.0 combined with [actions](https://docs.botkube.io/next/configuration/action), which were added in [v0.16.0](https://botkube.io/blog/botkube-v016-release-notes), Botkube gains the ability to tie almost any tools together in the Kubernetes/CNCF ecosystem. Botkube is growing into an API automation engine that can listen for events from any source and respond with automated actions via any executor, all while reporting in to channels in your communication platform. +With the addition of plugins in v0.17.0 combined with \[actions\](https://docs.botkube.io/next/configuration/action), which were added in \[v0.16.0\](https://botkube.io/blog/botkube-v016-release-notes), Botkube gains the ability to tie almost any tools together in the Kubernetes/CNCF ecosystem. Botkube is growing into an API automation engine that can listen for events from any source and respond with automated actions via any executor, all while reporting in to channels in your communication platform. -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +\*If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)\* -Plugin System -------------- +\## Plugin System We have introduced a plugin system to Botkube in v0.17.0. This allows anyone to write new plugins for sources and executors and those plugins can be published for other Botkube users to install and use. We'll be leading the way with our own plugins, including the first executor plugin included in this release. @@ -43,37 +42,32 @@ Botkube has two ways of interacting with APIs and other tools, sources and execu We will be publishing documentation and tutorials on the Botkube plugin system soon so you can design and create your own plugins. We are also working on additional plugins including the first new source plugin for Prometheus. -Helm Plugin ------------ +\## Helm Plugin Along with the plugin system, we have introduced Helm as the first executor plugin for Botkube. The Helm plugin allows you to run Helm commands right from your communication platform. The Botkube Helm plugin provides a subset of the most useful Helm commands, you can list installed releases, rollback upgrades, and even install charts and uninstall releases. ![Image 2: Helm list in Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63bc34953fa404bdf9e9b66c_lJAFGnZKp4HY98JtcnteqhObKFnrZ1RoxmMHj8jPZ3XcCk3TWjekXD_hQJNrucD7JANNaYNyHh4E5uIHDl1SS3RWRisuAd8boq7fXK388pca9Tae_CN2k0ZdMy1_QTC9ZGVNmLPwECEzvNKSRai2p3d4CfAMoQjNrV0VJzsfnjkjipqdmCkwT0FkrOr3EA.png) -Imagine seeing an alert in your communications platform that a deployment was updated but something went wrong and the new release is failing. You can check the application pod logs, the helm release status, then run `@botkube helm rollback ` and fix the problem without ever leaving the chat! +Imagine seeing an alert in your communications platform that a deployment was updated but something went wrong and the new release is failing. You can check the application pod logs, the helm release status, then run \`@botkube helm rollback \` and fix the problem without ever leaving the chat! -See the [documentation](https://docs.botkube.io/next/configuration/executor/helm) for how to enable and use the Helm plugin. Much like the kubectl executor, Helm is disabled by default and when enabled, only allows read-only operations by default. You can enable write actions if you want, and you can even segregate those to specific, more restricted channels in your communication platform. +See the \[documentation\](https://docs.botkube.io/next/configuration/executor/helm) for how to enable and use the Helm plugin. Much like the kubectl executor, Helm is disabled by default and when enabled, only allows read-only operations by default. You can enable write actions if you want, and you can even segregate those to specific, more restricted channels in your communication platform. -Kubectl Prefix Required ------------------------ +\## Kubectl Prefix Required -The kubectl executor was the only executor available in older versions of Botkube. With the addition of the Botkube plugin system and additional executor plugins, kubectl has company. You now need to specify the executor when running commands with Botkube. For kubectl this would be something like `@botkube kubectl get pods`, and we've even added the aliases `@botkube k` and `@botkube kc` to save you some typing. For Helm it would look like `@botkube helm list`. We added a notification about this to the help message in Botkube v0.16.0, but as of v0.17.0 the implied kubectl (i.e. `@botkube get pods`) will no longer work. +The kubectl executor was the only executor available in older versions of Botkube. With the addition of the Botkube plugin system and additional executor plugins, kubectl has company. You now need to specify the executor when running commands with Botkube. For kubectl this would be something like \`@botkube kubectl get pods\`, and we've even added the aliases \`@botkube k\` and \`@botkube kc\` to save you some typing. For Helm it would look like \`@botkube helm list\`. We added a notification about this to the help message in Botkube v0.16.0, but as of v0.17.0 the implied kubectl (i.e. \`@botkube get pods\`) will no longer work. -Botkube Command Tidying ------------------------ +\## Botkube Command Tidying -There were some inconsistencies in how Botkube commands were structured in previous versions. We put some effort into unifying the command structure. Now all Botkube commands follow the same `@botkube ` structure. For example: `@botkube notifier start` is now changed to `@botkube enable notifications`. You can see a list of all of the changed commands in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.17.0). +There were some inconsistencies in how Botkube commands were structured in previous versions. We put some effort into unifying the command structure. Now all Botkube commands follow the same \`@botkube \` structure. For example: \`@botkube notifier start\` is now changed to \`@botkube enable notifications\`. You can see a list of all of the changed commands in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v0.17.0). -Bug Fixes ---------- +\## Bug Fixes -We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.17.0). +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v0.17.0). -We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-1-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-1-0-release-notes.md index 8aa32eba..e2f16441 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-1-0-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-1-0-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v1-1-0-release-notes Published Time: Jun 21, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,62 +17,59 @@ Our most recent realese of Botkube Cloud & Open Source brings important features ### Table of Contents -* [What is Botkube?](#what-is-botkube-) -* [Botkube Cloud with Cloud Slack Integration](#botkube-cloud-with-cloud-slack-integration) -* [Here are the key features of Botkube Cloud:](#here-are-the-key-features-of-botkube-cloud-) +* [What is Botkube?](#what-is-botkube--2) +* [Botkube Cloud with Cloud Slack Integration](#botkube-cloud-with-cloud-slack-integration-2) +* [Here are the key features of Botkube Cloud:](#here-are-the-key-features-of-botkube-cloud--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! We are excited to announce the latest release of Botkube, packed with new features and improvements to enhance your Kubernetes collaborative troubleshooting experience. In this release, we focused on two major areas: the introduction of Botkube Cloud with Cloud Slack integration and several bug fixes and enhancements for our open-source version. -What is Botkube? ----------------- +\## What is Botkube? Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. In this blog post, we'll give you an overview of all of Botkube’s newest features from the v1.1.0 release. -Botkube Cloud with Cloud Slack Integration ------------------------------------------- +\## Botkube Cloud with Cloud Slack Integration -With the growing popularity of cloud-based collaboration tools, we recognized the need to provide seamless integration with popular platforms like Slack. That's why we are thrilled to introduce the Botkube Cloud Slack app that integrates with the Botkube web app. This makes it easier than ever to receive Kubernetes alerts and notifications directly in your Slack workspace, and manage all of your Kubernetes clusters using a single Slack app. +With the growing popularity of cloud-based collaboration tools, we recognized the need to provide seamless integration with popular platforms like Slack. That's why we are thrilled to introduce the Botkube Cloud Slack app that integrates with the Botkube web app.  This makes it easier than ever to receive Kubernetes alerts and notifications directly in your Slack workspace, and manage all of your Kubernetes clusters using a single Slack app. -Here are the key features of Botkube Cloud: -------------------------------------------- +\## Here are the key features of Botkube Cloud: -### Easy Installation: +\### Easy Installation: Setting up Botkube Cloud is a breeze. Simply connect your Slack workspace to the Botkube app with the click of a button. -![Image 2: connect cluster in azure stack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64940fc9213e4ff10a1b4672_jaaGtHC2ScR0Nac7Bts5ZqRHFfLVeeZYeY4oQk6BN3mYKpUVH09FW11MtSqAA7UBZAc-YOWj38D9F54ahYH5xRE0oDlxc9K17hYum4BIp30W64-cZxHWJJZwKrv7mNYV9-yJ46QlBcSWkiiLgIzIt20.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64940fc9213e4ff10a1b4672_jaaGtHC2ScR0Nac7Bts5ZqRHFfLVeeZYeY4oQk6BN3mYKpUVH09FW11MtSqAA7UBZAc-YOWj38D9F54ahYH5xRE0oDlxc9K17hYum4BIp30W64-cZxHWJJZwKrv7mNYV9-yJ46QlBcSWkiiLgIzIt20.png) ‍ Invite the Botkube bot to the channels you want to use, and continue your configuration. Install Botkube into your Kubernetes clusters, and you're ready to manage your clusters from Slack. -![Image 3: a screenshot of the adwords dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64940fe3950f20abf76fa3ce_StacAl4VR0BYqGhlJz4HOSii505G8uK8S4WNAptRmeQ0zBU3u_tzqj6Cnwmi5fjYC1aR0ssDiaKbxrrwFatfr0nolxyrFGtBbHKnlNXHpqE2oLA4GwMNU_qc6ufRj-4c71QTo5fDSK0GkHhH31kQjlY.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64940fe3950f20abf76fa3ce_StacAl4VR0BYqGhlJz4HOSii505G8uK8S4WNAptRmeQ0zBU3u_tzqj6Cnwmi5fjYC1aR0ssDiaKbxrrwFatfr0nolxyrFGtBbHKnlNXHpqE2oLA4GwMNU_qc6ufRj-4c71QTo5fDSK0GkHhH31kQjlY.png) ‍ -### Multi-Cluster Support: +\### Multi-Cluster Support: Botkube Cloud allows you to manage multiple Kubernetes clusters using a single Slack app. The new Botkube Slack app uses our cloud services to route executor commands to the correct cluster. There's no longer a need for a separate Slack app per cluster. This centralized approach saves time and effort when managing alerts and notifications across different environments. -### Open Source Enhancements: +\### Open Source Enhancements: While the majority of our efforts went into Botkube Cloud, we also dedicated some time to improving the open-source version. In this release, we focused on bug fixes and enhancing security and usability. Here are some of the notable changes: -### Early Configuration Error Detection: +\### Early Configuration Error Detection: We understand the frustration of misconfigurations, so we added a new feature to provide users with immediate feedback when there is an error in their configuration. This helps users identify and rectify any issues quickly, ensuring smooth operation. -### Binary SHA Validation: +\### Binary SHA Validation: To improve security, we now validate the SHA of downloaded binaries. This ensures the integrity of the Botkube installation and protects against potential tampering or unauthorized modifications. -### Ignored Namespace Optimization: +\### Ignored Namespace Optimization: We addressed an issue where Botkube was spamming notifications about events in ignored namespaces. With the fix, you can now confidently ignore specific namespaces without being bombarded with unnecessary alerts. -### Mattermost Bug Fix: +\### Mattermost Bug Fix: Thanks to an external contribution, we resolved a bug related to Mattermost integration. The fix ensures smooth and reliable communication with Mattermost, enhancing the overall user experience. @@ -80,6 +77,6 @@ We would like to express our gratitude to the community for their ongoing suppor We encourage you to update your Botkube installation to benefit from these enhancements. Your feedback and suggestions are invaluable in shaping the future of Botkube. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-2-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-2-0-release-notes.md index 18db4c8a..e2dde0ff 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-2-0-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-2-0-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v1-2-0-release-notes Published Time: Jul 18, 2023 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,47 +17,43 @@ Our most recent realese of Botkube Cloud & Open Source brings important features ### Table of Contents -* [What is Botkube?](#what-is-botkube-) -* [Doctor Plugin](#doctor-plugin) -* [Botkube CLI for Installation](#botkube-cli-for-installation) -* [Botkube CLI for Easy Cloud Migration](#botkube-cli-for-easy-cloud-migration) -* [Exec Plugin](#exec-plugin) -* [Bug Fixes](#bug-fixes) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [What is Botkube?](#what-is-botkube--2) +* [Doctor Plugin](#doctor-plugin-2) +* [Botkube CLI for Installation](#botkube-cli-for-installation-2) +* [Botkube CLI for Easy Cloud Migration](#botkube-cli-for-easy-cloud-migration-2) +* [Exec Plugin](#exec-plugin-2) +* [Bug Fixes](#bug-fixes-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! Botkube is introducing the power of AI to Kubernetes troubleshooting! We are excited to announce the latest release of Botkube, packed with new features and improvements to enhance your Kubernetes collaborative troubleshooting experience. This release introduces -* Doctor, a ChatGPT plugin for Botkube +\* Doctor, a ChatGPT plugin for Botkube -* Botkube CLI for easier installation and simple migration to Botkube Cloud +\* Botkube CLI for easier installation and simple migration to Botkube Cloud -* Exec, a Botkube plugin that allows you to run any CLI command from your collaboration platform +\* Exec, a Botkube plugin that allows you to run any CLI command from your collaboration platform - -What is Botkube? ----------------- +\## What is Botkube? Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. In this blog post, we'll give you an overview of all of Botkube’s newest features from the v1.2.0 release. -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +\*If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)\* -Doctor Plugin -------------- +\## Doctor Plugin AI has been making incredible progress recently. Large Language Models power tools like ChatGPT to answer almost any question using the collective knowledge stored over years on the Internet. New applications for these tools are being recognized every day and now you can use the power of ChatGPT to troubleshoot your Kubernetes clusters with Botkube. -The Doctor plugin only requires an OpenAI API key to configure. The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/executor/doctor). Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. +The Doctor plugin only requires an OpenAI API key to configure. The easiest way to configure it is through the \[Botkube web app\](https://app.botkube.io) if your cluster is connected. Otherwise you can enable it in your \[Botkube YAML configuration\](https://docs.botkube.io/configuration/executor/doctor). Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. ‍ -![Image 2: a screenshot of a page with a number of different items on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b6a35168a1227527eb6501_Screenshot%202023-07-18%20at%2016.13.06.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b6a35168a1227527eb6501_Screenshot%202023-07-18%20at%2016.13.06.png) -Find out how to use the Doctor plugin in the [documentation](https://docs.botkube.io/usage/executor/doctor). +Find out how to use the Doctor plugin in the \[documentation\](https://docs.botkube.io/usage/executor/doctor). -Botkube CLI for Installation ----------------------------- +\## Botkube CLI for Installation We've introduced the Botkube CLI in order to streamline the installation process. Previous versions of Botkube were installed using Helm which was quick and easy but if misconfigurations or other errors occurred, they weren't so easy to find. Helm is great for unattended installations, but not very interactive. @@ -65,49 +61,44 @@ The new Botkube CLI still uses Helm in the background. The CLI ensures all of th ‍ -![Image 3: a screen shot of a computer screen with a black background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b6a3374b2b9c3d5500b9c2_Screenshot%202023-07-18%20at%2014.51.10.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b6a3374b2b9c3d5500b9c2_Screenshot%202023-07-18%20at%2014.51.10.png) Botkube can still be installed using the Helm chart alone if you want to perform automated installations with CI or GitOps tools. -It's easy to get started with the Botkube CLI, check out the [documentation](https://docs.botkube.io/cli/getting-started). +It's easy to get started with the Botkube CLI, check out the \[documentation\](https://docs.botkube.io/cli/getting-started). -Botkube CLI for Easy Cloud Migration ------------------------------------- +\## Botkube CLI for Easy Cloud Migration -[Botkube Cloud](https://app.botkube.io/) was released with Botkube v1.0 and enhanced with advanced Slack support in [v1.1.0](https://botkube.io/blog/botkube-v1-1-0-release-notes). Botkube Cloud provides quicker configuration and installation, multi-cluster configuration management, aggregated audit and event logs for all of your clusters, and advanced Slack multi-cluster executor routing. +\[Botkube Cloud\](https://app.botkube.io) was released with Botkube v1.0 and enhanced with advanced Slack support in \[v1.1.0\](https://botkube.io/blog/botkube-v1-1-0-release-notes). Botkube Cloud provides quicker configuration and installation, multi-cluster configuration management, aggregated audit and event logs for all of your clusters, and advanced Slack multi-cluster executor routing. If you are using Botkube in your cluster with local configuration and you didn't install via Botkube Cloud, you now have a simple on-ramp to the advanced Botkube Cloud services. Here's how to migrate your Botkube installation: -1. Create a [Botkube Cloud](https://app.botkube.io/) account - -2. Install the [Botkube CLI](https://docs.botkube.io/cli/getting-started) +1\. Create a \[Botkube Cloud\](https://app.botkube.io) account -3. Run botkube login to [authenticate](https://docs.botkube.io/cli/getting-started#first-use) your CLI +2\. Install the \[Botkube CLI\](https://docs.botkube.io/cli/getting-started) -4. Run botkube migrate to [move your configuration](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to the cloud and connect your Botkube installation automatically +3\. Run botkube login to \[authenticate\](https://docs.botkube.io/cli/getting-started#first-use) your CLI +4\. Run botkube migrate to \[move your configuration\](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to the cloud and connect your Botkube installation automatically Botkube Cloud is free to use for a single cluster up to 20 nodes. For multi-cluster management, larger clusters (>20 nodes), and advanced Slack functionality, a Botkube Cloud subscription is required. -Exec Plugin ------------ +\## Exec Plugin The Exec plugin is the result of an experiment to find out how flexible the Botkube plugin system really can be. Exec allows you to install and run any CLI directly from your communication platform with Botkube. It also lets you create your own interactive Slack interface for those CLIs. The Exec plugin is not meant as a replacement for dedicated executor plugins, but you can use it to get acquainted with the plugin system, to quickly test out a new CLI in Botkube, or in a lab environment. -Check out the [installation](https://docs.botkube.io/configuration/executor/exec) and [usage](https://docs.botkube.io/usage/executor/exec) documentation for details on how to get started. +Check out the \[installation\](https://docs.botkube.io/configuration/executor/exec) and \[usage\](https://docs.botkube.io/usage/executor/exec) documentation for details on how to get started. -Bug Fixes ---------- +\## Bug Fixes -We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v1.2.0). +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v1.2.0). -We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-3-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-3-0-release-notes.md index cf3f8a1d..04aaaa55 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-3-0-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-3-0-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v1-3-0-release-notes Published Time: Aug 15, 2023 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,13 +17,13 @@ Our most recent release of Botkube Cloud & Open Source brings important features ### Table of Contents -* [What is Botkube?](#what-is-botkube-) -* [Keptn Source Plugin](#keptn-source-plugin) -* [Flux CD Executor Plugin](#flux-cd-executor-plugin) -* [GitHub Events Source Plugin](#github-events-source-plugin) -* [Slack message reactions](#slack-message-reactions) -* [Bug Fixes](#bug-fixes) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [What is Botkube?](#what-is-botkube--2) +* [Keptn Source Plugin](#keptn-source-plugin-2) +* [Flux CD Executor Plugin](#flux-cd-executor-plugin-2) +* [GitHub Events Source Plugin](#github-events-source-plugin-2) +* [Slack message reactions](#slack-message-reactions-2) +* [Bug Fixes](#bug-fixes-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -31,70 +31,70 @@ Our most recent release of Botkube Cloud & Open Source brings important features The Botkube plugin ecosystem is expanding! We are excited to announce the latest release of Botkube, packed with new features and improvements to enhance your Kubernetes collaborative troubleshooting experience. This release introduces: -* GitHub source plugin +\* GitHub source plugin -* Keptn source plugin +\* Keptn source plugin -* Flux CD executor plugin +\* Flux CD executor plugin -* Slack message reactions +\* Slack message reactions +As usual, all of these plugins can be easily configured in \[Botkube Cloud\](https://app.botkube.io) or via \[manual YAML configuration\](https://docs.botkube.io/configuration/) for the open source Botkube engine. -As usual, all of these plugins can be easily configured in [Botkube Cloud](https://app.botkube.io/) or via [manual YAML configuration](https://docs.botkube.io/configuration/) for the open source Botkube engine. +\[Botkube Actions\](https://docs.botkube.io/configuration/action) also allow you to automate any of the Botkube plugins. That means that any source plugin can trigger a command in any executor plugin. Botkube is the automation glue that can tie together all of the tools you use both inside and outside of your Kubernetes cluster. We have more details coming up in future blog posts on how to use Botkube to manage and monitor your GitOps workflows with diverse tools. -[Botkube Actions](https://docs.botkube.io/configuration/action) also allow you to automate any of the Botkube plugins. That means that any source plugin can trigger a command in any executor plugin. Botkube is the automation glue that can tie together all of the tools you use both inside and outside of your Kubernetes cluster. We have more details coming up in future blog posts on how to use Botkube to manage and monitor your GitOps workflows with diverse tools. - -What is Botkube? ----------------- +\## What is Botkube? Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. In this blog post, we'll give you an overview of all of Botkube’s newest features from the v1.2.0 release. -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +\*If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)\* -Keptn Source Plugin -------------------- +\## Keptn Source Plugin The Keptn source plugin is the latest edition to Botkube’s source plugin CNCF tool suite. By incorporating Keptn, you can effortlessly orchestrate load tests and validate the results. To simplify the understanding of Keptn's synergy with Botkube, we'll take a hands-on approach. We'll deploy a straightforward task using Keptn, and then seamlessly capture Keptn events through Botkube. The result? Notifications delivered straight to your chosen communication platform, such as Slack. This integration not only enhances your insight into the deployment process but also streamlines your workflow.With this exciting update, we're merging the capabilities of Keptn and Botkube to streamline your workflow, enhance collaboration, and ensure that your deployments are more efficient than ever before. -Find out how to use the Keptn source plugin in the [documentation](https://docs.botkube.io/configuration/source/keptn). +Find out how to use the Keptn source plugin in the \[documentation\](https://docs.botkube.io/configuration/source/keptn). -You can read all about how we developed the Keptn source plugin (and how to create your own source plugins) in this [Botkube blog post](https://botkube.io/blog/implementing-your-own-botkube-plugin-a-real-life-use-case). +You can read all about how we developed the Keptn source plugin (and how to create your own source plugins) in this \[Botkube blog post\](https://botkube.io/blog/implementing-your-own-botkube-plugin-a-real-life-use-case). -Flux CD Executor Plugin ------------------------ +\## Flux CD Executor Plugin -Introducing the New Flux Executor Plugin The Flux executor plugin marks a new approach to Botkube executor plugins. It doesn't just offer the convenience of running Flux CLI commands directly from communications platforms like Slack or Discord; it goes further by incorporating interactivity, such as tables and more. +Introducing the New Flux Executor Plugin +The Flux executor plugin marks a new approach to Botkube executor plugins. It doesn't just offer the convenience of running Flux CLI commands directly from communications platforms like Slack or Discord; it goes further by incorporating interactivity, such as tables and more. -But the true game-changer is the integration of a practical, real-world use-case right from the start. With the Botkube Flux executor, executing a single command can initiate a thorough comparison between a specific pull request and the current state of your cluster. For example: Sample code This command streamlines tasks like: Automatically identifying the related GitHub repository linked to the provided kustomization. Effortlessly cloning the repository. Checking out the specified pull request. Seamlessly contrasting the changes in the pull request against the cluster's present state. Gone are the days of laborious manual processes.The Botkube Flux executor helps to eliminate these complexities out of the GitOps workflow. +But the true game-changer is the integration of a practical, real-world use-case right from the start. With the Botkube Flux executor, executing a single command can initiate a thorough comparison between a specific pull request and the current state of your cluster. For example: +Sample code +This command streamlines tasks like: +Automatically identifying the related GitHub repository linked to the provided kustomization. +Effortlessly cloning the repository. +Checking out the specified pull request. +Seamlessly contrasting the changes in the pull request against the cluster's present state. +Gone are the days of laborious manual processes.The Botkube Flux executor helps to eliminate these complexities out of the GitOps workflow. -Find out how to use the Flux CD executor plugin in the [documentation](https://docs.botkube.io/configuration/executor/flux). +Find out how to use the Flux CD executor plugin in the \[documentation\](https://docs.botkube.io/configuration/executor/flux). -GitHub Events Source Plugin ---------------------------- +\## GitHub Events Source Plugin The GitHub Events source plugin is the first Botkube plugin that we have developed that works outside of the Kubernetes cluster. This plugin allows you to stream events from the GitHub repositories you select via Botkube to your collaboration platform. Botkube Actions make this plugin especially exciting. You can use the GitHub plugin to watch for pull requests that make application or configuration changes to your environment and trigger other tools, like GitOps reviews or security scans. -Find out how to use the GitHub Events source plugin in the [documentation](https://docs.botkube.io/configuration/source/github-events). +Find out how to use the GitHub Events source plugin in the \[documentation\](https://docs.botkube.io/configuration/source/github-events). -Slack message reactions ------------------------ +\## Slack message reactions Botkube has introduced a lot of new executor plugins to help you troubleshoot and manage your Kubernetes clusters. Some commands take some time to process in the background and until now, you couldn't see if the command had completed, you just had to wait for a response. We have introduced emoji reactions to executor requests that show the state of the command. If you see 👀, the command is still running. Once the command is complete, the reaction automatically changes to ✅. -![Image 2: a screenshot of a screen showing a number of people](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64db6cd0c67e3e749437884e_Screenshot%202023-08-15%20at%2014.17.12.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64db6cd0c67e3e749437884e_Screenshot%202023-08-15%20at%2014.17.12.png) -Note that if you are using Botkube already, you need to add the `reactions:write` scope to the Bot Token. If you are using the Botkube [Cloud Slack](https://docs.botkube.io/installation/slack/cloud-slack) app, you can update directly from the Botkube Cloud web app. If you are using the Botkube [Socket Slack](https://docs.botkube.io/installation/slack/socket-slack/self-hosted) app, you need to go to the [Slack App console](https://api.slack.com/apps/), select your Botkube app, navigate to OAuth & Permissions, and add the `reactions:write` scope to the Bot Token configuration. You then need to reinstall the Slack app from the console. +Note that if you are using Botkube already, you need to add the \`reactions:write\` scope to the Bot Token. If you are using the Botkube \[Cloud Slack\](https://docs.botkube.io/installation/slack/cloud-slack) app, you can update directly from the Botkube Cloud web app. If you are using the Botkube \[Socket Slack\](https://docs.botkube.io/installation/slack/socket-slack/self-hosted) app, you need to go to the \[Slack App console\](https://api.slack.com/apps/), select your Botkube app, navigate to OAuth & Permissions, and add the \`reactions:write\` scope to the Bot Token configuration. You then need to reinstall the Slack app from the console. -Bug Fixes ---------- +\## Bug Fixes -We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v1.3.0). +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v1.3.0). -We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-4-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-4-0-release-notes.md index 2b956404..df04c517 100644 --- a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-4-0-release-notes.md +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-4-0-release-notes.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/botkube-v1-4-0-release-notes Published Time: Sep 19, 2023 Markdown Content: -![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -17,14 +17,14 @@ Our most recent release of Botkube brings important features that help with Kube ### Table of Contents -* [What is Botkube?](#what-is-botkube-) -* [Argo CD Source Plugin](#argo-cd-source-plugin) -* [Mattermost Bot Account Support](#mattermost-bot-account-support) -* [Custom OpenAI API Parameters for the Doctor Plugin](#custom-openai-api-parameters-for-the-doctor-plugin) -* [Elasticsearch V8 Support](#elasticsearch-v8-support) -* [Restart Crashed Plugins](#restart-crashed-plugins) -* [Bug Fixes](#bug-fixes) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [What is Botkube?](#what-is-botkube--2) +* [Argo CD Source Plugin](#argo-cd-source-plugin-2) +* [Mattermost Bot Account Support](#mattermost-bot-account-support-2) +* [Custom OpenAI API Parameters for the Doctor Plugin](#custom-openai-api-parameters-for-the-doctor-plugin-2) +* [Elasticsearch V8 Support](#elasticsearch-v8-support-2) +* [Restart Crashed Plugins](#restart-crashed-plugins-2) +* [Bug Fixes](#bug-fixes-2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -32,73 +32,64 @@ Our most recent release of Botkube brings important features that help with Kube Botkube continues to enhance your GitOps experience by adding support for Argo CD via a new source plugin! We are excited to announce the latest release of Botkube, packed with new features and improvements to enhance your Kubernetes collaborative troubleshooting experience. This release introduces: -* [Argo CD source plugin](https://docs.botkube.io/configuration/source/argocd) +\* \[Argo CD source plugin\](https://docs.botkube.io/configuration/source/argocd) -* [Mattermost Bot Account support](https://docs.botkube.io/installation/mattermost/self-hosted) +\* \[Mattermost Bot Account support\](https://docs.botkube.io/installation/mattermost/self-hosted) -* [Custom OpenAI API parameters for the Doctor plugin](https://docs.botkube.io/configuration/executor/doctor) +\* \[Custom OpenAI API parameters for the Doctor plugin\](https://docs.botkube.io/configuration/executor/doctor) -* [Elasticsearch V8 support](https://docs.botkube.io/installation/elasticsearch/self-hosted)) +\* \[Elasticsearch V8 support\](https://docs.botkube.io/installation/elasticsearch/self-hosted)) -* Restart crashed plugins +\* Restart crashed plugins +As usual, plugins can be easily configured in \[Botkube Cloud\](https://app.botkube.io) or via \[manual YAML configuration\](https://docs.botkube.io/configuration/) for the open source Botkube engine. -As usual, plugins can be easily configured in [Botkube Cloud](https://app.botkube.io/) or via [manual YAML configuration](https://docs.botkube.io/configuration/) for the open source Botkube engine. +\[Botkube Actions\](https://docs.botkube.io/configuration/action) also allow you to automate any of the Botkube plugins. That means that any source plugin can trigger a command in any executor plugin. Botkube is the automation glue that can tie together all of the tools you use both inside and outside of your Kubernetes cluster. We have more details coming up in future blog posts on how to use Botkube to manage and monitor your GitOps workflows with diverse tools. -[Botkube Actions](https://docs.botkube.io/configuration/action) also allow you to automate any of the Botkube plugins. That means that any source plugin can trigger a command in any executor plugin. Botkube is the automation glue that can tie together all of the tools you use both inside and outside of your Kubernetes cluster. We have more details coming up in future blog posts on how to use Botkube to manage and monitor your GitOps workflows with diverse tools. +\## What is Botkube? -What is Botkube? ----------------- +\[Botkube\](http://app.botkube.io) is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. -[Botkube](http://app.botkube.io/) is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. +\*If you have any feature requests or bug reports, reach out to us on \[Slack\](http://join.botkube.io) or submit a \[Github issue\](https://github.com/kubeshop/botkube/issues)\* -_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ +\## Argo CD Source Plugin -Argo CD Source Plugin ---------------------- +The \[Argo CD source plugin\](https://docs.botkube.io/configuration/source/argocd) is another addition to Botkube's \[support for GitOps processes and lifecycles\](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube). The Argo CD source plugin allows users to receive and interact with crucial real time notifications when deploying applications in production -- how the deployment is progressing, a health check on the deployment, and more — all directly into communication platforms like Slack, Mattermost, MS Teams, and Discord. While Argo CD does provide a native notification system in some of these platforms, the set-up process can be cumbersome and difficult with many manual steps to get up and running. Botkube’s plug-and-play-style native Argo CD plugin can be configured in minutes directly in \[Botkube’s web interface\](http://app.botkube.io). -The [Argo CD source plugin](https://docs.botkube.io/configuration/source/argocd) is another addition to Botkube's [support for GitOps processes and lifecycles](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube). The Argo CD source plugin allows users to receive and interact with crucial real time notifications when deploying applications in production -- how the deployment is progressing, a health check on the deployment, and more — all directly into communication platforms like Slack, Mattermost, MS Teams, and Discord. While Argo CD does provide a native notification system in some of these platforms, the set-up process can be cumbersome and difficult with many manual steps to get up and running. Botkube’s plug-and-play-style native Argo CD plugin can be configured in minutes directly in [Botkube’s web interface](http://app.botkube.io/). +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6509a59c63441b36226ea80d_argocd-events-e6eabb1f581e9822020d55461539bfcd.png) -![Image 2: a screenshot of a screen showing the status of an application](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6509a59c63441b36226ea80d_argocd-events-e6eabb1f581e9822020d55461539bfcd.png) +You can get started with the Argo CD with the \[Documentation\](https://docs.botkube.io/configuration/source/argocd). -You can get started with the Argo CD with the [Documentation](https://docs.botkube.io/configuration/source/argocd). +\## Mattermost Bot Account Support -Mattermost Bot Account Support ------------------------------- +Botkube now supports running as a \[Mattermost bot account\](https://developers.mattermost.com/integrate/reference/bot-accounts/). Mattermost bot accounts have more limited privileges, do not consume a user license, and are not associated with a specific user so there's no concern about Botkube continuing to run if someone leaves your organization. -Botkube now supports running as a [Mattermost bot account](https://developers.mattermost.com/integrate/reference/bot-accounts/). Mattermost bot accounts have more limited privileges, do not consume a user license, and are not associated with a specific user so there's no concern about Botkube continuing to run if someone leaves your organization. +Get started with Mattermost and Botkube with the \[documentation\](https://docs.botkube.io/installation/mattermost/self-hosted). -Get started with Mattermost and Botkube with the [documentation](https://docs.botkube.io/installation/mattermost/self-hosted). +\## Custom OpenAI API Parameters for the Doctor Plugin -Custom OpenAI API Parameters for the Doctor Plugin --------------------------------------------------- +The Botkube Doctor plugin now supports configurable alternate base URLs for the OpenAI API. This means you can use other OpenAI-compatible APIs with the doctor plugin. You can use Azure OpenAI Service, 3rd party Llama models, OpenAI proxies, and more. -The Botkube Doctor plugin now supports configurable alternate base URLs for the OpenAI API. This means you can use other OpenAI-compatible APIs with the doctor plugin. You can use Azure OpenAI Service, 3rd party Llama models, OpenAI proxies, and more. +Find out how to configure custom parameters for Doctor in the \[documentation\](https://docs.botkube.io/configuration/executor/doctor). -Find out how to configure custom parameters for Doctor in the [documentation](https://docs.botkube.io/configuration/executor/doctor). - -Elasticsearch V8 Support ------------------------- +\## Elasticsearch V8 Support Botkube now supports Elasticsearch V8 as a platform. If you're using the latest and greatest version of Elasticsearch, Botkube has you covered and will happily send your events over. -Get set up with Elasticsearch with the [documentation](https://docs.botkube.io/installation/elasticsearch/self-hosted). +Get set up with Elasticsearch with the \[documentation\](https://docs.botkube.io/installation/elasticsearch/self-hosted). -Restart Crashed Plugins ------------------------ +## Restart Crashed Plugins We have added advanced logic to the Botkube plugin system in order to detect plugins that might have crashed and automatically restart them. This makes Botkube more reliable as a core part of your observability and troubleshooting platform. Plugin crashes are logged to the Botkube pod log and will only attempt to restart a fixed number of times in order to avoid continuous restart loops. -Bug Fixes ---------- +\## Bug Fixes -We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v1.4.0). +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the \[changelog\](https://github.com/kubeshop/botkube/releases/tag/v1.4.0). -We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a \[GitHub issue\](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. -Feedback - We’d Love to Hear From You! --------------------------------------- +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. -You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can talk to us in the Botkube \[GitHub issues\](https://github.com/kubeshop/botkube/issues), Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins.md b/hack/assistant-setup/content/botkube.io__blog__build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins.md index 67d0731f..33c23050 100644 --- a/hack/assistant-setup/content/botkube.io__blog__build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins.md +++ b/hack/assistant-setup/content/botkube.io__blog__build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins.md @@ -5,68 +5,45 @@ URL Source: https://botkube.io/blog/build-a-github-issues-reporter-for-failing-k Published Time: Feb 01, 2023 Markdown Content: -![Image 1: a man with his arms crossed in front of a black background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ec19d99029e7cfb5bd_n-vUM0Lz3yXA1WLyfxEMUxXQpUDEiKv9EmEe4NnCbCI.png) - -Mateusz Szostok - -Software Engineer - -Botkube - -Botkube 0.17 introduces plugin support. In this guide you will learn how to create your own Botkube executor plugin to build a GitHub issues reporter for Kubernetes apps that are failing. - -### Table of Contents - -* [Goal](#goal) -* [Prerequisites](#prerequisites) -* [What's under the hood](#what-s-under-the-hood) -* [Step-By-Step Instructions](#step-by-step-instructions) -* [Summary](#summary) -* [How can I get involved?](#how-can-i-get-involved-) - -#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! - -Botkube gives you fast and simple access to your clusters right from your communication platform. It does that by sending [actionable notifications](https://docs.botkube.io/configuration/action) (via [_sources_](https://docs.botkube.io/architecture/#source)) and allowing you to run _kubectl_ and _helm_ commands (via [_executors_](https://docs.botkube.io/architecture/#executor)) straight from the platform (Slack, Discord, Microsoft Teams and Mattermost). +Botkube gives you fast and simple access to your clusters right from your communication platform. It does that by sending \[actionable notifications\](https://docs.botkube.io/configuration/action) (via \[_sources\](https://docs.botkube.io/architecture/#source)_) and allowing you to run _kubectl_ and _helm_ commands (via \[_executors\](https://docs.botkube.io/architecture/#executor)_) straight from the platform (Slack, Discord, Microsoft Teams and Mattermost). In the recent Botkube 0.17 release, we took it to the next level by giving you an easy way to bring your own tools to a chat window! In this blog post, you will learn how to develop your own executor plugin to fill the gap in your daily workflow. -Goal ----- +\## Goal To make it simple but functional, I will show you how to develop an executor that creates an issue for failing Kubernetes resources such as Job, Deployment, StatefulSet, and Pod. -![Image 2: Github reporter bot for updating Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d810824fa1ec68968b8ee2_gh-demo.gif) +![Image 1: Github reporter bot for updating Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d810824fa1ec68968b8ee2_gh-demo.gif) GitHub executor demo -### Why it's worth it +\### Why it's worth it With just a few lines of code, we will automate the process of creating a GitHub issue that out-of-the box contains Kubernetes-specific information useful for further debugging. All of that, directly from Slack, Discord, Mattermost, or MS Teams! No need for connecting to your cluster in your terminal, installing and running _kubectl_ commands and copy-pasting fetched details into your browser. -Instead, you will be able to type **_@Botkube gh create issue pod/foo_** from any device that has access to your chat, including mobile apps. +Instead, you will be able to type \*\*_@Botkube gh create issue pod/foo\*\*_ from any device that has access to your chat, including mobile apps. -Prerequisites -------------- +\## Prerequisites -* Access to a Kubernetes cluster**‍**‍ +\- Access to a Kubernetes cluster**‍**‍ To create a local cluster for testing purposes using [`k3d`](https://k3d.io/v5.0.1/#installation), run: -* [Botkube installed and configured](https://docs.botkube.io/)[](https://docs.botkube.io/installation/) * Basic understanding of the Go language[‍](https://go.dev/doc/install) +\- \[Botkube installed and configured[\](https://docs.botkube.io)](https://docs.botkube.io/installation/) -* [Go](https://go.dev/doc/install) at least 1.18 +\- Basic understanding of the Go language[‍](https://go.dev/doc/install) +\- \[Go\](https://go.dev/doc/install) at least 1.18 ‍ -What's under the hood ---------------------- +\## What's under the hood To understand better what we will develop, I want to give you a bigger picture of the Botkube plugin system. The animation below focuses only on the executor part, but it's almost the same for sources. -![Image 3: Custom built plugin system for Kubernetes tools](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d811d4762a4de9804bc215_arch-executor-plugin.gif) +![Image 2: Custom built plugin system for Kubernetes tools](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d811d4762a4de9804bc215_arch-executor-plugin.gif) Botkube Plugin System @@ -76,43 +53,39 @@ The plugin manager consumes user's configuration, and downloads and starts **onl Such approach allows us to decouple the Botkube core and its extensions. Thanks to that, we can: -* Avoid having the Botkube core crash if a given plugin malfunctions - -* Write extensions in any language as gRPC is used +\- Avoid having the Botkube core crash if a given plugin malfunctions +\- Write extensions in any language as gRPC is used From the end-user's perspective, you can: -* Specify and use multiple plugin repositories at the same time +\- Specify and use multiple plugin repositories at the same time -* Enable different plugin versions within the same Botkube version +\- Enable different plugin versions within the same Botkube version +To learn more, see \[Botkube architecture\](https://docs.botkube.io/architecture/). -To learn more, see [Botkube architecture](https://docs.botkube.io/architecture/). +\## Step-By-Step Instructions -Step-By-Step Instructions -------------------------- +To quickly onboard you to Botkube plugins, we maintain the \[kubeshop/botkube-plugins-template\](https://github.com/kubeshop/botkube-plugins-template) repository that has all batteries included. Our first step is to bootstrap your own GitHub repository. -To quickly onboard you to Botkube plugins, we maintain the [kubeshop/botkube-plugins-template](https://github.com/kubeshop/botkube-plugins-template) repository that has all batteries included. Our first step is to bootstrap your own GitHub repository. +To check out the entire code, visit the \[Botkube GitHub repository\](https://github.com/kubeshop/botkube/tree/main/cmd/executor/gh/main.go). -To check out the entire code, visit the [Botkube GitHub repository](https://github.com/kubeshop/botkube/tree/main/cmd/executor/gh/main.go). +\### Repository setup -### Repository setup - -1. Navigate to [botkube-plugins-template](https://github.com/kubeshop/botkube-plugins-template). - -2. Click **Use this template**, and then **Create a new repository**. +1\. Navigate to \[botkube-plugins-template\](https://github.com/kubeshop/botkube-plugins-template). +2\. Click \*\*Use this template\*\*, and then \*\*Create a new repository\*\*. ‍ -![Image 4: github pull request automation](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d812e448eb8e82ad2d44d9_tpl-repo.png) +![Image 3: github pull request automation](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d812e448eb8e82ad2d44d9_tpl-repo.png) By doing so, you will create your own plugin repository with a single commit. -3. Clone your repository locally:_‍_ +3\. Clone your repository locally:_‍_ -4. Create and push a new tag to perform the initial release: +4\. Create and push a new tag to perform the initial release: After a few minutes, you should see a new GitHub release. @@ -124,33 +97,34 @@ In this blog post, we use only GitHub releases that work out-of-the-box. Releasi ‍ -### Develop GitHub executor +\### Develop GitHub executor To make the code-snippets more readable, I skipped the error handling. However, it will be useful if you will add error handling for the final implementation. You can check the full [gh source-code](https://github.com/kubeshop/botkube/tree/main/cmd/executor/gh/main.go) for the reference. ‍ -1. Create a `cmd/gh/main.go` file with the following template: +1\. Create a \`cmd/gh/main.go\` file with the following template: -
package main
import (
"context"
"github.com/hashicorp/go-plugin"
"github.com/kubeshop/botkube/pkg/api"
"github.com/kubeshop/botkube/pkg/api/executor"
)
const (
pluginName = "gh"
)
// GHExecutor implements the Botkube executor plugin interface.
type GHExecutor struct{}
// Metadata returns details about the GitHub plugin.
func (*GHExecutor) Metadata(context.Context) (api.MetadataOutput, error) {
return api.MetadataOutput{
Version: "v1.0.0",
Description: "GH creates an issue on GitHub for a related Kubernetes resource.",
}, nil
}
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
return executor.ExecuteOutput{
Data: "Aloha! 🏄",
}, nil
}
func main() {
executor.Serve(map[string]plugin.Plugin{
pluginName: &executor.Plugin{
Executor: &GHExecutor{},
},
})
}
This template code imports required packages and registers `GHExecutor` as the gRPC plugin. Our `GHExecutor` service already implements the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) contract. As you can see, we require **only 2 methods**. +
package main
import (
"context"
"github.com/hashicorp/go-plugin"
"github.com/kubeshop/botkube/pkg/api"
"github.com/kubeshop/botkube/pkg/api/executor"
)
const (
pluginName = "gh"
)
// GHExecutor implements the Botkube executor plugin interface.
type GHExecutor struct{}
// Metadata returns details about the GitHub plugin.
func (*GHExecutor) Metadata(context.Context) (api.MetadataOutput, error) {
return api.MetadataOutput{
Version: "v1.0.0",
Description: "GH creates an issue on GitHub for a related Kubernetes resource.",
}, nil
}
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
return executor.ExecuteOutput{
Data: "Aloha! 🏄",
}, nil
}
func main() {
executor.Serve(map[string]plugin.Plugin{
pluginName: &executor.Plugin{
Executor: &GHExecutor{},
},
})
}
-\- The `Metadata` method returns basic information about your plugin. This data is used when the plugin index is [generated in an automated way](https://docs.botkube.io/plugin/repo). +This template code imports required packages and registers `GHExecutor` as the gRPC plugin. Our `GHExecutor` service already implements the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) contract. As you can see, we require **only 2 methods**. \- The `Execute` method is the heart of your executor plugin. This method runs your business logic and returns the output as plaintext. Next, the Botkube core sends back the response to a given communication platform. ‍ -2. To download the imported dependencies, in your terminal, run: +2\. To download the imported dependencies, in your terminal, run: ‍ -3. Great! At this stage, you already have a functional Botkube executor plugin. However, for now, it only responds with a hard-coded "Aloha!" greeting. But it can do that already on all supported communication platforms. ‍ +3\. Great! At this stage, you already have a functional Botkube executor plugin. However, for now, it only responds with a hard-coded "Aloha!" greeting. But it can do that already on all supported communication platforms. +‍ -![Image 5: Getting GitHub reports in Slack about repo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d814cf12ac7e2d4a40d002_demo-gh-aloha.gif) +![Image 4: Getting GitHub reports in Slack about repo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d814cf12ac7e2d4a40d002_demo-gh-aloha.gif) Don't worry, in the next steps, we will implement our business logic. -4. Add support for user configuration: +4\. Add support for user configuration:
package main
import (
"context"
"fmt"
"github.com/kubeshop/botkube/pkg/api/executor"
"github.com/kubeshop/botkube/pkg/pluginx"
)
// Config holds the GitHub executor configuration.
type Config struct {
GitHub struct {
Token string `yaml:"token"`
Repository string `yaml:"repository"`
IssueTemplate string `yaml:"issueTemplate"`
} `yaml:"gitHub"`
}
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
var cfg Config
pluginx.MergeExecutorConfigs(in.Configs, &cfg)
}
@@ -162,9 +136,11 @@ In our case, we need to have a GitHub token, a GitHub repository where the issue ‍**‍**‍ -5. Let's implement command parsing to properly understand command syntax: +5\. Let's implement command parsing to properly understand command syntax: -Our goal is to parse `gh create issue KIND/NAME [-n, --namespace]` There are a lot of great libraries supporting command parsing. The most popular is probably [cobra](https://github.com/spf13/cobra), but for our use case, we will just use the helper function from our plugin extension package. +Our goal is to parse `gh create issue KIND/NAME [-n, --namespace]` + +There are a lot of great libraries supporting command parsing. The most popular is probably [cobra](https://github.com/spf13/cobra), but for our use case, we will just use the helper function from our plugin extension package.
const (
pluginName = "gh"
)
// Commands defines all supported GitHub plugin commands and their flags.
type (
Commands struct {
Create *CreateCommand `arg:"subcommand:create"`
}
CreateCommand struct {
Issue *CreateIssueCommand `arg:"subcommand:issue"`
}
CreateIssueCommand struct {
Type string `arg:"positional"`
Namespace string `arg:"-n,--namespace"`
}
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
var cmd Commands
pluginx.ParseCommand(pluginName, in.Command, &cmd)
if cmd.Create == nil || cmd.Create.Issue == nil {
return executor.ExecuteOutput{
Data: fmt.Sprintf("Usage: %s create issue KIND/NAME", pluginName),
}, nil
}
// ...
}
@@ -172,7 +148,7 @@ Under the hood, the `pluginx.ParseCommand` method uses [go-arg](https://github.c ‍ -6. We are almost there! Now let's fetch the issue details: +6\. We are almost there! Now let's fetch the issue details:
const (
logsTailLines = 150
defaultNamespace = "default"
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
issueDetails, _ := getIssueDetails(ctx, cmd.Create.Issue.Namespace, cmd.Create.Issue.Type)
// ...
}
// IssueDetails holds all available information about a given issue.
type IssueDetails struct {
Type string
Namespace string
Logs string
Version string
}
func getIssueDetails(ctx context.Context, namespace, name string) (IssueDetails, error) {
if namespace == "" {
namespace = defaultNamespace
}
logs, _ := pluginx.ExecuteCommand(ctx, fmt.Sprintf("kubectl logs %s -n %s --tail %d", name, namespace, logsTailLines))
ver, _ := pluginx.ExecuteCommand(ctx, "kubectl version -o yaml")
return IssueDetails{
Type: name,
Namespace: namespace,
Logs: logs,
Version: ver,
}, nil
}
@@ -180,44 +156,50 @@ Here, we fetch logs and the cluster version, but you can extend it to fetch othe ‍ -7. Render issue description: +7\. Render issue description: -
import (
"bytes"
"context"
"fmt"
"text/template"
"github.com/kubeshop/botkube/pkg/api/executor"
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
mdBody, _ := renderIssueBody(cfg.GitHub.IssueTemplate, issueDetails)
// ...
}
const defaultIssueBody = `
## Description
This issue refers to the problems connected with {{ .Type | code "bash" }} in namespace {{ .Namespace | code "bash" }}
Logs
{{ .Logs | code "bash"}}
### Cluster details
{{ .Version | code "yaml"}}
`
func renderIssueBody(bodyTpl string, data IssueDetails) (string, error) {
if bodyTpl == "" {
bodyTpl = defaultIssueBody
}
tmpl, _ := template.New("issue-body").Funcs(template.FuncMap{
"code": func(syntax, in string) string {
return fmt.Sprintf("\n```%s\n%s\n```\n", syntax, in)
},
}).Parse(bodyTpl)
var body bytes.Buffer
tmpl.Execute(&body, data)
return body.String(), nil
}
+
import (
"bytes"
"context"
"fmt"
"text/template"
"github.com/kubeshop/botkube/pkg/api/executor"
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
mdBody, _ := renderIssueBody(cfg.GitHub.IssueTemplate, issueDetails)
// ...
}
const defaultIssueBody = `
## Description
This issue refers to the problems connected with {{ .Type | code "bash" }} in namespace {{ .Namespace | code "bash" }}
<details>
<summary><b>Logs</b></summary>
{{ .Logs | code "bash"}}
</details>
### Cluster details
{{ .Version | code "yaml"}}
`
func renderIssueBody(bodyTpl string, data IssueDetails) (string, error) {
if bodyTpl == "" {
bodyTpl = defaultIssueBody
}
tmpl, _ := template.New("issue-body").Funcs(template.FuncMap{
"code": func(syntax, in string) string {
return fmt.Sprintf("\n```%s\n%s\n```\n", syntax, in)
},
}).Parse(bodyTpl)
var body bytes.Buffer
tmpl.Execute(&body, data)
return body.String(), nil
}
In this step, we use the issue template that the user specified in plugin configuration. I decided to use the [Go template](https://pkg.go.dev/text/template), as it fits perfectly into our template rendering flow. ‍ -8. Finally! Submitting an issue! +8\. Finally! Submitting an issue! + +
package main
import (
"context"
"fmt"
"github.com/kubeshop/botkube/pkg/api/executor"
"github.com/kubeshop/botkube/pkg/pluginx"
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
title := fmt.Sprintf("The `%s` malfunctions", cmd.Create.Issue.Type)
issueURL, _ := createGitHubIssue(cfg, title, mdBody)
return executor.ExecuteOutput{
Data: fmt.Sprintf("New issue created successfully! 🎉\n\nIssue URL: %s", issueURL),
}, nil
}
func createGitHubIssue(cfg Config, title, mdBody string) (string, error) {
cmd := fmt.Sprintf("gh issue create --title %q --body '%s' --label bug -R %s", title, mdBody, cfg.GitHub.Repository)
envs := map[string]string{
"GH_TOKEN": cfg.GitHub.Token,
}
return pluginx.ExecuteCommandWithEnvs(context.Background(), cmd, envs)
}
-
package main
import (
"context"
"fmt"
"github.com/kubeshop/botkube/pkg/api/executor"
"github.com/kubeshop/botkube/pkg/pluginx"
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
title := fmt.Sprintf("The `%s` malfunctions", cmd.Create.Issue.Type)
issueURL, _ := createGitHubIssue(cfg, title, mdBody)
return executor.ExecuteOutput{
Data: fmt.Sprintf("New issue created successfully! 🎉\n\nIssue URL: %s", issueURL),
}, nil
}
func createGitHubIssue(cfg Config, title, mdBody string) (string, error) {
cmd := fmt.Sprintf("gh issue create --title %q --body '%s' --label bug -R %s", title, mdBody, cfg.GitHub.Repository)
envs := map[string]string{
"GH_TOKEN": cfg.GitHub.Token,
}
return pluginx.ExecuteCommandWithEnvs(context.Background(), cmd, envs)
}
GitHub provides a great [gh](https://cli.github.com/) CLI, which we use to submit our issue. To learn more about the CLI syntax, see their [manual](https://cli.github.com/manual/gh_issue_create). +GitHub provides a great [gh](https://cli.github.com/) CLI, which we use to submit our issue. To learn more about the CLI syntax, see their [manual](https://cli.github.com/manual/gh_issue_create). The `gh` CLI doesn't accept fine-grained access tokens. As a workaround, you can use the [Go SDK](https://gist.github.com/mszostok/defa5a5390e87b4f011b986742f714d8). ‍ -9. The last part is to download our dependencies. +9\. The last part is to download our dependencies. + +
var depsDownloadLinks = map[string]api.Dependency{
"gh": {
URLs: map[string]string{
"darwin/amd64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_macOS_amd64.tar.gz//gh_2.21.2_macOS_amd64/bin",
"linux/amd64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_amd64.tar.gz//gh_2.21.2_linux_amd64/bin",
"linux/arm64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_arm64.tar.gz//gh_2.21.2_linux_arm64/bin",
"linux/386": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_386.tar.gz//gh_2.21.2_linux_386/bin",
},
},
"kubectl": {
URLs: map[string]string{
"darwin/amd64": "https://dl.k8s.io/release/v1.26.0/bin/darwin/amd64/kubectl",
"linux/amd64": "https://dl.k8s.io/release/v1.26.0/bin/linux/amd64/kubectl",
"linux/arm64": "https://dl.k8s.io/release/v1.26.0/bin/linux/arm64/kubectl",
"linux/386": "https://dl.k8s.io/release/v1.26.0/bin/linux/386/kubectl",
},
},
}
func main() {
pluginx.DownloadDependencies(depsDownloadLinks)
//...
}
-
var depsDownloadLinks = map[string]api.Dependency{
"gh": {
URLs: map[string]string{
"darwin/amd64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_macOS_amd64.tar.gz//gh_2.21.2_macOS_amd64/bin",
"linux/amd64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_amd64.tar.gz//gh_2.21.2_linux_amd64/bin",
"linux/arm64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_arm64.tar.gz//gh_2.21.2_linux_arm64/bin",
"linux/386": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_386.tar.gz//gh_2.21.2_linux_386/bin",
},
},
"kubectl": {
URLs: map[string]string{
"darwin/amd64": "https://dl.k8s.io/release/v1.26.0/bin/darwin/amd64/kubectl",
"linux/amd64": "https://dl.k8s.io/release/v1.26.0/bin/linux/amd64/kubectl",
"linux/arm64": "https://dl.k8s.io/release/v1.26.0/bin/linux/arm64/kubectl",
"linux/386": "https://dl.k8s.io/release/v1.26.0/bin/linux/386/kubectl",
},
},
}
func main() {
pluginx.DownloadDependencies(depsDownloadLinks)
//...
}
We already improved this step and in the 0.18 version Botkube will download defined [dependencies automatically](https://docs.botkube.io/next/plugin/dependencies). For now, you can use the `pluginx.DownloadDependencies` function to call our downloader explicitly. The syntax will remain the same. +We already improved this step and in the 0.18 version Botkube will download defined [dependencies automatically](https://docs.botkube.io/next/plugin/dependencies). For now, you can use the `pluginx.DownloadDependencies` function to call our downloader explicitly. The syntax will remain the same. ‍ -Congrats! The _gh_ plugin is finally implemented. Now, let's play a DevOps role! 😈 In the next section, I will show you how to build and release your brand-new executor plugin. +Congrats! The \*gh_\*_ plugin is finally implemented. Now, let's play a DevOps role! 😈 In the next section, I will show you how to build and release your brand-new executor plugin. -### Release the _gh_ executor +\### Release the \*gh_\*_ executor -It's time to build your plugin. For that purpose, we will use [GoReleaser](https://goreleaser.com/). It simplifies building Go binaries for different architectures. The important thing is to produce the binaries for the architecture of the host platform where Botkube is running. Adjust the **goos**, **goarch**, and **goarm** properties based on this architecture. +It's time to build your plugin. For that purpose, we will use \[GoReleaser\](https://goreleaser.com/). It simplifies building Go binaries for different architectures. The important thing is to produce the binaries for the architecture of the host platform where Botkube is running. Adjust the \*\*goos\*\*, \*\*goarch\*\*, and \*\*goarm\*\* properties based on this architecture. -‍ Add new build entry under _.goreleaser.yaml_: ‍ +‍ +Add new build entry under \*.goreleaser.yaml\*: +‍
builds:
- id: gh
main: cmd/gh/main.go
binary: executor_gh_{{ .Os }}_{{ .Arch }}
no_unique_dist_dir: true
env:
- CGO_ENABLED=0
goos:
- linux
- darwin
goarch:
- amd64
- arm64
goarm:
- 7
-‍ Now, we need to distribute our plugins. As we mentioned earlier, a plugin repository can be any static file server. The [kubeshop/botkube-plugins-template](https://github.com/kubeshop/botkube-plugins-template) repository comes with two [GitHub Actions](https://github.com/features/actions): - -1. The [.github/workflows/release.yml](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/release.yml) action, which builds the plugin binaries and index file each time a new tag is pushed. +‍ +Now, we need to distribute our plugins. As we mentioned earlier, a plugin repository can be any static file server. The \[kubeshop/botkube-plugins-template\](https://github.com/kubeshop/botkube-plugins-template) repository comes with two \[GitHub Actions\](https://github.com/features/actions): -2. The [.github/workflows/pages-release.yml](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/pages-release.yml) action, which updates GitHub Pages with plugin binaries and index file each time a new tag is pushed. +1\. The \[.github/workflows/release.yml\](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/release.yml) action, which builds the plugin binaries and index file each time a new tag is pushed. +2\. The \[.github/workflows/pages-release.yml\](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/pages-release.yml) action, which updates GitHub Pages with plugin binaries and index file each time a new tag is pushed. To cut a new release, you need to commit all your work and tag a new commit: @@ -225,39 +207,37 @@ Next, let's push our changes and the new tag: This triggers GitHub Action: -![Image 6: a screenshot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d817a66682780daf595ab4_release-job.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d817a66682780daf595ab4_release-job.png) -### What this automation does under the hood +\### What this automation does under the hood This automation: -1. Installs the latest GoReleaser tool. - -2. Builds all plugin binaries defined in the _.goreleaser.yaml_ file. +1\. Installs the latest GoReleaser tool. -3. Generates an index file using the [Botkube helper tool](https://docs.botkube.io/plugin/repo#generate-index-file). +2\. Builds all plugin binaries defined in the _.goreleaser.yaml_ file. -4. Generates a release description. +3\. Generates an index file using the \[Botkube helper tool\](https://docs.botkube.io/plugin/repo#generate-index-file). -5. Uses the [gh](https://cli.github.com/) CLI to create a new GitHub release. +4\. Generates a release description. +5\. Uses the \[gh\](https://cli.github.com) CLI to create a new GitHub release. -### Use the _gh_ executor +\### Use the _gh_ executor In the description of a new GitHub release, you will see the repository URL that you can use within Botkube. -### Steps +\### Steps -1. Follow one of our [installation guides](https://docs.botkube.io/installation). Once you reach the Botkube deployment step, add flags specified in the steps below to _helm install_. - -2. Export required environment variables: +1\. Follow one of our \[installation guides\](https://docs.botkube.io/installation). Once you reach the Botkube deployment step, add flags specified in the steps below to \*helm install\*. +2\. Export required environment variables: Follow the official GitHub guide on how to create a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-personal-access-token-classic). To be able to create GitHub issues, add the **repo** permission. -3. Add the _gh_ executor related configuration: +3\. Add the \*gh_\*_ executor related configuration: -4. Depending on the selected platform, add the _plugin-based_ executor binding. For Slack, it looks like this: +4\. Depending on the selected platform, add the _plugin-based_ executor binding. For Slack, it looks like this: If you follow all the steps above, you will have all the necessary flags allowing you to install Botkube with the **_gh_** executor! @@ -265,27 +245,29 @@ Here's an example of a full command that you should have constructed for Slack i
export SLACK_CHANNEL_NAME={channel_name}
export SLACK_APP_TOKEN={token}
export SLACK_BOT_TOKEN={token}
export PLUGINS_URL={plugin_index_url}
export REPOSITORY={repo} # format OWNER/REPO_NAME, e.g. kubeshop/botkube
export GITHUB_TOKEN={token}
helm install --version v0.17.0 botkube --namespace botkube --create-namespace \
--set communications.default-group.socketSlack.enabled=true \
--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \
--set communications.default-group.socketSlack.channels.default.bindings.executors={"plugin-based"} \
--set communications.default-group.socketSlack.appToken=${SLACK_APP_TOKEN} \
--set communications.default-group.socketSlack.botToken=${SLACK_BOT_TOKEN} \
--set 'plugins.repositories.botkube-plugins.url'=${PLUGINS_URL} \
--set 'executors.plugin-based.botkube-plugins/gh.config.github.repository'=${REPOSITORY} \
--set 'executors.plugin-based.botkube-plugins/gh.config.github.token'=${GITHUB_TOKEN} \
botkube/botkube
-### Testing - -1. Navigate to your communication channel. +\### Testing -2. On a given channel, run: **@Botkube list executors** +1\. Navigate to your communication channel. +2\. On a given channel, run: \*\*@Botkube list executors\*\* -![Image 7: a screenshot of a slack screen showing a message from a user](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d81ba395f87021e5d45685_list-exec.png) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d81ba395f87021e5d45685_list-exec.png) It returns information about enabled _gh_ executor -3. Create a failing Job: +3\. Create a failing Job: + +
apiVersion: batch/v1
kind: Job
metadata:
name: oops
spec:
backoffLimit: 1
template:
spec:
restartPolicy: Never
containers:
- name: main
image: docker.io/library/bash:5
command: ["bash"]
args:
- -c
- echo "Hello from failing job!" && exit 42
-
apiVersion: batch/v1
kind: Job
metadata:
name: oops
spec:
backoffLimit: 1
template:
spec:
restartPolicy: Never
containers:
- name: main
image: docker.io/library/bash:5
command: ["bash"]
args:
- -c
- echo "Hello from failing job!" && exit 42
‍ ![Image 8: a message from a job application](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d81bb595f870bd6ed45689_alert.png) +‍ + +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d81bb595f870bd6ed45689_alert.png) After a few seconds, you should see a new alert on your channel -4. To create a GitHub issue for a given alert, run: **_@Botkube gh create issue job/oops_**‍ +4\. To create a GitHub issue for a given alert, run: **_@Botkube gh create issue job/oops_**‍ -Summary -------- +\## Summary Botkube executors are powerful because they can glue together three important parts: Kubernetes clusters, communicators, and tools of your choice. There would be nothing special about it if it wasn't, in fact, unburdening you of those implementation-specific details. @@ -293,12 +275,11 @@ As you noticed, you can focus purely on your business logic. Without the need to Once Botkube is deployed, your extension will be available to you and your teammates in a given channel. There is no need to maintain your local setup. Thanks to that, you can also easily run executors on private clusters. -Botkube extensions can be used with other Botkube functionality too. It means that you can use them to create [automation](https://docs.botkube.io/configuration/action). We will shed more light on that in the next blog post. Stay tuned! +Botkube extensions can be used with other Botkube functionality too. It means that you can use them to create \[automation\](https://docs.botkube.io/configuration/action). We will shed more light on that in the next blog post. Stay tuned! > Implement once, access everywhere (Slack, Discord, Mattermost, MS Teams). -How can I get involved? ------------------------ +\## How can I get involved? The implemented plugin is as simple as possible. However, it is a great base for further extension based on your needs; for example: introduce your own Kubernetes annotation to route the notification to a specific repository, add a threshold to create issues only for constantly failing Pods, etc. The possibilities are endless, and we cannot wait to see what kind of great workflows you will create! @@ -306,11 +287,11 @@ As always, we want to hear your feedback and ideas about Botkube. Help us plan t There are plenty of options to contact us: -* [GitHub issues](https://github.com/kubeshop/botkube/issues) - -* [Slack](https://join.botkube.io/) +\- \[GitHub issues\](https://github.com/kubeshop/botkube/issues) -* or email our Product Leader at blair@kubeshop.io. +\- \[Slack\](https://join.botkube.io/) +\- or email our Product Leader at blair@kubeshop.io. -‍ Thank you for taking the time to learn about Botkube 🙌 +‍ +Thank you for taking the time to learn about Botkube 🙌 diff --git a/hack/assistant-setup/content/botkube.io__blog__building-a-chatgpt-plugin-from-ideation-to-implementation.md b/hack/assistant-setup/content/botkube.io__blog__building-a-chatgpt-plugin-from-ideation-to-implementation.md index d47f5194..70ae7ab5 100644 --- a/hack/assistant-setup/content/botkube.io__blog__building-a-chatgpt-plugin-from-ideation-to-implementation.md +++ b/hack/assistant-setup/content/botkube.io__blog__building-a-chatgpt-plugin-from-ideation-to-implementation.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/building-a-chatgpt-plugin-from-ideation-to-i Published Time: Jul 27, 2023 Markdown Content: -![Image 1: a black and white photo of a man in a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ed2e11a11a3c6d7401_53d6BKOddSnzxKZMBQxx_KPWy4IOk8nhK4eSxM8uKIo.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ed2e11a11a3c6d7401_53d6BKOddSnzxKZMBQxx_KPWy4IOk8nhK4eSxM8uKIo.jpeg) Paweł Kosiec @@ -17,50 +17,46 @@ Botkube now includes AI recommendations to help you diagnose and troubleshoot is ### Table of Contents -* [Introduction](#introduction) -* [Ideation Phase: The Company-Wide Hackathon](#ideation-phase-the-company-wide-hackathon) -* [Planning and Conceptualization](#planning-and-conceptualization) -* [Development Process](#development-process) -* [Result](#result) -* [Conclusion](#conclusion) +* [Introduction](#introduction-2) +* [Ideation Phase: The Company-Wide Hackathon](#ideation-phase-the-company-wide-hackathon-2) +* [Planning and Conceptualization](#planning-and-conceptualization-2) +* [Development Process](#development-process-2) +* [Result](#result-2) +* [Conclusion](#conclusion-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! #### Get started with Botkube Cloud -Introduction ------------- +\## Introduction The Botkube team is a group of dedicated individuals with a common focus on developing innovative solutions in the technology landscape. With AI getting more and more widely used, the team saw an opportunity to explore the potential of AI-powered chatbots in the DevOps space. A significant event that played a crucial role in shaping the trajectory of the ChatGPT plugin was the company-wide hackathon organized by Kubeshop. The hackathon was a great opportunity for the team to brainstorm ideas and collaborate on projects that would help people make Kubernetes life easier, simpler and faster. -This blog post aims to document the entire process involved in the creation of the [Botkube ChatGPT plugin](https://docs.botkube.io/configuration/executor/doctor). From the initial spark of the idea during the hackathon to the final stages of implementation, we'll take you on a behind-the-scenes journey. Expect insights into the challenges, breakthroughs, and collaborative efforts that went into making this vision a reality. +This blog post aims to document the entire process involved in the creation of the \[Botkube ChatGPT plugin\](https://docs.botkube.io/configuration/executor/doctor). From the initial spark of the idea during the hackathon to the final stages of implementation, we'll take you on a behind-the-scenes journey. Expect insights into the challenges, breakthroughs, and collaborative efforts that went into making this vision a reality. ‍ -Ideation Phase: The Company-Wide Hackathon ------------------------------------------- +## Ideation Phase: The Company-Wide Hackathon It all started with the internal Kubeshop hackathon. During this intense and collaborative event, team members from diverse backgrounds came together to brainstorm, experiment, and find novel solutions to challenges in the Kubernetes space, as a part of the existing projects in Kubeshop portfolio. The hackathon's theme was to help Developers, Testers, DevOps, SRE’s or their managers with making Kubernetes life easier, simpler, and faster. In 48 hours, the teams had to come up with an idea, build a prototype, and present their proof-of-concept solution to the judges. The Botkube team came up with 14 different ideas. As the hackathon time was limited, the team had to filter out the ideas we should focus on. After several discussions and internal voting, we decided to improve the Botkube onboarding experience. This consisted of 4 different parts: -* Botkube Cloud Migration Tool, to seamlessly migrate existing Botkube installation to Botkube Cloud. +\- Botkube Cloud Migration Tool, to seamlessly migrate existing Botkube installation to Botkube Cloud. -* Botkube Cloud Instance Builder, a convenient drag-and-drop UI tool to configure Botkube instance. +\- Botkube Cloud Instance Builder, a convenient drag-and-drop UI tool to configure Botkube instance. -* Exec plugin, to install and run any CLI application directly from chat platform, without any hassle. - -* ChatGPT executor plugin, which is the main topic of this blog post. +\- Exec plugin, to install and run any CLI application directly from chat platform, without any hassle. +\- ChatGPT executor plugin, which is the main topic of this blog post. The ChatGPT plugin was the most voted idea internally, as we all saw the potential to bring significant value to the users. The team, guided by the goal of selecting an idea with the highest impact, set specific criteria to evaluate each proposal. We considered factors such as feasibility, market demand, and alignment with the Botkube's long-term vision. The ChatGPT plugin idea ticked all the boxes, showing promise to address real customer needs and aligning perfectly with the Botkube's mission. ‍ -Planning and Conceptualization ------------------------------- +\## Planning and Conceptualization Once the ChatGPT executor plugin was selected as a part of our hackathon topic, the team started working on the project. The first step was to define the goals and objectives of the plugin. @@ -68,49 +64,47 @@ The main goal was to lower the barrier of entry for new Botkube users. Sometimes ‍ -![Image 2: a purple screen with a purple background and a purple text](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a033e2e505f6d63b554_figma.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a033e2e505f6d63b554_figma.png) ‍ -The button would pass the error data to the ChatGPT plugin, which would use return an AI-generated response with actionable buttons. The user would be able to click on the buttons to execute specific commands, such as `kubectl describe pod` or `kubectl logs pod`. This would help the user to troubleshoot the issue without the need to search for the solution on the Internet. +The button would pass the error data to the ChatGPT plugin, which would use return an AI-generated response with actionable buttons. The user would be able to click on the buttons to execute specific commands, such as \`kubectl describe pod\` or \`kubectl logs pod\`. This would help the user to troubleshoot the issue without the need to search for the solution on the Internet. Another use case we considered is answering human questions directly from the chat. The user would be able to ask questions like "How to create a Pod?" or "How to troubleshoot non-working Service?" and get an AI-generated response. This would be useful for new users who are not familiar with Kubernetes concepts and terminology. The final part of this phase was to come up with a name for the plugin. This was one of the hardest challenges. -> There are only two hard things in Computer Science: cache invalidation and naming things. -> -> \-- Phil Karlton +\> There are only two hard things in Computer Science: cache invalidation and naming things. + +\> -- Phil Karlton We decided to call it "Doctor", as it would help users to diagnose and fix Kubernetes issues. ‍ -Development Process -------------------- +\## Development Process The enthusiasm and dedication displayed by the team during the ideation phase laid a strong foundation for the development of the ChatGPT plugin. As we already knew what we wanted to develop, we had to decide on the specific technologies and tools to use. -Choosing plugin language was the first step. Botkube plugin API uses Hashicorp's [`go-plugin`](https://github.com/hashicorp/go-plugin) gRPC interface. While it has cross-language support, we decided to stick to Go as it is the primary language used in Botkube. We also wanted to leverage the existing Go SDK and pipelines we set up for the Botkube Go codebase. +Choosing plugin language was the first step. Botkube plugin API uses Hashicorp's \[\`go-plugin\`\](https://github.com/hashicorp/go-plugin) gRPC interface. While it has cross-language support, we decided to stick to Go as it is the primary language used in Botkube. We also wanted to leverage the existing Go SDK and pipelines we set up for the Botkube Go codebase. -The next step was a bit more challenging: choosing the right AI model. We wanted to use a pre-trained model to avoid the need for training data and the time-consuming training process. The most important thing was to be able to answer Kubernetes-related questions efficiently. After careful consideration, we decided to use OpenAI's GPT-3 (`text-davinci-003`) model for the chatbot. +The next step was a bit more challenging: choosing the right AI model. We wanted to use a pre-trained model to avoid the need for training data and the time-consuming training process. The most important thing was to be able to answer Kubernetes-related questions efficiently. After careful consideration, we decided to use OpenAI's GPT-3 (\`text-davinci-003\`) model for the chatbot. While ChatGPT integration is very straightforward, another little challenge was to construct a prompt that produces predictable results and to parse the response from the model, so that we could render interactive output for a user. After a little bit of testing and experimenting, we achieved the desired result. -The last part was to integrate the ChatGPT plugin into Kubernetes source plugin, which watches for Kubernetes events and sends notifications to the chat interface. We extended the Kubernetes plugin with `extraButtons` configuration property, which accepts command templates and renders them as interactive buttons as a part of each notification: +The last part was to integrate the ChatGPT plugin into Kubernetes source plugin, which watches for Kubernetes events and sends notifications to the chat interface. We extended the Kubernetes plugin with \`extraButtons\` configuration property, which accepts command templates and renders them as interactive buttons as a part of each notification: This way, we were able to render the "Get help" button under each error event. As the implementation is generic, users can also benefit from it and configure virtually any command button under specific types of events. ‍ -Result ------- +## Result In 48 hours, Botkube team was able to deliver a fully-working ChatGPT plugin called "Doctor". The plugin is able to help troubleshooting Kubernetes cluster issues based on incoming events. It's best used in combination with Slack integration, as it provides interactive buttons to help users navigate through the troubleshooting process. No typing required! ‍ -![Image 3: a screen shot of a computer screen showing a number of options](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a2723cb531baf9f0867_doctor-interactive-help.gif) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a2723cb531baf9f0867_doctor-interactive-help.gif) ‍ @@ -118,22 +112,21 @@ It also exposes ChatGPT prompt, so you can ask some arbitrary, not necessarily K ‍ -![Image 4: what are the common problems with kubernetes service](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a323e2e505f6d63c5a8_common-k8s-service-problems.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a323e2e505f6d63c5a8_common-k8s-service-problems.png) ‍ -![Image 5: a screenshot of a conversation between a customer and a developer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a491f0e3972e7e5430d_how-to-create-a-pod.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a491f0e3972e7e5430d_how-to-create-a-pod.png) ‍ -The team was very happy with the result, and we decided to **ship it to all users in [Botkube 1.2 release](https://botkube.io/blog/botkube-v1-2-0-release-notes)**! 🎉 +The team was very happy with the result, and we decided to \*\*ship it to all users in \[Botkube 1.2 release\](https://botkube.io/blog/botkube-v1-2-0-release-notes)\*\*! 🎉 -How to get started, you ask? [Install Botkube](https://docs.botkube.io/), if you haven't already, and enable Doctor plugin following the [Configuration](https://docs.botkube.io/configuration/executor/doctor) document. Then, learn how to use it by [following the tutorial that our DevRel Maria put together](https://botkube.io/blog/doctor-plug-in-tutorial). +How to get started, you ask? \[Install Botkube\](https://docs.botkube.io/), if you haven't already, and enable Doctor plugin following the \[Configuration\](https://docs.botkube.io/configuration/executor/doctor) document. Then, learn how to use it by \[following the tutorial that our DevRel Maria put together\](https://botkube.io/blog/doctor-plug-in-tutorial). ‍ -Conclusion ----------- +\## Conclusion The journey from the hackathon ideation to the final ChatGPT plugin has been nothing short of remarkable. It all began with the internal Kubeshop hackathon, where the Botkube team collaborated intensely and passionately to brainstorm ideas for making Kubernetes life easier, simpler, and faster. After carefully evaluating various proposals, the ChatGPT plugin emerged as the most promising idea, driven by its potential to revolutionize the Botkube onboarding experience and provide users with an unparalleled DevOps tool. @@ -141,4 +134,4 @@ This would not have been possible without the spirit of cross-team collaboration The Doctor plugin was just the beginning of our journey. We plan to continually enhance its functionality, leveraging user feedback and insights to make it more versatile and user-friendly. That's why your feedback is very important to us. -Let us know what do you think about the [ChatGPT-based Doctor plugin](https://docs.botkube.io/configuration/executor/doctor)! We are always open to feedback and suggestions. If you have any questions, feel free to reach out to us on [Slack](https://join.botkube.io/) or [Twitter](https://twitter.com/botkube_io). +Let us know what do you think about the \[ChatGPT-based Doctor plugin\](https://docs.botkube.io/configuration/executor/doctor)! We are always open to feedback and suggestions. If you have any questions, feel free to reach out to us on \[Slack\](https://join.botkube.io/) or \[Twitter\](https://twitter.com/botkube\_io). diff --git a/hack/assistant-setup/content/botkube.io__blog__command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube.md b/hack/assistant-setup/content/botkube.io__blog__command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube.md index 8d6f10a0..67005f26 100644 --- a/hack/assistant-setup/content/botkube.io__blog__command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube.md +++ b/hack/assistant-setup/content/botkube.io__blog__command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/command-line-magic-simplify-your-life-with-c Published Time: Mar 09, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,62 +17,59 @@ With custom aliases, you can create shortcuts for those long and confusing Kuber ### Table of Contents -* [So how do you do it?](#so-how-do-you-do-it-) -* [Syntax](#syntax) +* [So how do you do it?](#so-how-do-you-do-it--2) +* [Syntax](#syntax-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -Are you tired of typing out long and complex Kubernetes commands, only to realize you've made a typo and have to start over? Do you wish there was a way to make managing your Kubernetes clusters easier and more efficient? Fortunately, [custom kubectl aliases](https://docs.botkube.io/usage/executor/#aliases) on Botkube are here to save the day. With custom aliases, you can create shortcuts for those long and confusing Kubernetes commands, making it easy to manage your clusters and focus on what really matters - **your code**. +Are you tired of typing out long and complex Kubernetes commands, only to realize you've made a typo and have to start over? Do you wish there was a way to make managing your Kubernetes clusters easier and more efficient? Fortunately, \[custom kubectl aliases\](https://docs.botkube.io/usage/executor/#aliases) on Botkube are here to save the day. With custom aliases, you can create shortcuts for those long and confusing Kubernetes commands, making it easy to manage your clusters and focus on what really matters - \*\*your code\*\*. Whether you're a seasoned Kubernetes pro or just starting out, custom aliases on Botkube can help you work more efficiently and productively. In this blog, we'll show you why custom aliases with Botkube should be in every developer's toolkit. -### Prerequisites : +###Prerequisites : -* Access to a Kubernetes cluster +\- Access to a Kubernetes cluster -* Botkube [installed](https://docs.botkube.io/) and configured +\- Botkube \[installed\](https://docs.botkube.io/) and configured +##So how do you do it? -So how do you do it? --------------------- +Alias are a shortcut for a longer command or just a part of it. It can be defined for all commands, including \[executor plugins\](https://docs.botkube.io/usage/executor/) and built-in Botkube commands. This powerful tool lets you create shortcuts for longer, more complex commands, making them quicker and easier to execute. And the best part? You can create aliases for all commands, including built-in Botkube commands and executor plugins. When you use an alias, it replaces the original command with the underlying command before executing it, saving you precious seconds and reducing the risk of errors. -Alias are a shortcut for a longer command or just a part of it. It can be defined for all commands, including [executor plugins](https://docs.botkube.io/usage/executor/) and built-in Botkube commands. This powerful tool lets you create shortcuts for longer, more complex commands, making them quicker and easier to execute. And the best part? You can create aliases for all commands, including built-in Botkube commands and executor plugins. When you use an alias, it replaces the original command with the underlying command before executing it, saving you precious seconds and reducing the risk of errors. - -To save on time, Botkube had implemented the `k` and `kc` aliases for the kubectl command, much like DevOps admins like to do on the command line. But we took it a step further: **now you can configure your own custom aliases for any command in Botkube**. Not only can you alias a single command like kubectl, you can create an alias for the full command, including options and flags. +To save on time, Botkube had implemented the \`k\` and \`kc\` aliases for the kubectl command, much like DevOps admins like to do on the command line. But we took it a step further: \*\*now you can configure your own custom aliases for any command in Botkube\*\*. Not only can you alias a single command like kubectl, you can create an alias for the full command, including options and flags. In the example shown below, kgp is an alias for the full kubectl get pods command. -![Image 2: a screenshot of a buddha lab account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ec7df6773520fc340602_sLERrE-WA2Iv0EldUqYb-eeTU_dmKcSc9eK3k6ryJguJX8MuZyReFo14bHFCWumC846c87NEyVpyjLs3bJBImbK_aF_0iH4k6JCgoQHl0hrLRWzBdnZ5Y8Hg8AMICY4tRhyP06K9v539W8TuW9mTvvY.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ec7df6773520fc340602_sLERrE-WA2Iv0EldUqYb-eeTU_dmKcSc9eK3k6ryJguJX8MuZyReFo14bHFCWumC846c87NEyVpyjLs3bJBImbK_aF_0iH4k6JCgoQHl0hrLRWzBdnZ5Y8Hg8AMICY4tRhyP06K9v539W8TuW9mTvvY.png) Once you have configured aliases, you can use them interchangeably with a full command. For example: -**k** as kubectl, +\*\*k\*\* as kubectl, -**kgp** as `kubectl get pods`, +\*\*kgp\*\* as \`kubectl get pods\`, -**kgpa** as `kubectl get pods -A`, +\*\*kgpa\*\* as \`kubectl get pods -A\`, -**hh** as `helm history`, +\*\*hh\*\* as \`helm history\`, -**a** as list actions, the built-in Botkube command, +\*\*a\*\* as list actions, the built-in Botkube command, and so on. -Aliases are defined globally for the whole Botkube installation. To see which aliases are available for current conversation, run `@Botkube list aliases`. +Aliases are defined globally for the whole Botkube installation. To see which aliases are available for current conversation, run \`@Botkube list aliases\`. -Syntax ------- +\## Syntax -![Image 3: a screenshot of a web page with a list of words](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/642d8fd3d44f31b2f4b28059_Screenshot%202023-04-05%20at%208.11.31%20AM.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/642d8fd3d44f31b2f4b28059_Screenshot%202023-04-05%20at%208.11.31%20AM.png) -So there you have it- **the power of custom aliases on Botkube**. By creating personalized shortcuts for your most-used commands, you'll be able to work smarter, not harder, and get things done more efficiently than ever before. Plus, with the ability to create aliases for all commands, including built-in Botkube commands and executor plugins, the possibilities are truly endless. So, if you want to streamline your workflow and become a more efficient developer, custom alias feature on Botkube is definitely worth exploring +So there you have it- \*\*the power of custom aliases on Botkube\*\*. By creating personalized shortcuts for your most-used commands, you'll be able to work smarter, not harder, and get things done more efficiently than ever before. Plus, with the ability to create aliases for all commands, including built-in Botkube commands and executor plugins, the possibilities are truly endless.  So, if you want to streamline your workflow and become a more efficient developer, custom alias feature on Botkube is definitely worth exploring As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap and get the features you’d like implemented. There are plenty of options to contact us: -* [GitHub issues](https://github.com/kubeshop/botkube/issues) +\- \[GitHub issues\](https://github.com/kubeshop/botkube/issues) -* [Slack](https://join.botkube.io/) +\- \[Slack\](https://join.botkube.io/) -* or email our Product Leader at blair@kubeshop.io. +\- or email our Product Leader at blair@kubeshop.io. diff --git a/hack/assistant-setup/content/botkube.io__blog__configure-event-sources-with-new-botkube-filters.md b/hack/assistant-setup/content/botkube.io__blog__configure-event-sources-with-new-botkube-filters.md index c60354cd..1c318b46 100644 --- a/hack/assistant-setup/content/botkube.io__blog__configure-event-sources-with-new-botkube-filters.md +++ b/hack/assistant-setup/content/botkube.io__blog__configure-event-sources-with-new-botkube-filters.md @@ -5,9 +5,14 @@ URL Source: https://botkube.io/blog/configure-event-sources-with-new-botkube-fil Published Time: Dec 12, 2022 Markdown Content: -![Image 1: an image of a mountain with the words'botkube tutorial'](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6388d8a9440baf86c12e1332_BQ_cKZugm2gU2CJlE2SwuDKqkczTCA0n645DHiHJkUQ.png) +Configuring Event Sources with the New Botkube Filters +------------------------------------------------------ + +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6388d8a9440baf86c12e1332_BQ_cKZugm2gU2CJlE2SwuDKqkczTCA0n645DHiHJkUQ.png) + +[](#home) -[](#home) ![Image 2: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -21,7 +26,7 @@ Configuring Event Sources with the New Botkube Filters #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! -![Image 3: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) Blair Rampling @@ -35,27 +40,8 @@ Related Content Stay in the Loop ---------------- -![Image 4: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/636d3117b8612105c60e0bd9_botkube-front-right.svg) +![Image 4: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/636d3117b8612105c60e0bd9_botkube-front-right.svg) Join the Botkube Community in one of these channels Subscribe to our monthly newsletter to stay up to date with all-things Botkube. - -[![Image 5: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) - -Botkube is made by Kubeshop -— a first of its kind open source accelerator focused on the cloud native ecosystem - -At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. - -[![Image 6: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 7: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 8: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 9: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 10: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) - -#### Get to Know Kubeshop - -#### Botkube - -Copyright © 2022 Kubeshop, LLC. All rights reserved. - -Copyright © 2024 Kubeshop, LLC. All rights reserved. - -#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__blog__creating-the-botkube-flux-plugin-for-day-2-operations.md b/hack/assistant-setup/content/botkube.io__blog__creating-the-botkube-flux-plugin-for-day-2-operations.md index 931490c3..9f948c6d 100644 --- a/hack/assistant-setup/content/botkube.io__blog__creating-the-botkube-flux-plugin-for-day-2-operations.md +++ b/hack/assistant-setup/content/botkube.io__blog__creating-the-botkube-flux-plugin-for-day-2-operations.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/creating-the-botkube-flux-plugin-for-day-2-o Published Time: Sep 07, 2023 Markdown Content: -![Image 1: a man with his arms crossed in front of a black background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ec19d99029e7cfb5bd_n-vUM0Lz3yXA1WLyfxEMUxXQpUDEiKv9EmEe4NnCbCI.png) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ec19d99029e7cfb5bd_n-vUM0Lz3yXA1WLyfxEMUxXQpUDEiKv9EmEe4NnCbCI.png) Mateusz Szostok @@ -46,13 +46,13 @@ Now, let's get into the nitty-gritty of this plugin's journey. Picture yourself 1. Be able to run Flux CLI commands from any communication platform, just like you do in your terminal: -![Image 2: a screenshot of a web page showing different types of information](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f9944f5ec10d12756e4d2b_flux-get-source-git.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f9944f5ec10d12756e4d2b_flux-get-source-git.png) ‍ 2. Next, let's make it mobile friendly. The secret ingredient is interactivity like buttons and select menus. ‍ -![Image 3: a screen shot of a chat window with a button on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f9949ad7623bfae8357d71_flux-get-source-git-btns.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f9949ad7623bfae8357d71_flux-get-source-git-btns.png) Typing or copy-pasting a long names doesn't work well. Now, you have a handy Flux client right in your pocket, ready with just a few clicks. And we are just half-way there 😈‍ @@ -62,7 +62,7 @@ Typing or copy-pasting a long names doesn't work well. Now, you have a handy Flu In our case, we stitched together three important parts: Kubernetes cluster, GitHub platform, and Flux CLI. As a result, we've provided a streamlined experience for generating a diff report in the context of GitHub pull requests and the current cluster state. -![Image 4: a screen shot of a screen showing the status of a task](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994c33a6f72e35362f50c_flux-diff.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994c33a6f72e35362f50c_flux-diff.png) 🎁 As you may notice, the diff report notification includes some useful actions out-of-the-box: @@ -85,7 +85,7 @@ That's how the GitHub Events source was born. Now we can set up a complete workf 2. Get notification on Slack about new pull request. 3. Render and embed event-aware button to run a diff report. -![Image 5: a screenshot of a page with the word adexpress on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994dd9581964e18ef36bd_pr-event.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994dd9581964e18ef36bd_pr-event.png) ‍ @@ -95,10 +95,45 @@ Now, you may think that what we achieve in those 4 steps it's great but will be * GitHub Events workflow: -
botkube/github-events: # GitHub Events
github:
auth:
accessToken: "ghp_"
repositories:
- name: mszostok/podinfo
on:
pullRequests:
- types: ["open"]
paths:
include: ["kustomize/.*"]
notificationTemplate:
extraButtons:
- displayName: "Flux Diff"
commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} "
We've kept the syntax generic, allowing you to configure different command buttons under specific types of events. Interactivity and Decision-Making --------------------------------- Thanks to automated notifications with event-aware buttons, you can easily generate reports and share them with your team or contributors. While posting diff reports can be fully automated, you might want to do it intentionally by clicking a button. Why? Because the report may contain sensitive information that you don't want to fully disclose to external contributors. Using, for example, GitHUb Action, unfortunately, doesn't give us this freedom. We tried to automate the whole workflow while still keeping you as the decision-maker when it comes to sharing the report or directly approving the PR. With that being said, nothing blocks us from adding in the future support for AI assistance. Imagine an AI that reviews the diff report and decides whether to proceed with automated approval. Are you ready for AIOps? Exciting times ahead! Manual Approach vs. Botkube Flux Plugin --------------------------------------- While you were reading the first part of the Flux plugin evolution, did you consider what kind of manual steps would be required without the plugin? Let's break it down: 1. Checking GitHub repository for a new pull requests. 2. **(One-time operation)** Downloading and installing Flux CLI on you localhost. 3. Manually connecting to the related Kubernetes cluster. 4. **(One-time operation)** Cloning the repository. 5. Checking out the pull request. 6. Constructing a Flux command. 7. Sharing the diff report on Slack/GitHub. Even if we exclude the one-time operations, we're left with 5 steps for each new pull request. Lots of manual steps mean lots of room for human errors. Plus, all that jumping between different sites and context switching can impact your productivity. It's much better to focus on the main aspect, which is the review, and let automation handle the rest. Behind the Scenes: Developing the Botkube Flux Plugin ----------------------------------------------------- The development of the Botkube Flux Executor plugin involved several key aspects: 1. 🕹️ **Interactivity**: We leveraged the [`exec`](https://docs.botkube.io/usage/executor/exec#table-parser) plugin developed in previous release, making adding interactivity almost out-of-the-box. The `exec` plugin allows you to port any CLI into the communication platform window. +
botkube/github-events: # GitHub Events
github:
auth:
accessToken: "ghp_"
repositories:
- name: mszostok/podinfo
on:
pullRequests:
- types: ["open"]
paths:
include: ["kustomize/.*"]
notificationTemplate:
extraButtons:
- displayName: "Flux Diff"
commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} "
-In this case, we reused it as Go SDK. Here is the blueprint that describes translation of CLI table output into an interactive message: ‍ +We've kept the syntax generic, allowing you to configure different command buttons under specific types of events. +Interactivity and Decision-Making +--------------------------------- + +Thanks to automated notifications with event-aware buttons, you can easily generate reports and share them with your team or contributors. + +While posting diff reports can be fully automated, you might want to do it intentionally by clicking a button. Why? Because the report may contain sensitive information that you don't want to fully disclose to external contributors. + +Using, for example, GitHUb Action, unfortunately, doesn't give us this freedom. We tried to automate the whole workflow while still keeping you as the decision-maker when it comes to sharing the report or directly approving the PR. + +With that being said, nothing blocks us from adding in the future support for AI assistance. Imagine an AI that reviews the diff report and decides whether to proceed with automated approval. Are you ready for AIOps? Exciting times ahead! + +Manual Approach vs. Botkube Flux Plugin +--------------------------------------- + +While you were reading the first part of the Flux plugin evolution, did you consider what kind of manual steps would be required without the plugin? Let's break it down: + +1. Checking GitHub repository for a new pull requests. +2. **(One-time operation)** Downloading and installing Flux CLI on you localhost. +3. Manually connecting to the related Kubernetes cluster. +4. **(One-time operation)** Cloning the repository. +5. Checking out the pull request. +6. Constructing a Flux command. +7. Sharing the diff report on Slack/GitHub. + +Even if we exclude the one-time operations, we're left with 5 steps for each new pull request. Lots of manual steps mean lots of room for human errors. Plus, all that jumping between different sites and context switching can impact your productivity. It's much better to focus on the main aspect, which is the review, and let automation handle the rest. + +Behind the Scenes: Developing the Botkube Flux Plugin +----------------------------------------------------- + +The development of the Botkube Flux Executor plugin involved several key aspects: + +1. 🕹️ **Interactivity**: We leveraged the [`exec`](https://docs.botkube.io/usage/executor/exec#table-parser) plugin developed in previous release, making adding interactivity almost out-of-the-box. The `exec` plugin allows you to port any CLI into the communication platform window. + + In this case, we reused it as Go SDK. Here is the blueprint that describes translation of CLI table output into an interactive message: ‍ +
- trigger:
command:
regex: "flux get sources (buc
type: "parser:table:space"
message:
selects:
- name: "Item"
keyTpl: "{{ .Name }}"
@@ -113,13 +148,21 @@ Thanks to embedding it, we can distribute it as a single plugin binary, and we d ‍ 3. 🔍 & 🔐 **Auto-discovering GitHub repos**: In order to discover related GitHub repository, we need to get Flux custom resource. We used the [`controller-runtime`](https://github.com/kubernetes-sigs/controller-runtime/blob/main/pkg/client/client.go) client, which supports Go types natively. This eliminated the need to work with the unstructured type, making things smoother and less error-prone. This is backed by dedicated plugin **RBAC** impersonation that we introduced a couple releases ago. - + 4. 🔄 **Cloning and checking out PR**: Checking out a pull request can be tricky, especially when dealing with external contributors and their forks. Instead of reinventing the wheel, we integrated the widely-known `gh` CLI. It was easy to add an external dependency just by defining: ‍ + + +
"gh": {
URLs: map[string]string{
"darwin/amd64": "https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_amd64.zip//gh_2.32.1_macOS_amd64/bin",
"linux/amd64": "https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_amd64.tar.gz//gh_2.32.1_linux_amd64/bin",
// etc.
},
},
+ +Under the hood we use \`go-getter\` library which has a lot of great features. If you need to download assets from different sources, we recommend that library your projects as well. + +‍ ‍ +The trickiest part was to develop GitHub Events source. The best way is to use GitHub App with the webhook approach. However, we didn't want to require you to have an external endpoint exposed from your cluster. -
"gh": {
URLs: map[string]string{
"darwin/amd64": "https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_amd64.zip//gh_2.32.1_macOS_amd64/bin",
"linux/amd64": "https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_amd64.tar.gz//gh_2.32.1_linux_amd64/bin",
// etc.
},
},
Under the hood we use \`go-getter\` library which has a lot of great features. If you need to download assets from different sources, we recommend that library your projects as well. ‍ ‍ The trickiest part was to develop GitHub Events source. The best way is to use GitHub App with the webhook approach. However, we didn't want to require you to have an external endpoint exposed from your cluster. We started with [GitHub repository events endpoint](https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events). But it turned out that even though it serves events that we are interested in, it was not meant to be used for the real-time use-cases. We still integrate with the `events` API, but it's recommended for event subscription where time is not that important. For example, getting notification about new stars on your GitHub repositories: ‍ +We started with [GitHub repository events endpoint](https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events). But it turned out that even though it serves events that we are interested in, it was not meant to be used for the real-time use-cases. We still integrate with the `events` API, but it's recommended for event subscription where time is not that important. For example, getting notification about new stars on your GitHub repositories: ‍ -![Image 6: a white background with a number of different logos on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994ee3a6f72e3536300f4_stars.png) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994ee3a6f72e3536300f4_stars.png) ‍ To achieve our e2e goal, we decided to develop a custom polling mechanism that uses [pull request endpoint](https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests). The polling mechanism forces us to be more rational about the number of calls to fit into defined rate limits. We decided on two things: diff --git a/hack/assistant-setup/content/botkube.io__blog__doctor-plug-in-tutorial.md b/hack/assistant-setup/content/botkube.io__blog__doctor-plug-in-tutorial.md index ed8b9905..a82eca4e 100644 --- a/hack/assistant-setup/content/botkube.io__blog__doctor-plug-in-tutorial.md +++ b/hack/assistant-setup/content/botkube.io__blog__doctor-plug-in-tutorial.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/doctor-plug-in-tutorial Published Time: Jul 31, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,147 +17,138 @@ This Tutorial is about the new ChatGPT-powered Doctor plugin which allows for ea ### Table of Contents -* [Requirements](#requirements) -* [Method 1: Install the Doctor Plug into a new instance](#method-1-install-the-doctor-plug-into-a-new-instance) -* [Method 2: Install the Doctor plug-in into an already created Botkubeinstance.](#method-2-install-the-doctor-plug-in-into-an-already-created-botkubeinstance-) -* [Interactive Troubleshooting](#interactive-troubleshooting) -* [Support for Generic Questions](#support-for-generic-questions) -* [Scalable Plugin Pipelining](#scalable-plugin-pipelining) -* [Conclusion](#conclusion) -* [We'd Love Your Feedback](#we-d-love-your-feedback) +* [Requirements](#requirements-2) +* [Method 1: Install the Doctor Plug into a new instance](#method-1-install-the-doctor-plug-into-a-new-instance-2) +* [Method 2: Install the Doctor plug-in into an already created Botkubeinstance.](#method-2-install-the-doctor-plug-in-into-an-already-created-botkubeinstance--2) +* [Interactive Troubleshooting](#interactive-troubleshooting-2) +* [Support for Generic Questions](#support-for-generic-questions-2) +* [Scalable Plugin Pipelining](#scalable-plugin-pipelining-2) +* [Conclusion](#conclusion-2) +* [We'd Love Your Feedback](#we-d-love-your-feedback-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! #### Get started with Botkube Cloud -Discover the future of efficient Kubernetes troubleshooting with Botkube’s new [Doctor plug-in](https://botkube.io/integration/chatgpt-botkube-kubernetes-integration)! By leveraging ChatGPT's powerful capabilities, you can now troubleshoot your Kubernetes cluster with unparalleled ease and save valuable time in the process. Say goodbye to tedious and time-consuming tasks, as ChatGPT helps to automate much of the troubleshooting process, allowing you to concentrate on more critical aspects of your workflow. Moreover, ChatGPT's comprehensive analysis of your cluster configuration and resource utilization offers invaluable insights to optimize performance and cut down on costs. Real-time errors and recommendations enhance your troubleshooting experience, ensuring you're always up-to-date with the health of your cluster. Seamlessly integrated with major communication channels, Botkube empowers you to act swiftly on identified errors, keeping your Kubernetes environment running smoothly at all times. +Discover the future of efficient Kubernetes troubleshooting with Botkube’s new \[Doctor plug-in\](https://botkube.io/integration/chatgpt-botkube-kubernetes-integration)! By leveraging ChatGPT's powerful capabilities, you can now troubleshoot your Kubernetes cluster with unparalleled ease and save valuable time in the process. Say goodbye to tedious and time-consuming tasks, as ChatGPT helps to automate much of the troubleshooting process, allowing you to concentrate on more critical aspects of your workflow. Moreover, ChatGPT's comprehensive analysis of your cluster configuration and resource utilization offers invaluable insights to optimize performance and cut down on costs. Real-time errors and recommendations enhance your troubleshooting experience, ensuring you're always up-to-date with the health of your cluster. Seamlessly integrated with major communication channels, Botkube empowers you to act swiftly on identified errors, keeping your Kubernetes environment running smoothly at all times. -Learn more about Botkube's ChatGPT-powered Doctor plugin in our [release announcement](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor). +Learn more about Botkube's ChatGPT-powered Doctor plugin in our \[release announcement\](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor). -In this tutorial, we will walk you through the step-by-step process of setting up and utilizing Botkube's new [Doctor plug-in](https://docs.botkube.io/usage/executor/doctor), optimizing your team’s performance, and maximizing your Kubernetes productivity. +In this tutorial, we will walk you through the step-by-step process of setting up and utilizing Botkube's new \[Doctor plug-in\](https://docs.botkube.io/usage/executor/doctor), optimizing your team’s performance, and maximizing your Kubernetes productivity. -Requirements ------------- +\## Requirements -* A Slack workspace -* A [Botkube Cloud](http://app.botkube.io/) account -* \[OpenAI credits \[(https://openai.com/) Method 1: Install the Doctor Plug into a new instance ----------------------------------------------------- ### Creating a Botkube Cloud Account 1. On the Botkube [homepage](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. -2. Fill in the required information in the registration form. You can sign up with your email address or Github account. +\* A Slack workspace +\* A \[Botkube Cloud\](http://app.botkube.io) account +\* \[OpenAI credits \[(https://openai.com/) -* Click [here](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) for a more indepth Botkube installation tutorial +\## Method 1: Install the Doctor Plug into a new instance -### Connecting Kubernetes Cluster to Slack +\### Creating a Botkube Cloud Account -1. Select either the Wizard or the Block builder method to initiate the setup process for Botkube's Cloud Slack integration. +1\. On the Botkube \[homepage\](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. +2\. Fill in the required information in the registration form. You can sign up with your email address or Github account. + +\* Click \[here\](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) for a more indepth Botkube installation tutorial + +\### Connecting Kubernetes Cluster to Slack + +1\. Select either the Wizard or the Block builder method to initiate the setup process for Botkube's Cloud Slack integration. ![Image 2: Easy one click Kubernetes deployment for cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709dfd8e90bc79339fcd0_cQKP0DfzGkbQO4R8kCAnqr54pgSa_IKaPa756N-FFua5n9N1omSH9fg9nGI1JYNjRS6ZmkbNUYrZLK1Z2BmTjPVHBDP0U9jNpidqq7RIqKWJScUJ32pOPryOAp49HR6OoerKN7yJSu6yHr2DU1GDaoo.png) ‍ -2. Next, enter your instance display name. +2\. Next, enter your instance display name. ![Image 3: K8s cluster building GUI](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709efd8e90bc7933a1393_nAeC7-04jk70WellyEP2GM4m75jP4jrLhnmbjAkZr3rLlNi7zaD2bMLx8rvebpfqFIrvB8OSIxIqKezCZngk7ooCH6WAOT_1PBSQKz-sAAl9WRSq-GqtR1gmHmwC87Oq443Bzdu_sMKsHw-_g8Jwrfo.png) -‍ - -3. Select the _Official Botkube Slack_ option. (Note this option requires you to sign up for a 30 day free trial) +‍ +3\. Select the \*Official Botkube Slack\* option. (Note this option requires you to sign up for a 30 day free trial) ![Image 4: Official Slack Kubernetes bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709ffd8e90bc7933a2249_3GYyjQn-Uklnp1Bn8T7YmSOdKEaFnl3idDQcYJiD1mx7xeBbr6yvoRgbLI3Fir7TaW4a1N8l4tgB_Zbt6b3XryqzyYff4z1I_nffpWkoS6Hx7yPmmTrk2Z9tnAlXWUoM_VrAm0iBje2a8oaIiaGxRx0.png) ‍ -4. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. - -5. Select the workspace within Slack where you want to utilize Botkube. Botkube will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. +4\. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. +5\. Select the workspace within Slack where you want to utilize Botkube. Botkube will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. ![Image 5: Multicluster setup screen for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a0bae43806c67551203_v-0W_ZDNIBT2Z7lbvKemYUyidm6L4ftXfEXxY9t0i5d6NB3_A_wrkVIluEVKfh8ZCCSYan2mS8PfS0YXm8DmViUyII5FXmmaLUPy6deAhqmYypJr0mZCg8aOo1FckVZaX3LOlTK6Epso_FqKUAde3Qw.png) ‍ -6. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. +6\. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. ![Image 6: One click slack sign in](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a1d00209556840fc2aa_qCmpnXKLE-S-5GKx1PijNsYeJOqKsWffvD0NIp708myAL6SynM44bx0khhpKpQCX-LnUoIQ2t5JAbqjdOfxrQSxIJPZWLRKYrX0O1lKJJQQj0hmkIM_5ADswoPXLaRPrMmLwAtVCSAsGEbySEsGW0WY.png) -‍ ‍ - -7. Select the Plugins you would like to use. [Helm](https://docs.botkube.io/usage/executor/helm), [kubectl](https://docs.botkube.io/usage/executor/kubectl), and Kubernetes source are the Botkube default plug-ins. Select the [Doctor plug-in](https://docs.botkube.io/usage/executor/doctor). - -![Image 7: a screen shot of a web page showing a contact manager](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b8724cd267a8f2079e_S_D9N3SAYRhJit2YvTCT1mfdMWr6Ba5CAX33ioUVeqdNvcycYIkd7yrIZ5Av6kG-hVuQXtTODdwDYtzoCWuV2NMH5F0waTITlkQXvBxglTo8aU_feKRZqpp9pZcssPIvxotbXdoKE49GVO9r9CreqyY.png) - +‍ ‍ -8. Navigate to the OpenAI website [here](https://beta.openai.com/account/api-keys) and create your API key -9. Paste your API key into the empty box and press submit. +7\. Select the Plugins you would like to use. \[Helm\](https://docs.botkube.io/usage/executor/helm), \[kubectl\](https://docs.botkube.io/usage/executor/kubectl), and Kubernetes source are the Botkube default plug-ins. Select the \[Doctor plug-in\](https://docs.botkube.io/usage/executor/doctor). -![Image 8: a screenshot of the connect doctor page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb26bb53b2ce43074d_I-Jz17f6Ag1ojKmWY0MT8l-IgRvU82Q2Gfwqk9OQVLXHF4Wx_0yQM-iy3GPnmIgQrDm1_Nck_-M2bpccmV2VY9svcoSjN7yylToOVl21vWoeJb6pp_bldS9zT677JvGJ0022oJd5dWlKN06Nph8UAmw.png) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b8724cd267a8f2079e_S_D9N3SAYRhJit2YvTCT1mfdMWr6Ba5CAX33ioUVeqdNvcycYIkd7yrIZ5Av6kG-hVuQXtTODdwDYtzoCWuV2NMH5F0waTITlkQXvBxglTo8aU_feKRZqpp9pZcssPIvxotbXdoKE49GVO9r9CreqyY.png) -10. On the next page, you will have the option to also enable [Command Alias](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube)and [Botkube Actions](https://docs.botkube.io/usage/automated-actions/). Make your selection and click the Create button. +‍ +8\. Navigate to the OpenAI website \[here \](https://beta.openai.com/account/api-keys) and create your API key +9\. Paste your API key into the empty box and press submit. -![Image 9: a screen shot of the slack settings page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b95d087e15b6d1ec7d_zoOK3PqJeNz8R8Mgngk-Qssdni9rpMmx6-CMe1cGxvODqzVz-vb4cJ62ZbWeGfeoAudmnhkwKCzY8bb1UwAIoeefzAAFgwHfLKt4VNkU9kX_0Q8UJFhbWcqfLdJoLcmeNHAcluZPXeEA5I0FkkfQ4kA.png) +![Image 8](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb26bb53b2ce43074d_I-Jz17f6Ag1ojKmWY0MT8l-IgRvU82Q2Gfwqk9OQVLXHF4Wx_0yQM-iy3GPnmIgQrDm1_Nck_-M2bpccmV2VY9svcoSjN7yylToOVl21vWoeJb6pp_bldS9zT677JvGJ0022oJd5dWlKN06Nph8UAmw.png) -‍ - -11. You are now ready to start utilizing the Botkube Doctor plugin! - -Method 2: Install the Doctor plug-in into an already created Botkubeinstance. ------------------------------------------------------------------------------ - -### Creating your New Plug-In +10\. On the next page, you will have the option to also enable \[Command Alias\](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube)and \[Botkube Actions\](https://docs.botkube.io/usage/automated-actions/). Make your selection and click the Create button. -1. Select the `Add Plug-in` button +![Image 9](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b95d087e15b6d1ec7d_zoOK3PqJeNz8R8Mgngk-Qssdni9rpMmx6-CMe1cGxvODqzVz-vb4cJ62ZbWeGfeoAudmnhkwKCzY8bb1UwAIoeefzAAFgwHfLKt4VNkU9kX_0Q8UJFhbWcqfLdJoLcmeNHAcluZPXeEA5I0FkkfQ4kA.png) -![Image 10: a screenshot of a page showing different types of information](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b87c3808d8b8fb048d_fyMnDpgGrvfDOKs6zbiAj1SXGp5deepJ1_uWTLiYuXgcnv7tonGyf-NolV9U2d-IeH0nFMdnSpwX12xtV4355EoQ6kuWd2FmBEpjtpOrIc7UQQ5Mnc6YrB8kxajMO3yfbORKjh6Y6JYunOB5OLTfZAc.png) +‍ +11\. You are now ready to start utilizing the Botkube Doctor plugin! -‍ +\## Method 2: Install the Doctor plug-in into an already created Botkubeinstance. -2. Select the option for the Doctor plug-in +\### Creating your New Plug-In -![Image 11: a screen shot of a website with a button on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821ba302266c000e029ec_FbpyK0RLgMWySuuwKBVfVBtsX-eDAoIuGqze913li_eZyDDjWoOpj7JmmeXKci6M7xzbGddBcqLz17gYRuDN0ISndRLHtc2gvkApV9GJIXUNfn2o7B-J8Zg-lpiNe9UUMKsffwaQ1A_-qImmfhAw1UY.png) +1\. Select the \`Add Plug-in\` button -‍ +![Image 10](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b87c3808d8b8fb048d_fyMnDpgGrvfDOKs6zbiAj1SXGp5deepJ1_uWTLiYuXgcnv7tonGyf-NolV9U2d-IeH0nFMdnSpwX12xtV4355EoQ6kuWd2FmBEpjtpOrIc7UQQ5Mnc6YrB8kxajMO3yfbORKjh6Y6JYunOB5OLTfZAc.png) -3. Navigate to the OpenAI website [here](https://beta.openai.com/account/api-keys) and create your API key -4. Paste your API key into the empty field and press Submit. +‍ +2\. Select the option for the Doctor plug-in -![Image 12: a screenshot of the connect doctor page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb26bb53b2ce43074d_I-Jz17f6Ag1ojKmWY0MT8l-IgRvU82Q2Gfwqk9OQVLXHF4Wx_0yQM-iy3GPnmIgQrDm1_Nck_-M2bpccmV2VY9svcoSjN7yylToOVl21vWoeJb6pp_bldS9zT677JvGJ0022oJd5dWlKN06Nph8UAmw.png) +![Image 11](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821ba302266c000e029ec_FbpyK0RLgMWySuuwKBVfVBtsX-eDAoIuGqze913li_eZyDDjWoOpj7JmmeXKci6M7xzbGddBcqLz17gYRuDN0ISndRLHtc2gvkApV9GJIXUNfn2o7B-J8Zg-lpiNe9UUMKsffwaQ1A_-qImmfhAw1UY.png) -‍ +‍ +3\. Navigate to the OpenAI website \[here\](https://beta.openai.com/account/api-keys) and create your API key +4\. Paste your API key into the empty field and press Submit. -5. Select the Save button and refresh your browser. -6. Start interacting with your new Doctor Plug-in! +![Image 12](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb26bb53b2ce43074d_I-Jz17f6Ag1ojKmWY0MT8l-IgRvU82Q2Gfwqk9OQVLXHF4Wx_0yQM-iy3GPnmIgQrDm1_Nck_-M2bpccmV2VY9svcoSjN7yylToOVl21vWoeJb6pp_bldS9zT677JvGJ0022oJd5dWlKN06Nph8UAmw.png) -Interactive Troubleshooting ---------------------------- +‍ +5\. Select the Save button and refresh your browser. +6\. Start interacting with your new Doctor Plug-in! -When the Doctor AI detects an error or anomaly in the Kubernetes environment, it takes proactive steps to assist users in resolving the issue. Upon detecting an error event, the Doctor AI generates a Slack message with a `Get Help` button. Clicking on this button triggers the Doctor AI to provide users with actionable solutions and next steps to tackle the problem. This interactive troubleshooting approach empowers users with the knowledge and confidence to resolve Kubernetes issues swiftly. +\## Interactive Troubleshooting -Support for Generic Questions ------------------------------ +When the Doctor AI detects an error or anomaly in the Kubernetes environment, it takes proactive steps to assist users in resolving the issue. Upon detecting an error event, the Doctor AI generates a Slack message with a \`Get Help\` button. Clicking on this button triggers the Doctor AI to provide users with actionable solutions and next steps to tackle the problem. This interactive troubleshooting approach empowers users with the knowledge and confidence to resolve Kubernetes issues swiftly. +\## Support for Generic Questions Beyond its ability to tackle specific errors, the Doctor AI is also well-versed in answering general questions related to Kubernetes. Users can seek guidance on various Kubernetes concepts, best practices, or configurations directly within the Slack channel. This means no more interruptions to access a separate dashboard or documentation, making it easier to gain quick insights and expand Kubernetes expertise. -![Image 13: a screenshot of an email from adobe adobe adobe adobe ad](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb21a0701673853991__UHn0zhtq5mu4YOnbuJN0vHABCKyUNCqyhsohVmShvTAPqmc8RJo4DQNsiN-QDU2vZ03D-W9N8_x-G9jSQpxGfeErfnxuzMt4YCE7BavU_uuXf0nTRhDDzp3NaIedpaXj0_8ehtKPQdYiynaCK6sunk.png) - -Scalable Plugin Pipelining --------------------------- +![Image 13](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb21a0701673853991__UHn0zhtq5mu4YOnbuJN0vHABCKyUNCqyhsohVmShvTAPqmc8RJo4DQNsiN-QDU2vZ03D-W9N8_x-G9jSQpxGfeErfnxuzMt4YCE7BavU_uuXf0nTRhDDzp3NaIedpaXj0_8ehtKPQdYiynaCK6sunk.png) -The Doctor AI plugin's versatility extends beyond standalone usage. It can be easily combined with other [Botkube plug-ins](https://botkube.io/integrations), allowing users to create custom workflows tailored to their specific use cases. By pipelining the Doctor AI with other plugins, teams can orchestrate complex actions and integrations, further streamlining Kubernetes management processes. +\## Scalable Plugin Pipelining -Conclusion ----------- +The Doctor AI plugin's versatility extends beyond standalone usage. It can be easily combined with other \[Botkube plug-ins\](https://botkube.io/integrations), allowing users to create custom workflows tailored to their specific use cases. By pipelining the Doctor AI with other plugins, teams can orchestrate complex actions and integrations, further streamlining Kubernetes management processes. +\## Conclusion Botkube's new Doctor plug-in brings the future of efficient Kubernetes troubleshooting to your fingertips. With the power of ChatGPT, you can now effortlessly troubleshoot your Kubernetes cluster, saving precious time and streamlining your workflow. Bid farewell to tedious tasks, as ChatGPT automates much of the troubleshooting process, allowing you to focus on critical aspects of your work. -With seamless integration into [major communication channels](http://botkube.io/integrations), Botkube empowers you to take swift action on identified errors, ensuring your Kubernetes environment runs smoothly wherever you are. +With seamless integration into \[major communication channels\](http://botkube.io/integrations), Botkube empowers you to take swift action on identified errors, ensuring your Kubernetes environment runs smoothly wherever you are. -### Sign up now +\### Sign up now -Whether you're a seasoned Kubernetes pro or just getting started, Botkube helps make troubleshooting Kubernetes easier and faster. [Sign up now for free](http://app.botkube.io/) and [join the community](https://join.botkube.io/) of users who are already benefiting from the power of Botkube. +Whether you're a seasoned Kubernetes pro or just getting started, Botkube helps make troubleshooting Kubernetes easier and faster. \[Sign up now for free\](http://app.botkube.io) and \[join the community\](https://join.botkube.io/) of users who are already benefiting from the power of Botkube. -We'd Love Your Feedback ------------------------ +\## We'd Love Your Feedback -We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give away cool Botkube plushies and t-shirts. Just email [maria@kubeshop.io](mailto:maria@kubeshop.io) or [set up a meeting](https://calendly.com/maria-botkube/30min). +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give away cool Botkube plushies and t-shirts. Just email \[maria@kubeshop.io\](mailto:maria@kubeshop.io) or \[set up a meeting\](https://calendly.com/maria-botkube/30min). -You can also talk to us in the Botkube GitHub [issues](https://github.com/kubeshop/botkube/issues), connect with others and get help in the [Botkube Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can also talk to us in the Botkube GitHub \[issues\](https://github.com/kubeshop/botkube/issues), connect with others and get help in the \[Botkube Slack community\](http://join.botkube.io), or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring.md b/hack/assistant-setup/content/botkube.io__blog__empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring.md index 5eee29ba..58881ea0 100644 --- a/hack/assistant-setup/content/botkube.io__blog__empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring.md +++ b/hack/assistant-setup/content/botkube.io__blog__empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-obs Published Time: Feb 08, 2024 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -32,7 +32,7 @@ Organizations of all sizes are increasingly adopting Kubernetes, leading to the Why Kubernetes Multi-Cluster Environments? ------------------------------------------ -![Image 2: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b9697c82dc01bf31f863b1_automation.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b9697c82dc01bf31f863b1_automation.gif) Multi-cluster environments offer a variety of benefits, including increased fault tolerance and high availability, geographical workload distribution for reduced latency, and isolation for security, compliance, and resource management. Regional clusters can be customized to meet local user needs, minimizing latency and complying with regional data laws. Dev/Test clusters provide segregated environments for uninterrupted development and testing, while production clusters prioritize high availability and performance for an exceptional customer experience. Moreover, automating alerting and command execution processes further boosts operational efficiency. Tools like Botkube are critical for enabling teams to quickly receive real-time notifications and seamlessly integrate automations for faster command execution. @@ -48,11 +48,11 @@ Additionally, handling network latency and complexity in multi-cluster setups pr Optimizing Efficiency in Kubernetes Multi-Cluster Management ------------------------------------------------------------ -![Image 3: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) Navigating and managing multiple clusters can present challenges, but utilizing [observability tools](https://botkube.io/learn/kubernetes-observability-best-practices) can simplify the process by providing insights into cluster performance, resource utilization, and potential issues across the entire multi-cluster environment.In this regard, Botkube offers convenient features for multi-cluster management, allowing users to easily switch between clusters, view connected deployments, and establish default instances for specific workspaces. These capabilities streamline the management of multi-cluster production environments. Efficiency is key when troubleshooting across multiple clusters. Botkube enables users to streamline command execution by executing commands simultaneously across all connected clusters, eliminating the need for manual actions on each cluster. -![Image 4: a screen shot of a screen showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65c535a6fc3e2e7a64e5f1f4_202402081509-ezgif.com-video-to-gif-converter.gif) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65c535a6fc3e2e7a64e5f1f4_202402081509-ezgif.com-video-to-gif-converter.gif) Consider the scenario of managing clusters across a development environment and two production environments in different locations. With Botkube, users can seamlessly connect their clusters to their preferred communication platform and initiate multi-cluster management within minutes. They can set a default instance for the Prod channel, deploy an application in the Dev environment, verify the application's status using kubectl and aliases, troubleshoot and debug issues in the Prod US cluster, review logs and cluster-specific commands, and execute commands for all clusters using the "all clusters'' option. This integrated approach to multi-cluster management with Botkube enhances efficiency and facilitates smoother operations across diverse Kubernetes environments. By providing seamless control and visibility across clusters, Botkube empowers teams to efficiently manage their Kubernetes environments and ensure optimal performance and reliability. diff --git a/hack/assistant-setup/content/botkube.io__blog__enhancing-gitops-workflows-with-botkube.md b/hack/assistant-setup/content/botkube.io__blog__enhancing-gitops-workflows-with-botkube.md index 935dd743..9344cf09 100644 --- a/hack/assistant-setup/content/botkube.io__blog__enhancing-gitops-workflows-with-botkube.md +++ b/hack/assistant-setup/content/botkube.io__blog__enhancing-gitops-workflows-with-botkube.md @@ -5,25 +5,23 @@ URL Source: https://botkube.io/blog/enhancing-gitops-workflows-with-botkube Published Time: Aug 23, 2023 Markdown Content: -In the ever-evolving landscape of software development and operations, efficient collaboration, seamless communication, and swift troubleshooting are the cornerstones of success. GitOps is a game-changing method that makes development operations smoother by using version control systems. While GitOps introduces an innovative method that refines development operations, it's not without its challenges. Enter [Botkube](http://botkube.io/) - a collaborative troubleshooting tool designed specifically for Kubernetes. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. It can also be harnessed as a powerful tool that can optimize GitOps workflows by streamlining manual processes, fostering real-time collaboration, and centralizing knowledge. In this blog post, we delve into the capabilities of Botkube and how it can significantly elevate your GitOps practices. +In the ever-evolving landscape of software development and operations, efficient collaboration, seamless communication, and swift troubleshooting are the cornerstones of success. GitOps is a game-changing method that makes development operations smoother by using version control systems. While GitOps introduces an innovative method that refines development operations, it's not without its challenges. Enter \[Botkube\](http://botkube.io) - a collaborative troubleshooting tool designed specifically for Kubernetes. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. It can also be harnessed as a powerful tool that can optimize GitOps workflows by streamlining manual processes, fostering real-time collaboration, and centralizing knowledge. In this blog post, we delve into the capabilities of Botkube and how it can significantly elevate your GitOps practices. -What is GitOps? ---------------- +\## What is GitOps? GitOps is an operational framework that evolved from the core principles of DevOps, which include application development strategies like version control, collaborative workflows, compliance adherence, and continuous integration/continuous deployment (CI/CD). It hinges on four core principles: -**Declarative:** Entire system described declaratively, using facts over instructions. Git becomes the source of truth for Kubernetes deployment. +\*\*Declarative:\*\* Entire system described declaratively, using facts over instructions. Git becomes the source of truth for Kubernetes deployment. -**Versioned and Immutable:** Canonical state stored in version-controlled Git repository, enabling simple rollbacks and audit trails. +\*\*Versioned and Immutable:\*\* Canonical state stored in version-controlled Git repository, enabling simple rollbacks and audit trails. -**Automated Pull:** Changes from Git to Kubernetes occur automatically, separating the operational environment from the defined state. Policies drive automated deployment. +\*\*Automated Pull:\*\* Changes from Git to Kubernetes occur automatically, separating the operational environment from the defined state. Policies drive automated deployment. -**Continuous Reconciliation:** Software agents detect deviations, ensuring the system is self-sufficient and resilient to human errors. +\*\*Continuous Reconciliation:\*\* Software agents detect deviations, ensuring the system is self-sufficient and resilient to human errors. The Gitops framework applies these practices to the realm of infrastructure automation and centers Git as the foundation for a streamlined approach to software deployment -Benefits of GitOps ------------------- +\## Benefits of GitOps At its core, GitOps empowers organizations to oversee their entire infrastructure and application development lifecycle through a singular, unified tool. This innovative approach fosters unprecedented collaboration and coordination among teams, paving the way for streamlined workflows and minimizing the occurrence of errors. From an improved developer experience to reduced costs and accelerated deployments, @@ -31,91 +29,102 @@ Swift problem resolution becomes a reality, transforming the operational landsca GitOps redefines the infrastructure and application lifecycle through a unified tool, driving collaboration and streamlined workflows while minimizing errors. This approach yields swift problem resolution and improves developer experience. It ensures auditable changes, heightened reliability, consistency, and standardization, underpinned by strong security measures. This translates to increased productivity, faster development, and efficient operations. With GitOps, compliance and auditing become seamless, incident response is expedited, and security is fortified. -The Pitfalls of GitOps ----------------------- +\## The Pitfalls of GitOps The manual approach to GitOps presents several challenges that hinder efficiency. Firstly, setting up and configuring GitOps tools on your local environment is a prerequisite. Additionally, directly managing connections to the Kubernetes cluster becomes a time-consuming obligation, involving context switches for various deployment stages. Handling repositories by manually cloning and inspecting pull requests for changes adds complexity to the workflow. Lastly, sharing updates and reports across platforms like Slack and GitHub requires constant navigation, demanding extra effort and impacting seamless communication. -‍ - -### Auditing Complexity +‍ +\### Auditing Complexity While Git provides an audit trail for infrastructure changes, this process is not without its complexities. Regulatory compliance and code reviews demand meticulous tracking of modifications. However, identifying the relevant repository, configuration file, and commit history can be a time-consuming task, especially for intricate applications with numerous data points. Additionally, the ability to force-push commits introduces the risk of inadvertently removing critical information from the central repository, further complicating the audit process. -### Scalability Hurdles +\### Scalability Hurdles The scalability of GitOps can pose challenges, particularly as organizations expand. To effectively implement GitOps, maintaining a comprehensive record of pull requests and issues is crucial, necessitating a high level of visibility and accountability. This demand is more manageable in smaller organizations but can become overwhelming for enterprises with an extensive portfolio of repositories, environments, and applications. The complexities of managing a larger setup require a simplified structure with limited repositories and configuration files to fully harness GitOps benefits. -### Governance Complexity +\### Governance Complexity Automated changes at scale are powerful yet come with substantial responsibilities. Organizations adopting GitOps face the task of managing changes efficiently while ensuring security. The potential introduction of security vulnerabilities through GitOps-driven alterations could lead to severe consequences. Although automation tools are invaluable, many open-source GitOps solutions lack built-in governance capabilities. A proactive approach to addressing this challenge is integrating policy as code (PaC) to embed policy-based governance into the software development process, mitigating risks and fostering control. -‍ - -How Botkube Addresses these Challenges --------------------------------------- +‍ +\## How Botkube Addresses these Challenges Navigating the realm of GitOps workflows can be more efficient with Botkube. It adeptly addresses various challenges, from scalability concerns to auditing needs. By incorporating features like Automatic Issue Reporting, Implementing Best Practices, Improved Developer Experience, and Efficient Monitoring and Action, Botkube streamlines your team's operations, optimizing their efficiency within the GitOps framework. ‍ -![Image 1: a screen shot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) -### Automatic Issue Reporting +\### Automatic Issue Reporting Botkube introduces a solution to scalability concerns through its automatic issue reporting feature. By identifying issues in Kubernetes environments and promptly notifying relevant parties, Botkube streamlines problem detection and resolution. This dynamic functionality alleviates the burden of monitoring multiple repositories and applications, enabling smoother scalability within the GitOps framework. -### Implementing Best Practices +\### Implementing Best Practices GitOps, at its core, thrives on best practices that fortify its deployment. The integration of practices such as Policy as Code (PaC) and rigorous security scanning bolsters the foundation of governance. With PaC, organizations can encode policies directly into their version control repositories, ensuring that automated changes align with established protocols. Concurrently, security scanning serves as a robust barrier against vulnerabilities, preventing potentially risky alterations from being incorporated into the automated process. -### Improved Developer Experience +\### Improved Developer Experience -In a GitOps workflow, Botkube takes the lead by offering teams unmatched insights and control over their Kubernetes resources. It acts as a window into active clusters, functioning as the central hub for informed actions. With Botkube's capabilities, teams can receive real-time alert of changes and scan results, facilitating well-informed decision-making. Whether it's detecting changes or evaluating scan outcomes, Botkube's centralized interface ensures the smooth execution of every necessary action. +In a GitOps workflow, Botkube takes the lead by offering teams  unmatched insights and control over their Kubernetes resources. It acts as a window into active clusters, functioning as the central hub for informed actions. With Botkube's capabilities, teams can  receive real-time alert of changes and scan results, facilitating well-informed decision-making. Whether it's detecting changes or evaluating scan outcomes, Botkube's centralized interface ensures the smooth execution of every necessary action. -### Efficient Monitoring and Action +\### Efficient Monitoring and Action Botkube excels at monitoring Kubernetes resources, which lays the foundation for effective governance. Through Botkube, potential deviations from policies or security standards are quickly identified. This empowers the system to swiftly respond to unexpected issues in real-time. Equipped with a comprehensive overview of the entire automated process, a team can confidently take informed actions or implement automations to address any discrepancies. By incorporating best practices, harnessing Botkube's insights, and aligning with policies, organizations not only bolster security but also enhance the reliability and integrity of their automated deployments. -Enter Botkube: A Smoother GitOps Workflow ------------------------------------------ +\## Enter Botkube: A Smoother GitOps Workflow ‍ -![Image 2: a screen shot of a screen showing a screen showing a screen showing a screen showing a screen showing a screen showing](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6946be4cd9b0c47a55f75_flux-interactivity-1.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6946be4cd9b0c47a55f75_flux-interactivity-1.gif) ‍ Botkube emerges as the solution to these challenges, making the GitOps workflow not just smoother, but remarkably efficient. Here's how Botkube transforms the game: -### Real-time Collaboration +\### Real-time Collaboration Imagine a scenario where crucial alerts about pod crashes, resource constraints, or deployment failures are instantly delivered to your preferred chat platform. Botkube ensures that team members are promptly informed, enabling quick decision-making and streamlined troubleshooting. No more delays or communication gaps – Botkube fosters instant collaboration in its truest sense. -### Centralized Knowledge +\### Centralized Knowledge With Botkube, all Kubernetes-related discussions, diagnoses, and actions unfold within your chat platform. This not only promotes the sharing of knowledge but also establishes a centralized repository of information and actions taken. Bid farewell to scattered conversations and context loss; everything is meticulously preserved for effortless access and accelerated onboarding of new team members. -### Turbocharged Efficiency +\### Turbocharged Efficiency Botkube's automation capabilities eradicate repetitive tasks, allowing lightning-fast actions via simple chat commands. Whether scaling deployments, examining logs, or rolling back changes, these actions seamlessly integrate into your chat conversations. This fluid workflow minimizes context switching, amplifies productivity, and accelerates application deployment and management. -### Flexibility and Scalability +\### Flexibility and Scalability Be it a single Kubernetes cluster or a sprawling array of them, Botkube adapts effortlessly. Its scalability ensures that you can effectively monitor and manage your infrastructure without limitations. Moreover, Botkube's extensible architecture empowers you to integrate custom alerting mechanisms or notifications, tailoring the tool to precisely match your organizational needs. -### Optimizing Flux +\### Optimizing Flux -![Image 3: a screen shot of a wordpress page with a purple background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6c1703e7d7fa16f63c0db_ezgif.com-resize.gif) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6c1703e7d7fa16f63c0db_ezgif.com-resize.gif) The [Botkube Flux executor](https://botkube.io/blog/botkube-v1-3-0-release-notes) streamlines the diff process by enabling a one-command execution for diffing between a specific pull request and the cluster state. An example command could be: -`@BotKube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch]` This command automates multiple tasks, including identifying the associated GitHub repository linked to the provided kustomization, repository cloning, pull request checkout, and comparison of pull request changes with the present cluster state. The results of this comparison are shared by posting a diff report on the designated Slack channel, allowing team members to easily review and discuss the alterations. Furthermore, the tool offers users a few additional buttons: * Option to post the diff report as a GitHub comment directly on the corresponding pull request. This feature provides intentionality and user control over the sharing of potentially sensitive information. * Ability to approve the pull request. * Access to view the details of the pull request. ‍ Conclusion ---------- In conclusion, Botkube is a revolutionary tool that elevates GitOps workflows by eradicating manual hurdles, propelling real-time collaboration, and consolidating knowledge. Embrace Botkube, and empower your team with the tools to succeed in the fast-paced world of modern software development and operations. Get Started with Botkube's Flux Plugin -------------------------------------- Ready to try it out on your own? The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/executor/flux). +\`\`\`@BotKube flux diff kustomization podinfo --path ./kustomize --github-ref \[PR Number| URL | Branch\] +\`\`\` + +This command automates multiple tasks, including identifying the associated GitHub repository linked to the provided kustomization, repository cloning, pull request checkout, and comparison of pull request changes with the present cluster state. The results of this comparison are shared by posting a diff report on the designated Slack channel, allowing team members to easily review and discuss the alterations. Furthermore, the tool offers users a few additional buttons: + +\* Option to post the diff report as a GitHub comment directly on the corresponding pull request. This feature provides intentionality and user control over the sharing of potentially sensitive information. +\* Ability to approve the pull request. +\* Access to view the details of the pull request. + +‍ +\## Conclusion + +In conclusion, Botkube is a revolutionary tool that elevates GitOps workflows by eradicating manual hurdles, propelling real-time collaboration, and consolidating knowledge. Embrace Botkube, and empower your team with the tools to succeed in the fast-paced world of modern software development and operations. + +\## Get Started with Botkube's Flux Plugin + +Ready to try it out on your own? The easiest way to configure it is through the \[Botkube web app\](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your \[Botkube YAML configuration\](https://docs.botkube.io/configuration/executor/flux). -Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use the Flux plugin in the [documentation](https://docs.botkube.io/usage/executor/flux/). +Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use the Flux plugin in the \[documentation\](https://docs.botkube.io/usage/executor/flux/). -We’d love to hear how you are using Gitops! Share your experiences with us in the Botkube [Slack community](http://join.botkube.io/) or [email our Developer Advocate, Maria](mailto:maria@kubeshop.io) and we’ll send you some fun swag. +We’d love to hear how you are using Gitops! Share your experiences with us in the Botkube \[Slack community\](http://join.botkube.io/) or \[email our Developer Advocate, Maria\](mailto:maria@kubeshop.io) and we’ll send you some fun swag. ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__explore-the-new-era-of-aiops-with-botkubes-ai-assistant.md b/hack/assistant-setup/content/botkube.io__blog__explore-the-new-era-of-aiops-with-botkubes-ai-assistant.md index 76cfe67c..7a9191ea 100644 --- a/hack/assistant-setup/content/botkube.io__blog__explore-the-new-era-of-aiops-with-botkubes-ai-assistant.md +++ b/hack/assistant-setup/content/botkube.io__blog__explore-the-new-era-of-aiops-with-botkubes-ai-assistant.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-a Published Time: Mar 11, 2024 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,106 +17,99 @@ Discover how to revolutionize Kubernetes management with Botkube's AI Assistant! ### Table of Contents -* [Getting Started with Botkube's AI Assistant](#getting-started-with-botkube-s-ai-assistant) -* [How to use Botkube's AI Assistant](#how-to-use-botkube-s-ai-assistant) -* [Conclusion](#conclusion) -* [Get Started Today!](#get-started-today-) +* [Getting Started with Botkube's AI Assistant](#getting-started-with-botkube-s-ai-assistant-2) +* [How to use Botkube's AI Assistant](#how-to-use-botkube-s-ai-assistant-2) +* [Conclusion](#conclusion-2) +* [Get Started Today!](#get-started-today--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! #### Start Receiving Kubernetes Notifications Now with Botkube Cloud -Kubernetes management requires lots of expertise. In the era of artificial intelligence, this complexity has led to the advent of [AIOps](https://botkube.io/learn/aiops-tools)—artificial intelligence for IT operations—which aims to enhance operational processes through the use of AI. In addition, Kubernetes Assistant tools like [Botkube's AI Assistant](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) have launched in response to the challenge of Kubernetes developer experience. They can simplify the Kubernetes experience through automation, real-time monitoring, and intelligent troubleshooting directly from chat platforms. These new tools are vital for both seasoned DevOps professionals and newcomers to make Kubernetes operations more accessible and efficient. +Kubernetes management requires lots of expertise. In the era of artificial intelligence, this  complexity has led to the advent of \[AIOps\](https://botkube.io/learn/aiops-tools)—artificial intelligence for IT operations—which aims to enhance operational processes through the use of AI. In addition, Kubernetes Assistant tools like \[Botkube's AI Assistant\](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) have launched in response to the challenge of Kubernetes developer experience. They can simplify the Kubernetes experience through automation, real-time monitoring, and intelligent troubleshooting directly from chat platforms. These new tools are vital for both seasoned DevOps professionals and newcomers to make Kubernetes operations more accessible and efficient. This tutorial walks you through how to use Botkube's AI Assistant to modernize, automate, and to enhance your Kubernetes management workflow. -**Getting Started with Botkube's AI Assistant** ------------------------------------------------ +\## **Getting Started with Botkube's AI Assistant** -### **Prerequisites** +\### **Prerequisites** Before exploring Botkube's AI Assistant, you’ll need: -* A Botkube account +\- A Botkube account -* Access to a Kubernetes cluster. +\- Access to a Kubernetes cluster. -* A chat platform supported by Botkube (e.g., Slack, Microsoft Teams). +\- A chat platform supported by Botkube (e.g., Slack, Microsoft Teams). +1\. **\*\*Create Your Botkube Account:\*\*** \[Create an account\](http://app.botkube.io/) to get started. -1. ****Create Your Botkube Account:**** [Create an account](http://app.botkube.io/) to get started. +\*\*Note for Existing Users:\*\* Ensure your setup is upgraded to version 1.9 or later before starting to use Botkube's AI Assistant. -**Note for Existing Users:** Ensure your setup is upgraded to version 1.9 or later before starting to use Botkube's AI Assistant. - -#### For Open Source Users - -* Follow our [straightforward guide](https://botkube.io/blog/botkube-open-source-to-cloud-migration) to migrate your OSS instances to Botkube. +\#### For Open Source Users +\- Follow our [straightforward guide](https://botkube.io/blog/botkube-open-source-to-cloud-migration) to migrate your OSS instances to Botkube. ‍ ‍ -![Image 2: a screen shot of the sign in page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd856e5a6e7c2b404c66d_N1o3vsdP6wCYKbJZGkhQRxDQXG9z_jKjVoZjvGeUH2CddQSNd0IY8Ue1-0CfDX5LWhmtSNYgncFxPntT9j3kr_YuzWezKrZXDmYTB-VAKuU2oXXOZ3UOGq8DrBNckB2ipzta_zpdWMNidFY7lNukoJs.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd856e5a6e7c2b404c66d_N1o3vsdP6wCYKbJZGkhQRxDQXG9z_jKjVoZjvGeUH2CddQSNd0IY8Ue1-0CfDX5LWhmtSNYgncFxPntT9j3kr_YuzWezKrZXDmYTB-VAKuU2oXXOZ3UOGq8DrBNckB2ipzta_zpdWMNidFY7lNukoJs.png) ‍ -2. ****Cluster Integration:**** Connect your Kubernetes cluster with Botkube by following the straightforward setup guide. This step is essential for enabling the AI Assistant to interact with your cluster. +2\. **\*\*Cluster Integration:\*\*** Connect your Kubernetes cluster with Botkube by following the straightforward setup guide. This step is essential for enabling the AI Assistant to interact with your cluster. -![Image 3: a screen shot of a landing page for a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd86310dd50a06df954e2_oeh6mJwm7VXV8-qP22EHYCGBGTD3Vkj_oNVMyhDANhHg-oI3h4xHJ2GQ_EMtiqxtwkKTdEsN73su0lsORSgBBuxnd3hL-KNkAyVdwLn5Qeo54tpzPL9Emihf-l1B-YdyvhlN8DJMCvmjtIIBytLwleo.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd86310dd50a06df954e2_oeh6mJwm7VXV8-qP22EHYCGBGTD3Vkj_oNVMyhDANhHg-oI3h4xHJ2GQ_EMtiqxtwkKTdEsN73su0lsORSgBBuxnd3hL-KNkAyVdwLn5Qeo54tpzPL9Emihf-l1B-YdyvhlN8DJMCvmjtIIBytLwleo.png) ‍ -3. **Initiate AI Assistance:** After connecting your instance, the AI Assistant feature is automatically enabled as part of the installation process. Begin your interaction with the AI Assistant by using: **`@Botkube ai hi`** +3\. **Initiate AI Assistance:** After connecting your instance, the AI Assistant feature is automatically enabled as part of the installation process. Begin your interaction with the AI Assistant by using: **`@Botkube ai hi`** -![Image 4: a screen shot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd86f1927490939066d7b_jdK_nbhFbWzCMwC8aCYHZ5o7JZJ4G1LOVwrcWtEoEC1YlFx9oQzja864BYJEf1Ber1UtBcV2nB_y5ZIgf6C1-Sl8z-gbX7Y3jPXGemQc_yT4xeSw9JVTZjyIdqq7wWwmzunejS2Ncep2JV0gN8DgKsQ.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd86f1927490939066d7b_jdK_nbhFbWzCMwC8aCYHZ5o7JZJ4G1LOVwrcWtEoEC1YlFx9oQzja864BYJEf1Ber1UtBcV2nB_y5ZIgf6C1-Sl8z-gbX7Y3jPXGemQc_yT4xeSw9JVTZjyIdqq7wWwmzunejS2Ncep2JV0gN8DgKsQ.png) ‍ -**How to use Botkube's AI Assistant** -------------------------------------- +\## **How to use Botkube's AI Assistant** -### **Automated Incident Reporting** +\### **Automated Incident Reporting** -![Image 5: a screenshot of a tweet from a twitter account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a037ee1160c06c47b0cc_LopU3vbDXwRSiyWbJgwCkZ2vsifEeikrsi9f16OWeJE83BBJGt2tqJn2O-2mq8nTvDlNejOFdH2LyHXcKccnsFcyjeDoccaBZSLLuxm3HZtsE3-TBmPgOEkLEjSr9_K5DcIvpZkd1KVFyN4uly3aImU.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a037ee1160c06c47b0cc_LopU3vbDXwRSiyWbJgwCkZ2vsifEeikrsi9f16OWeJE83BBJGt2tqJn2O-2mq8nTvDlNejOFdH2LyHXcKccnsFcyjeDoccaBZSLLuxm3HZtsE3-TBmPgOEkLEjSr9_K5DcIvpZkd1KVFyN4uly3aImU.png) Botkube's AI Assistant simplifies incident management by analyzing issues and sharing detailed reports in your chat platform. -### **To use Botkube's AI Assistant for incident management:** +\### **To use Botkube's AI Assistant for incident management:** -1. Integrate Botkube with your [preferred chat platform](https://botkube.io/integrations). +1\. Integrate Botkube with your \[preferred chat platform\](https://botkube.io/integrations). -2. Ask Botkube questions directly in your chat: +2\. Ask Botkube questions directly in your chat: **@Botkube ai are there any failing pods in my default namespace?** - In two steps, you can get immediate, detailed insights into your cluster's health and kick start your troubleshooting process. It also makes it easy to highlight and escalate critical issues with your team right in the chat. -### **Cluster Analysis and Automated Runbooks** +\### **Cluster Analysis and Automated Runbooks** -![Image 6: a screenshot of a twitter page showing a message](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) ‍ AI Assistant significantly enhances Kubernetes diagnostics by offering detailed analysis and automated runbooks for issue resolution, simplifying the management process. -![Image 7: a screenshot of a chat window on a computer screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) When an error occurs, Botkube will offer an in-depth analysis. -1. **Ask a Question**: Use the command `@Botkube ai how do I fix this?` to describe your issue. -2. **Receive Guidance**: Botkube will offer a step-by-step guide to address the problem, aiming for a more reliable and efficient cluster. -3. **Apply Fixes**: Implement the provided suggestions by executing commands directly in your chat window. +1\. \*\*Ask a Question\*\*: Use the command \`@Botkube ai how do I fix this?\` to describe your issue. +2\. \*\*Receive Guidance\*\*: Botkube will offer a step-by-step guide to address the problem, aiming for a more reliable and efficient cluster. +3\. \*\*Apply Fixes\*\*: Implement the provided suggestions by executing commands directly in your chat window. -**Conclusion** --------------- +\## **Conclusion** -Botkube's AI Assistant redefines [Kubernetes management](https://botkube.io/learn/kubernetes-observability-best-practices), offering AI-enhanced troubleshooting and operational efficiency. By integrating AI Assistant into your workflow, you unlock a more accessible, reliable, and efficient Kubernetes ecosystem. Start your journey towards AI-driven Kubernetes management today and experience the benefits of having a virtual platform engineer by your side. +Botkube's AI Assistant redefines \[Kubernetes management\](https://botkube.io/learn/kubernetes-observability-best-practices), offering AI-enhanced troubleshooting and operational efficiency. By integrating AI Assistant into your workflow, you unlock a more accessible, reliable, and efficient Kubernetes ecosystem. Start your journey towards AI-driven Kubernetes management today and experience the benefits of having a virtual platform engineer by your side. -**Get Started Today!** ----------------------- +\## **Get Started Today!** -Starting with our AI Assistant is simple and intuitive. It's included in every Botkube Cloud instance, ensuring a smooth integration for users updating to the latest version. **New users can easily begin with Botkube, quickly enjoying AI-enhanced Kubernetes management.** [Start with Botkube here](http://app.botkube.io/). For those using the open-source version, [follow our migration guide](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to swiftly upgrade to Botkube Cloud and access all new features. +Starting with our AI Assistant is simple and intuitive. It's included in every Botkube Cloud instance, ensuring a smooth integration for users updating to the latest version. \*\*New users can easily begin with Botkube, quickly enjoying AI-enhanced Kubernetes management.\*\* \[Start with Botkube here\](http://app.botkube.io). For those using the open-source version, \[follow our migration guide\](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to swiftly upgrade to Botkube Cloud and access all new features. Dive into the Botkube AI Assistant for an optimized Kubernetes management experience. Sign up now to integrate real-time, AI-powered support into your cluster management, improving efficiency and reliability. With the Botkube AI Assistant, you gain a 24/7 platform engineer at your service. diff --git a/hack/assistant-setup/content/botkube.io__blog__five-essential-kubernetes-tasks.md b/hack/assistant-setup/content/botkube.io__blog__five-essential-kubernetes-tasks.md index 8507e211..1579031b 100644 --- a/hack/assistant-setup/content/botkube.io__blog__five-essential-kubernetes-tasks.md +++ b/hack/assistant-setup/content/botkube.io__blog__five-essential-kubernetes-tasks.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/five-essential-kubernetes-tasks Published Time: Jan 11, 2024 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -35,7 +35,7 @@ If you're curious about the exciting possibilities of using Kubernetes in your c Real-time Kubernetes Monitoring with Prometheus ----------------------------------------------- -![Image 2: a screenshot of a page with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65baac094d6cd1122a89f719_Screenshot_Template_Botkube%20(3).png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65baac094d6cd1122a89f719_Screenshot_Template_Botkube%20(3).png) [Real-time monitoring](https://botkube.io/solutions) of Kubernetes is the foundation of Botkube's features. With this feature, you gain access to a live, dynamic view of your Kubernetes environment. While Botkube has a long-standing history of supporting Kubernetes events, Kubernetes clusters often generate an abundance of state events and metrics. Typically, tools like kube-state-metrics and custom applications are configured to utilize Prometheus as a metrics store. Prometheus' Alertmanager then identifies metrics in anomalous states and triggers corresponding alerts. To seamlessly integrate this functionality into Botkube, we've developed the [Botkube source plugin for Prometheus](https://botkube.io/integration/prometheus). @@ -52,19 +52,19 @@ Botkube's [integration with Argo CD](https://botkube.io/integration/argo-cd-botk The Botkube ArgoCD plugin simplifies Argo CD notifications by unifying platform secrets and notifications across projects like Kubernetes, Prometheus, and Argo. It enhances visibility by consolidating GitHub and Argo events, so users can now receive real-time notifications from their Argo CD deployments directly in their communication channels, especially valuable for teams managing Kubernetes workflows within GitHub. Setting up ArgoCD notification natively is a complex process that requires installing triggers and templates, adding email credentials to a secret, registering the email notification service with Gmail credentials, and subscribing to notifications for specific applications or projects. To begin receiving notifications with Botkube, simply provide your application name, Argo URL, and namespace, and ensure ArgoCD is enabled in your RBAC permissions. This plugin also allows you to utilize Argo CD's native notification system in chat platforms like MS Teams and Discord which are not supported natively. -![Image 3: a screenshot of a screen showing the status of an application](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09c855b42178c42a1d9b_jOhrHB90gwPhqwSU94v3y1Q7Q2Y_1Ltfap5j-mY6XbgieOkVITkVOoOboVTaVHT55onYtmncvcVt_zMrOQehiIOKbM2unJi5NKvWpXhjN222CbEB31JP_oSxT9QowgHWFcKv0YoK2FvZZvJMwGpET4s.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09c855b42178c42a1d9b_jOhrHB90gwPhqwSU94v3y1Q7Q2Y_1Ltfap5j-mY6XbgieOkVITkVOoOboVTaVHT55onYtmncvcVt_zMrOQehiIOKbM2unJi5NKvWpXhjN222CbEB31JP_oSxT9QowgHWFcKv0YoK2FvZZvJMwGpET4s.png) Botkube sending ArgoCD notifications to Slack ### Automating Kubernetes Operations -![Image 4: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) ‍ Botkube excels in fostering collaboration and efficiency through its integration with popular chat platforms. Botkube's [automated action feature](https://docs.botkube.io/configuration/action) transforms Kubernetes management for DevOps teams.It introduces automated commands triggered by events, delivering context to communication channels seamlessly. Some examples of these automations are “get-created-resource” -![Image 5: a screen shot of a web page showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d1bc5724b39fa1b44d_GXqDS0fufecSqTlSqV-h3ch5pmFTNSdEY7mE5IXYXidytlJBIM8f2EfS2_xpxIhxJqxK23lp5aXMrw6zlD5qK6RaFBh4l9ZZ5PZ5v7ud5JrE65atfkRPW0FdTqzm55LEYKPhvjjDSl8DQYShs_l1GAg.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d1bc5724b39fa1b44d_GXqDS0fufecSqTlSqV-h3ch5pmFTNSdEY7mE5IXYXidytlJBIM8f2EfS2_xpxIhxJqxK23lp5aXMrw6zlD5qK6RaFBh4l9ZZ5PZ5v7ud5JrE65atfkRPW0FdTqzm55LEYKPhvjjDSl8DQYShs_l1GAg.png) ‍ @@ -72,7 +72,7 @@ Actions consist of two components: the command (currently kubectl) and the event ### Botkube includes two preconfigured actions in the Cloud Dashboard -![Image 6: a screen shot of a window showing the email settings](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710b68ad02138d5720ff_v4OOZo5A1CCE3VZToEZfBiIuLviwI71gpu5gWv_erbnK1YfbO1a7oYWiqmNlwJZO-9ZuXEWD50ls3ylgorzhg76Lf6PpXpvjleX-sA3vrhuboF-61-bn37dMqsNd5Q6BvC9FIdMYbJ_KBfDJu3LtIkA.gif) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710b68ad02138d5720ff_v4OOZo5A1CCE3VZToEZfBiIuLviwI71gpu5gWv_erbnK1YfbO1a7oYWiqmNlwJZO-9ZuXEWD50ls3ylgorzhg76Lf6PpXpvjleX-sA3vrhuboF-61-bn37dMqsNd5Q6BvC9FIdMYbJ_KBfDJu3LtIkA.gif) #### describe-created resource: @@ -80,7 +80,7 @@ Automatically runs kubectl describe on resource creation events, delivering resu ‍ -![Image 7: a screenshot of a conversation in a web browser](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c7946a3e903c20f78_gh7vWb3pXGzzEya6P_SNo6ZdoeJHG1rE2whT7wfwf4-kF9hFunVFf2_O2j2zjJk6zUXCaT62Yw4GxcQCoPpmKaWTIzKXnOQu-fO9niWeypy2nsigHIBM1DyEu4Rr2WLf7KnXK0zlyBk_9I3HN9I8GJM.gif) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c7946a3e903c20f78_gh7vWb3pXGzzEya6P_SNo6ZdoeJHG1rE2whT7wfwf4-kF9hFunVFf2_O2j2zjJk6zUXCaT62Yw4GxcQCoPpmKaWTIzKXnOQu-fO9niWeypy2nsigHIBM1DyEu4Rr2WLf7KnXK0zlyBk_9I3HN9I8GJM.gif) #### Show-logs-on-error @@ -91,7 +91,7 @@ Botkube's automated action feature simplifies Kubernetes management by automatin Kubernetes Insights with Botkube’s ChatGPT Assistant ---------------------------------------------------- -![Image 8: a screen shot of a computer screen showing a number of options](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a2723cb531baf9f0867_doctor-interactive-help.gif) +![Image 8](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a2723cb531baf9f0867_doctor-interactive-help.gif) ‍ @@ -101,7 +101,7 @@ Botkube doesn't stop at monitoring and alerting; [Botkube’s Doctor Plugin](htt #### Assistance for Beginner Kubernetes Users -![Image 9: a screenshot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d1b4b8569bc008cf16_d3_gGf91GFWCqjVrQEfoSLImw32RhITxnMPRZVlJg2Ybc5N6JFl5nXM2zJCM4goiFIgIAFe5vEjA5KJd4HIkFM8-ZBtLYvInlk_zYFHYK6ksTvaP1yo32cZf-3TpFnP97sl7WXWZj8SViQXXDA8ZMuo.png) +![Image 9](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d1b4b8569bc008cf16_d3_gGf91GFWCqjVrQEfoSLImw32RhITxnMPRZVlJg2Ybc5N6JFl5nXM2zJCM4goiFIgIAFe5vEjA5KJd4HIkFM8-ZBtLYvInlk_zYFHYK6ksTvaP1yo32cZf-3TpFnP97sl7WXWZj8SViQXXDA8ZMuo.png) ‍ @@ -111,7 +111,7 @@ Users can also ask ChatGPT specific questions directly from the interface. Users ‍ -![Image 10: what are the common problems with kubernetes service](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d0a46841c35338b848_SuBeHwTBNG6pmzxQrBlBPNA4tbpFK17w_DWF3D_xXJK4gcjuMnNhFd5uCuKyjUSdCuplS-JAlksGeGcjil9V94LBJn0ZY2sNJ0RhwYC0UYvEIoHJkBK9c0IygnpLse9jwQmVuj8S6t6dwIvUfrmCtmE.png) +![Image 10](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d0a46841c35338b848_SuBeHwTBNG6pmzxQrBlBPNA4tbpFK17w_DWF3D_xXJK4gcjuMnNhFd5uCuKyjUSdCuplS-JAlksGeGcjil9V94LBJn0ZY2sNJ0RhwYC0UYvEIoHJkBK9c0IygnpLse9jwQmVuj8S6t6dwIvUfrmCtmE.png) #### ChatGPT Recommendations @@ -119,7 +119,7 @@ The Doctor plugin integrates with Botkube's existing Kubernetes recommendations, ‍ -![Image 11: a screenshot of a message from a customer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710b0d200385a983c1f3_I196XuDKfbF_0Tq-brChXFXESPbAuAMK7UVl7oWnbS5TY0DEDg5mK4dOqO5WDIuTdcr9kFtivAoOezeqDYb6AkCWFCwW37jskmlzHgz6FDtz0AQwH9TWUUTCEUOE_yw_2zcBkYqYymnHml4Si8X0Rfw.png) +![Image 11](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710b0d200385a983c1f3_I196XuDKfbF_0Tq-brChXFXESPbAuAMK7UVl7oWnbS5TY0DEDg5mK4dOqO5WDIuTdcr9kFtivAoOezeqDYb6AkCWFCwW37jskmlzHgz6FDtz0AQwH9TWUUTCEUOE_yw_2zcBkYqYymnHml4Si8X0Rfw.png) Kubernetes Troubleshooting Automations -------------------------------------- @@ -131,7 +131,7 @@ This integration is particularly useful for developers and Ops teams seeking to Executor Plugin --------------- -![Image 12: a screen shot of a screen showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d14c51c24d23107d67_be3NRGddT9iSoKYyGzqKfm0vAygUfhC7Tjt1sqpMpSKxIALefMbB_GeBXrxs4-Xy3vlMRz7Dq7vJtts06n1UhgydkWVbJs0WVBoEtZwu_UqM26jLT7u4Dxbh1993ioMwhORJwnbh0F_pcYmpJBm1Mgg.gif) +![Image 12](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d14c51c24d23107d67_be3NRGddT9iSoKYyGzqKfm0vAygUfhC7Tjt1sqpMpSKxIALefMbB_GeBXrxs4-Xy3vlMRz7Dq7vJtts06n1UhgydkWVbJs0WVBoEtZwu_UqM26jLT7u4Dxbh1993ioMwhORJwnbh0F_pcYmpJBm1Mgg.gif) Last but not least, Botkube's [Executor plugin](https://docs.botkube.io/usage/executor/) plays a pivotal role in allowing users to explore the flexibility within the plugin system. With the Exec plugin, you can seamlessly install and run any command-line interface (CLI) directly from your chosen communication platform through Botkube. It empowers you to create your personalized interactive interface for these CLIs. diff --git a/hack/assistant-setup/content/botkube.io__blog__get-botkube-running-in-under-3-minutes-the-new-slack-app.md b/hack/assistant-setup/content/botkube.io__blog__get-botkube-running-in-under-3-minutes-the-new-slack-app.md index 3c9014d5..bba801fc 100644 --- a/hack/assistant-setup/content/botkube.io__blog__get-botkube-running-in-under-3-minutes-the-new-slack-app.md +++ b/hack/assistant-setup/content/botkube.io__blog__get-botkube-running-in-under-3-minutes-the-new-slack-app.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/get-botkube-running-in-under-3-minutes-the-n Published Time: Nov 06, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby diff --git a/hack/assistant-setup/content/botkube.io__blog__getting-started-with-botkube-and-argocd.md b/hack/assistant-setup/content/botkube.io__blog__getting-started-with-botkube-and-argocd.md index 5a3c62b9..d4b02d6c 100644 --- a/hack/assistant-setup/content/botkube.io__blog__getting-started-with-botkube-and-argocd.md +++ b/hack/assistant-setup/content/botkube.io__blog__getting-started-with-botkube-and-argocd.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/getting-started-with-botkube-and-argocd Published Time: Sep 29, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,12 +17,12 @@ Learn how to set up Botkube with ArgoCD plugins in this step-by-step tutorial. ### Table of Contents -* [Prerequisites](#prerequisites) -* [Install the ArgoCD Plugin into a new instance](#install-the-argocd-plugin-into-a-new-instance-) -* [Using the ArgoCD Plugin in Action](#using-the-argocd-plugin-in-action) -* [Conclusion](#conclusion) -* [Sign up now!](#sign-up-now-) -* [Feedback](#feedback) +* [Prerequisites](#prerequisites-2) +* [Install the ArgoCD Plugin into a new instance](#install-the-argocd-plugin-into-a-new-instance--2) +* [Using the ArgoCD Plugin in Action](#using-the-argocd-plugin-in-action-2) +* [Conclusion](#conclusion-2) +* [Sign up now!](#sign-up-now--2) +* [Feedback](#feedback-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -34,7 +34,7 @@ Enter [Botkube](http://botkube.io/), a Kubernetes collaborative troubleshooting Learn more about Botkube’s move towards [GitOps](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) and the new ArgoCD Plugin– the second installment in the Botkube GitOps plugin series in our [release announcement](https://botkube.io/blog/argo-cd-botkube-integration). -In this tutorial, we'll delve into the capabilities of the [Botkube ArgoCD plugin](https://docs.botkube.io/configuration/source/argocd/). This powerful tool automates notifications, and enables bi-directional action. By the end of this tutorial, you will know how to create, configure, and effectively leverage the Botkube ArgoCD plugin to enhance and simplify your GitOps workflow. +In this tutorial, we'll delve into the capabilities of the [Botkube ArgoCD plugin](https://docs.botkube.io/configuration/source/argocd/). This powerful tool automates notifications, and enables bi-directional action.  By the end of this tutorial, you will know how to create, configure, and effectively leverage the Botkube ArgoCD plugin to enhance and simplify your GitOps workflow. Prerequisites ------------- @@ -42,9 +42,9 @@ Prerequisites Before you begin, make sure you have the following prerequisites in place: * Basic familiarity with Kubernetes and its components -* Access to a Kubernetes cluster with Helm installed +* Access to a Kubernetes cluster with Helm installed  * Access to Slack workspace -* A [Botkube Cloud Account](http://app.botkube.io/) +* A [Botkube Cloud Account](http://app.botkube.io/)  * [Argo CD](https://argoproj.github.io/cd/) must be installed on your Kubernetes cluster * [Install the Argo CD CLI](https://argo-cd.readthedocs.io/en/stable/?_gl=1*10c1kh8*_ga*NDc0Nzg3NTU3LjE2OTU2NTg1MzI.*_ga_5Z1VTPDL73*MTY5NTkxNTMyMC4yLjEuMTY5NTkxNTM0NC4wLjAuMA..#getting-started) on your local machine @@ -52,12 +52,12 @@ Before you begin, make sure you have the following prerequisites in place: * Ensure that you have at least one application configured within ArgoCD -Install the ArgoCD Plugin into a new instance ---------------------------------------------- +Install the ArgoCD Plugin into a new instance  +---------------------------------------------- ### Creating Botkube Cloud Account -1. Sign in to Botkube Cloud, either as a new user with a free account with an email or Github account or as an existing user. +1. Sign in to Botkube Cloud, either as a new user with a free account with an email or Github account or as an existing user.  \* Click [here](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) for a more indepth Botkube installation tutorial @@ -81,7 +81,7 @@ Install the ArgoCD Plugin into a new instance 1. Select the ArgoCD and kubectl Plugin -2\. Begin by selecting the ArgoCD and kubectl plugins within your Botkube setup +2. Begin by selecting the ArgoCD and kubectl plugins within your Botkube setup ![Image 3: Adding Argo CD API Keys](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6516ed347d480ce1978008ad_ISJShwJ0wGBlQUqSnpW1Zt-9vzEKnLzwFnLMlxGIX0WI25KZ7tWnyapg0LSixCOslONWZfHErb-qmr_MvlqlWTDK3VxGnPKsZfDCnNKGJNAy90orbvT3HHXdkgm-D3JeArzT4pea8mUOExvfS7QY0rY.png) @@ -89,9 +89,8 @@ Install the ArgoCD Plugin into a new instance 4. Insert your resources from your ArgoCD UI - * Fill in your “Name” and “Namespace” -* Make sure your BaseURl matches the one found on your ArgoCD UI +* Make sure your BaseURl matches the one found on your ArgoCD UI  ![Image 4: Setting Argo CD permissions on deployment](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6516ed337ad79fb0c8bb0436_zRBc4WDwcmJW7sKZjJaItEuxSAKmzxrqxw3C-QhoAPTf7Br_i67Eyk5XN6jYPowsCQ836d4ogBZ3Lh6rC42cbw1Ato5chhbOP9UOxTy6hQy_F0prcvSRmD7IBZtfCFMoKqcjlnUYMYCC9SVqJYl6NJ4.png) @@ -101,28 +100,27 @@ Install the ArgoCD Plugin into a new instance * Choose the "Custom" option. * Under the custom permissions, select the "Group" option * Next, update the permissions for RBAC (Role-Based Access Control). -* Add "argocd” +* Add "argocd”  ![Image 5: RBAC controls for Argo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6516ed3352cdb1553efc2f21_7bqFl-gQuFLiZqajb4AXF0r0BOJ-_D0SseHOHPGjUQ6DKi6M_YWpc2qNljNslsn7UMMDmAULu_cbURDPd6ilRAbbtKE3sQHURZPpcGMMwzgEIuXq1dm0m0R1LTVkQirBVpOsBWF-ooL1EBd1bb2hogs.png) 5. Click "Next" to proceed to the installation step. -6. On the next page, you will have the option to also enable [Command Alias](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) and [Botkube Actions](https://docs.botkube.io/usage/automated-actions/). +6. On the next page, you will have the option to also enable [Command Alias](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) and [Botkube Actions](https://docs.botkube.io/usage/automated-actions/).  -7\. Make your selection and click the create button. +7. Make your selection and click the create button. 8. You are now ready to start playing with your Botkube plugin. - Using the ArgoCD Plugin in Action --------------------------------- -### Checking the Health Status of Apps +### Checking the Health Status of Apps  ![Image 6: ArgoCD events](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6509a59c63441b36226ea80d_argocd-events-e6eabb1f581e9822020d55461539bfcd.png) ‍ -Use Botkube’s ArgoCD plugin for seamless health status checks on your ArgoCD apps. Dive into the world of troubleshooting with just a couple of commands. Utilize "kubectl describe" and "kubectl get" within Botkube to verify the optimal functioning of the Argo CD source plugin. Leverage slack interactivity and automation to make health status checks a breeze. +Use Botkube’s ArgoCD plugin for seamless health status checks on your ArgoCD apps. Dive into the world of troubleshooting with just a couple of commands. Utilize "kubectl describe" and "kubectl get" within Botkube to verify the optimal functioning of the Argo CD source plugin. Leverage slack  interactivity and automation to make health status checks a breeze. Conclusion ---------- diff --git a/hack/assistant-setup/content/botkube.io__blog__implementing-your-own-botkube-plugin-a-real-life-use-case.md b/hack/assistant-setup/content/botkube.io__blog__implementing-your-own-botkube-plugin-a-real-life-use-case.md index 7d3427ba..0c86619e 100644 --- a/hack/assistant-setup/content/botkube.io__blog__implementing-your-own-botkube-plugin-a-real-life-use-case.md +++ b/hack/assistant-setup/content/botkube.io__blog__implementing-your-own-botkube-plugin-a-real-life-use-case.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/implementing-your-own-botkube-plugin-a-real- Published Time: May 24, 2023 Markdown Content: -![Image 1: a man with long hair wearing a red bandana](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3f055589d08e3e7a3c4_w4WfaGM6LbgXbKSciuiiWfHDQQIN8gQVL0IxF369W1k.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3f055589d08e3e7a3c4_w4WfaGM6LbgXbKSciuiiWfHDQQIN8gQVL0IxF369W1k.jpeg) Huseyin Babal @@ -17,21 +17,21 @@ Botkube has plugin system that allows you to extend the functionalities of Botku ### Table of Contents -* [Background](#background) -* [Keptn Installation](#keptn-installation) -* [Accessing Keptn Gateway](#accessing-keptn-gateway) -* [Keptn CLI](#keptn-cli) -* [Create Keptn Project](#create-keptn-project) -* [Create Keptn Service with Resource](#create-keptn-service-with-resource) -* [Trigger Keptn Sequence](#trigger-keptn-sequence) -* [Accessing API](#accessing-api) -* [Plugin Development](#plugin-development) -* [Plugin Configuration Structure](#plugin-configuration-structure) -* [Simple Keptn Client Implementation](#simple-keptn-client-implementation) -* [Keptn Plugin Core](#keptn-plugin-core) -* [Building Plugin](#building-plugin) -* [Running Botkube](#running-botkube) -* [Get Started with Botkube Plugin Development](#get-started-with-botkube-plugin-development) +* [Background](#background-2) +* [Keptn Installation](#keptn-installation-2) +* [Accessing Keptn Gateway](#accessing-keptn-gateway-2) +* [Keptn CLI](#keptn-cli-2) +* [Create Keptn Project](#create-keptn-project-2) +* [Create Keptn Service with Resource](#create-keptn-service-with-resource-2) +* [Trigger Keptn Sequence](#trigger-keptn-sequence-2) +* [Accessing API](#accessing-api-2) +* [Plugin Development](#plugin-development-2) +* [Plugin Configuration Structure](#plugin-configuration-structure-2) +* [Simple Keptn Client Implementation](#simple-keptn-client-implementation-2) +* [Keptn Plugin Core](#keptn-plugin-core-2) +* [Building Plugin](#building-plugin-2) +* [Running Botkube](#running-botkube-2) +* [Get Started with Botkube Plugin Development](#get-started-with-botkube-plugin-development-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -41,132 +41,169 @@ So let's dive in! In this article, we will implement a Botkube plugin to integrate it with [Keptn,](https://botkube.io/integration/keptn) a cloud-native application lifecycle management tool for kubernetes. Use this as a starting point for your own creation! -Background ----------- - -Before starting Keptn plugin implementation, let's take a look what it is and what kind of use-case it solves for us. Assume that you have CD flow that ships your features to live environment whenever you merge that specific feature into main branch. You might want to do a couple of checks before deployment, and Keptn is good for that kind of verifications. You can do a load test with [k6](https://k6.io/), an open source load testing tool, by using in Keptn to do load test and verify results. However, to make it simpler to understand how Keptn works and how to integrate it with Botkube, we will be deploying a simple task with Keptn and consume Keptn events with Botkube to receive notifications in communication platform like Slack. - -Keptn Installation ------------------- +\## Background +Before starting Keptn plugin implementation, let's take a look what it is and what kind of use-case it solves for us. +Assume that you have CD flow that ships your features to live environment whenever you merge that specific feature into main branch. +You might want to do a couple of checks before deployment, and Keptn is good for that kind of verifications. You can do a load test with \[k6\](https://k6.io/), an open source load testing tool, by using in Keptn to do load test and verify results. However, to make it simpler to understand how Keptn works and how to integrate it with Botkube, we will be deploying a simple task with Keptn and consume Keptn events with Botkube to receive notifications in communication platform like Slack. +\## Keptn Installation You can easily deploy keptn via Helm Chart with the following command. -To execute a task in Keptn environment, we can use a Keptn integration which is 'Job Executor Service'. This will help us to execute task based on our configuration. You can deploy executor service as shown below. +To execute a task in Keptn environment, we can use a Keptn integration which is 'Job Executor Service'. This will help us to execute task +based on our configuration. You can deploy executor service as shown below. -
export JES_VERSION=0.3.0
export TASK_SUBSCRIPTION="sh.keptn.event.remote-task.triggered"
helm upgrade --install --create-namespace -n keptn-jes job-executor-service \
https://github.com/keptn-contrib/job-executor-service/releases/download/${JES_VERSION}/job-executor-service-${JES_VERSION}.tgz \
--set remoteControlPlane.autoDetect.enabled="true" \
--set subscription.pubsubTopic=${TASK_SUBSCRIPTION}
+
export JES_VERSION=0.3.0
export TASK_SUBSCRIPTION="sh.keptn.event.remote-task.triggered"
helm upgrade --install --create-namespace -n keptn-jes job-executor-service \
https://github.com/keptn-contrib/job-executor-service/releases/download/${JES_VERSION}/job-executor-service-${JES_VERSION}.tgz \
--set remoteControlPlane.autoDetect.enabled="true" \    
--set subscription.pubsubTopic=${TASK_SUBSCRIPTION}
-‍ Keptn produces lots of events during the lifecycle management, but notice we are only interested in the event type `sh.keptn.event.remote-task.triggered`. Since, we deploy job executor service in same Kubernetes cluster, it will automatically find Keptn gateway with the flag `remoteControlPlane.autoDetect.enabled="true"` +‍ +Keptn produces lots of events during the lifecycle management, but notice we are only interested in the event type \`sh.keptn.event.remote-task.triggered\`. Since, we +deploy job executor service in same Kubernetes cluster, it will automatically find Keptn gateway with the flag \`remoteControlPlane.autoDetect.enabled="true"\` -Accessing Keptn Gateway ------------------------ +\## Accessing Keptn Gateway You can visit http://localhost:8080 to access Keptn Gateway by providing user and password which we extracted before. -Keptn CLI ---------- - -While you can handle everything in Keptn Gateway Dashboard, it would be beneficial to use Keptn CLI to handle things faster. You can install Keptn CLI with following command. +\## Keptn CLI +While you can handle everything in Keptn Gateway Dashboard, it would be beneficial to use Keptn CLI to handle things faster. You can install +Keptn CLI with following command. In order to access Keptn Gateway, you need to authenticate Keptn CLI with following command. -‍ You can copy this command from Keptn Gateway Dashboard under User icon in top right corner. +‍ +You can copy this command from Keptn Gateway Dashboard under User icon in top right corner. -![Image 2: a blue and white icon with a person's face on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b71df0ddcf082e6d025ff_keptn-user-icon.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b71df0ddcf082e6d025ff_keptn-user-icon.png) -![Image 3: a screenshot of the get started screen for a keneo ai](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b72186e9e4352b281394a_keptn-auth-command-copy.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b72186e9e4352b281394a_keptn-auth-command-copy.png) Now we are ready to create resources in Keptn. -‍ - -Create Keptn Project --------------------- - +‍ +\## Create Keptn Project In Keptn, everything starts with Project where you basically define your Keptn resources. Keptn projects works with Git Upstream that you can also create one as shown below. -‍ `$GITHUB_USERNAME` and `$GITHUB_TOKEN` is used by Keptn to maintain its state in remote repository which is defined by empty `$GITHUB_REPO`. `--shipyard` parameter is used to defined project stages each deployment should go through until production stage. You can see an example shipyard file as follows. +‍ +\`$GITHUB\_USERNAME\` and \`$GITHUB\_TOKEN\` is used by Keptn to maintain its state in remote repository which is defined by empty \`$GITHUB\_REPO\`. \`--shipyard\` parameter +is used to defined project stages each deployment should go through until production stage. You can see an example shipyard file as follows.
apiVersion: "spec.keptn.sh/0.2.4"
kind: "Shipyard"
metadata:
name: "botkube"
spec:
stages:
- name: "production"
sequences:
- name: "botkube-seq"
tasks:
- name: "remote-task"
-‍ We have only one stage `production` and it contains a task which is named as `remote-task`. Now that we defined our project, let's continue with creating a service as follows. +‍ +We have only one stage \`production\` and it contains a task which is named as \`remote-task\`. Now that we defined our project, let's continue with creating a service as follows. -Create Keptn Service with Resource ----------------------------------- +\## Create Keptn Service with Resource -‍ Above command simply creates a `hello` service under `botkube` project. Next step is to add resources to this service, for example a job definition as you can also see below. +‍ +Above command simply creates a \`hello\` service under \`botkube\` project. Next step is to add resources to this service, for example a job definition as you can also see below. -‍ We added job config to `hello` service for `production` stage under `botkube` project. Also, you can see the content of `jobconfig.yaml` below. +‍ +We added job config to \`hello\` service for \`production\` stage under \`botkube\` project. Also, you can see the content of \`jobconfig.yaml\` below.
apiVersion: v2
actions:
- name: "Hello, Botkuber!"
events:
- name: "sh.keptn.event.remote-task.triggered"
tasks:
- name: "Say Hello"
image: "alpine"
cmd:
- echo
args:
- "Hello World"
-‍ As you can also understand, it simply provisions a task by using `alpine` image to print `Hello World`. Once the task is started, it will produce an event `sh.keptn.event.remote-task.triggered`. This event is the one our job executor service interested in. - -Trigger Keptn Sequence ----------------------- +‍ +As you can also understand, it simply provisions a task by using \`alpine\` image to print \`Hello World\`. Once the task is started, it will produce an event \`sh.keptn.event.remote-task.triggered\`. This event +is the one our job executor service interested in. +\## Trigger Keptn Sequence We have all the resources ready and now we can trigger a sequence to deploy remote task to see the response with following command. -‍ You will see the result of the command, but to see everything in detail, you can navigate to Keptn Gateway and see Sequences as follows. +‍ +You will see the result of the command, but to see everything in detail, you can navigate to Keptn Gateway and see Sequences as follows. -![Image 4: a screen shot of a screen with a blue and green screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b723533b33f4cb5e03c8a_keptn-sequence.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b723533b33f4cb5e03c8a_keptn-sequence.png) Now that we understand how to trigger a sequence in Keptn, let's take a look how to access its API to consume events to integrate with Botkube. -Accessing API -------------- +\## Accessing API +You can navigate to http://localhost:8080/api to see Swagger Documentation of Keptn APIs. It contains multiple modules, and to receive events, we can select \`mongodb-datastore\` from the dropdown. -You can navigate to http://localhost:8080/api to see Swagger Documentation of Keptn APIs. It contains multiple modules, and to receive events, we can select `mongodb-datastore` from the dropdown. +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b724ccd77eb686625a42e_swagger-docs.png) -![Image 5: a screenshot of the mogoogle analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b724ccd77eb686625a42e_swagger-docs.png) +Notice we already authorized Keptn CLI in previous sections, and we can reuse the token inside \`keptn auth ...\` command to use in Swagger Authorize to call endpoints in Swagger UI or construct following curl command. -Notice we already authorized Keptn CLI in previous sections, and we can reuse the token inside `keptn auth ...` command to use in Swagger Authorize to call endpoints in Swagger UI or construct following curl command. +‍ +Now we have all of the requirements ready to be used in Botkube plugin development, let's continue with our fresh new plugin, Botkube Keptn Plugin! -‍ Now we have all of the requirements ready to be used in Botkube plugin development, let's continue with our fresh new plugin, Botkube Keptn Plugin! +\## Plugin Development +Before implementing Keptn plugin business logic, I would like provide 2 source for plugin development: +\- \[Botkube Plugin Development Quick Start\](https://docs.botkube.io/plugin/quick-start) +\- \[Implementing Custom Botkube Source Plugin\](https://docs.botkube.io/plugin/custom-source) -Plugin Development ------------------- +‍ +Now we are ready to implement actual business logic of the Keptn plugin to receive events. You will see partial +examples of the codebase in this article, but don't worry, you can see the full codebase here. -Before implementing Keptn plugin business logic, I would like provide 2 source for plugin development: +\## Plugin Configuration Structure +In order to integrate Botkube with Keptn, Botkube should now be the entrypoint of Keptn to consume events. Also, it needs a token for successful authentication with Keptn. Additionally, we can add filtering parameters like project and service to consume events for certain project and service. With those information, following Go struct can be used for plugin configuration. -* [Botkube Plugin Development Quick Start](https://docs.botkube.io/plugin/quick-start) -* [Implementing Custom Botkube Source Plugin](https://docs.botkube.io/plugin/custom-source) +
// config.go
package keptn
...
// Config prometheus configuration
type Config struct {
URL string `yaml:"url,omitempty"`
Token string `yaml:"token,omitempty"`
Project string `yaml:"project,omitempty"`
Service string `yaml:"service,omitempty"`
Log config.Logger `yaml:"log,omitempty"`
}
...
-‍ Now we are ready to implement actual business logic of the Keptn plugin to receive events. You will see partial examples of the codebase in this article, but don't worry, you can see the full codebase here. +‍ +To have a smooth plugin integration, we can have configuration defaults, and once end user provides their own configuration, we should merge those configs +as follows. -Plugin Configuration Structure ------------------------------- +
// config.go
package keptn
import "github.com/kubeshop/botkube/pkg/pluginx"
...
// MergeConfigs merges all input configuration.
func MergeConfigs(configs []*source.Config) (Config, error) {
defaults := Config{}
var out Config
// You can see useful utility packages like `pluginx` in Botkube core.
if err := pluginx.MergeSourceConfigsWithDefaults(defaults, configs, &out); err != nil {
return Config{}, fmt.Errorf("while merging configuration: %w", err)
}
return out, nil
}
...
-In order to integrate Botkube with Keptn, Botkube should now be the entrypoint of Keptn to consume events. Also, it needs a token for successful authentication with Keptn. Additionally, we can add filtering parameters like project and service to consume events for certain project and service. With those information, following Go struct can be used for plugin configuration. +‍ +\## Simple Keptn Client Implementation +We will implement an SDK to connect Keptn API to consume events. This will be a facade to reduce complexity and coupling. +Keptn already has a \[Go SDK\](github.com/keptn/go-utils/pkg/api/utils/v2"), and in our client we will initialize an instance of that client and call events endpoint as shown below. -
// config.go
package keptn
...
// Config prometheus configuration
type Config struct {
URL string `yaml:"url,omitempty"`
Token string `yaml:"token,omitempty"`
Project string `yaml:"project,omitempty"`
Service string `yaml:"service,omitempty"`
Log config.Logger `yaml:"log,omitempty"`
}
...
+
// client.go
package keptn
import (
api "github.com/keptn/go-utils/pkg/api/utils/v2"
"time"
)
// Client Keptn client
type Client struct {
// API refers to Keptn client. https://github.com/keptn/go-utils
API *api.APISet
}
type GetEventsRequest struct {
Project string
FromTime time.Time
}
type Event struct {
ID string
Source string
Type string
Data Data
}
type Data struct {
Message string
Project string
Service string
Status string
Stage string
Result string
}
...
// NewClient initializes Keptn client
func NewClient(url, token string) (*Client, error) {
client, err := api.New(url, api.WithAuthToken(token))
if err != nil {
return nil, err
}
return &Client{
API: client,
}, nil
}
// Events returns only new events.
func (c *Client) Events(ctx context.Context, request *GetEventsRequest) ([]Event, error) {
fromTime := request.FromTime.UTC().Format(time.RFC3339)
var events []Event
res, err := c.API.Events().GetEvents(ctx, &api.EventFilter{
Project: request.Project,
FromTime: fromTime,
}, api.EventsGetEventsOptions{})
if err != nil {
return nil, err.ToError()
}
for _, ev := range res {
data := Data{}
err := ev.DataAs(&data)
if err != nil {
return nil, err
}
events = append(events, Event{
ID: ev.ID,
Source: *ev.Source,
Type: *ev.Type,
Data: data,
})
}
return events, nil
}
-‍ To have a smooth plugin integration, we can have configuration defaults, and once end user provides their own configuration, we should merge those configs as follows. +‍ +To summaries above example, \`Events\` method accepts context and filter request to get events based on the filtering parameters. +That method can return slice of Events or an error. Now that we have a client, let's implement the core of our plugin to call this +Keptn client implementation. -
// config.go
package keptn
import "github.com/kubeshop/botkube/pkg/pluginx"
...
// MergeConfigs merges all input configuration.
func MergeConfigs(configs []*source.Config) (Config, error) {
defaults := Config{}
var out Config
// You can see useful utility packages like `pluginx` in Botkube core.
if err := pluginx.MergeSourceConfigsWithDefaults(defaults, configs, &out); err != nil {
return Config{}, fmt.Errorf("while merging configuration: %w", err)
}
return out, nil
}
...
‍ Simple Keptn Client Implementation ---------------------------------- We will implement an SDK to connect Keptn API to consume events. This will be a facade to reduce complexity and coupling. Keptn already has a [Go SDK](https://botkube.io/blog/github.com/keptn/go-utils/pkg/api/utils/v2), and in our client we will initialize an instance of that client and call events endpoint as shown below. +\## Keptn Plugin Core +In order to write a source plugin, we need to implement following contracts -
// client.go
package keptn
import (
api "github.com/keptn/go-utils/pkg/api/utils/v2"
"time"
)
// Client Keptn client
type Client struct {
// API refers to Keptn client. https://github.com/keptn/go-utils
API *api.APISet
}
type GetEventsRequest struct {
Project string
FromTime time.Time
}
type Event struct {
ID string
Source string
Type string
Data Data
}
type Data struct {
Message string
Project string
Service string
Status string
Stage string
Result string
}
...
// NewClient initializes Keptn client
func NewClient(url, token string) (*Client, error) {
client, err := api.New(url, api.WithAuthToken(token))
if err != nil {
return nil, err
}
return &Client{
API: client,
}, nil
}
// Events returns only new events.
func (c *Client) Events(ctx context.Context, request *GetEventsRequest) ([]Event, error) {
fromTime := request.FromTime.UTC().Format(time.RFC3339)
var events []Event
res, err := c.API.Events().GetEvents(ctx, &api.EventFilter{
Project: request.Project,
FromTime: fromTime,
}, api.EventsGetEventsOptions{})
if err != nil {
return nil, err.ToError()
}
for _, ev := range res {
data := Data{}
err := ev.DataAs(&data)
if err != nil {
return nil, err
}
events = append(events, Event{
ID: ev.ID,
Source: *ev.Source,
Type: *ev.Type,
Data: data,
})
}
return events, nil
}
‍ To summaries above example, `Events` method accepts context and filter request to get events based on the filtering parameters. That method can return slice of Events or an error. Now that we have a client, let's implement the core of our plugin to call this Keptn client implementation. Keptn Plugin Core ----------------- In order to write a source plugin, we need to implement following contracts ‍ `Stream` is a gRPC endpoint that is consumed by a gRPC client in Botkube core. So, Botkube will stream events from this endpoint. `Metadata` is used for providing information about Keptn plugin. This will be also used by CI system to generate plugin metadata. Metadata can contain plugin configuration details. In `Stream` method, we need to consume Keptn events as follows.
// source.go
package keptn
const pollPeriodInSeconds = 5
...
func (p *Source) consumeEvents(ctx context.Context, cfg Config, ch chan<- source.Event) {
keptn, err := NewClient(cfg.URL, cfg.Token)
log := loggerx.New(cfg.Log)
exitOnError(err, log)
for {
req := GetEventsRequest{
Project: cfg.Project,
FromTime: time.Now().Add(-time.Second * pollPeriodInSeconds),
}
res, err := keptn.Events(ctx, &req)
if err != nil {
log.Errorf("failed to get events. %v", err)
}
for _, event := range res {
textFields := []api.TextField{
{Key: "Source", Value: PluginName},
{Key: "Type", Value: event.Type},
}
if event.Data.Status != "" {
textFields = append(textFields, api.TextField{Key: "State", Value: event.Data.Status})
}
var bulletLists []api.BulletList
if event.Data.Message != "" {
bulletLists = []api.BulletList{
{
Title: "Description",
Items: []string{
event.Data.Message,
},
},
}
}
msg := api.Message{
Type: api.NonInteractiveSingleSection,
Timestamp: time.Now(),
Sections: []api.Section{
{
TextFields: textFields,
BulletLists: bulletLists,
},
},
}
ch <- source.Event{
Message: msg,
RawObject: event,
}
}
// Fetch events periodically with given frequency
time.Sleep(time.Second * pollPeriodInSeconds)
}
}
...
‍ Above implementation will poll Keptn endpoint each for 5 seconds and will return a Message to Botkube so that it will dispatch this message to configured platform. Notice, we use `FromTime` parameter to fetch only last 5 seconds windowed events. As you also noticed, we use a special struct `api.Message` for structured message that you can see advanced details about that [here](https://docs.botkube.io/plugin/interactive-messages). +‍ +\`Stream\` is a gRPC endpoint that is consumed by a gRPC client in Botkube core. So, Botkube will stream events from this endpoint. +\`Metadata\` is used for providing information about Keptn plugin. This will be also used by CI system to generate plugin metadata. +Metadata can contain plugin configuration details. -Building Plugin ---------------- +In \`Stream\` method, we need to consume Keptn events as follows. -In order to build plugin, you can use following command. +
// source.go
package keptn
const pollPeriodInSeconds = 5
...
func (p *Source) consumeEvents(ctx context.Context, cfg Config, ch chan<- source.Event) {
keptn, err := NewClient(cfg.URL, cfg.Token)
log := loggerx.New(cfg.Log)
exitOnError(err, log)
for {
req := GetEventsRequest{
Project: cfg.Project,
FromTime: time.Now().Add(-time.Second * pollPeriodInSeconds),
}
res, err := keptn.Events(ctx, &req)
if err != nil {
log.Errorf("failed to get events. %v", err)
}
for _, event := range res {
textFields := []api.TextField{
{Key: "Source", Value: PluginName},
{Key: "Type", Value: event.Type},
}
if event.Data.Status != "" {
textFields = append(textFields, api.TextField{Key: "State", Value: event.Data.Status})
}
var bulletLists []api.BulletList
if event.Data.Message != "" {
bulletLists = []api.BulletList{
{
Title: "Description",
Items: []string{
event.Data.Message,
},
},
}
}
msg := api.Message{
Type: api.NonInteractiveSingleSection,
Timestamp: time.Now(),
Sections: []api.Section{
{
TextFields: textFields,
BulletLists: bulletLists,
},
},
}
ch <- source.Event{
Message: msg,
RawObject: event,
}
}
// Fetch events periodically with given frequency
time.Sleep(time.Second * pollPeriodInSeconds)
}
}
...
-‍ This will build the plugin, and generate a metadata file for plugin index. `PLUGIN_DOWNLOAD_URL_BASE_PATH` environment variable is used for defining the base path of plugin download url. Now we have plugin binaries locally, then we can serve them with following command. +‍ +Above implementation will poll Keptn endpoint each for 5 seconds and will return a Message to Botkube so that it will dispatch this message to configured platform. +Notice, we use \`FromTime\` parameter to fetch only last 5 seconds windowed events. As you also noticed, we use a special struct \`api.Message\` for structured message that you can see advanced details about that \[here\](https://docs.botkube.io/plugin/interactive-messages). + +\## Building Plugin +In order to build plugin, you can use following command. -‍ Once you navigate to http://localhost:8080/dist, you can see the keptn plugin binary. This means, Botkube core can consume this endpoint to donwload and register as Botkube plugin. +‍ +This will build the plugin, and generate a metadata file for plugin index. \`PLUGIN\_DOWNLOAD\_URL\_BASE\_PATH\` environment variable is used +for defining the base path of plugin download url. Now we have plugin binaries locally, then we can serve them with following command. -Running Botkube ---------------- +‍ +Once you navigate to http://localhost:8080/dist, you can see the keptn plugin binary. This means, Botkube core can consume this endpoint to donwload and register as Botkube plugin. +\## Running Botkube In order to use the Keptn plugin, we can use following repository config in Botkube configuration file.
// config.yaml
...
plugins:
repositories:
botkube:
url: http://localhost:8080/plugins-dev-index.yaml
...
-‍ The above config is just for making Keptn plugin visible to Botkube core, now we can add a Keptn source plugin configuration as follows. +‍ +The above config is just for making Keptn plugin visible to Botkube core, now we can add a Keptn source plugin configuration as follows. + +
'keptn':
## Keptn source configuration
## Plugin name syntax: <repo>/<plugin>[@<version>]. If version is not provided, the latest version from repository is used.
botkube/keptn:
# -- If true, enables `keptn` source.
enabled: true
config:
project: "botkube"
url: "http://localhost:8080/api"
token: "keptn_token"
log:
level: info
+ +‍ +All the Keptn configurations are defined under \`config\` section. Once Botkube application starts, it would stream Keptn plugin and that plugin +consume the endpoint \`http://localhost:8080/api\` with query parameters \`project=botkube\` and with auth headers \`X-Token=\`. However, we need to add this Keptn source to \`communications\` configuration of Botkube as follows. + +
...
slack:
enabled: true
token: "xoxb-..."
channels:
'default':
name: botkube-demo
bindings:
sources:
- keptn
...
+ +‍ +Whenever an event is fired in Keptn, this event will be stored in mongodb-datasource and this will be consumed by +Keptn plugin. Finally, with above configuration, it will be sent to platforms which are defined in \`communications\` section. -
'keptn':
## Keptn source configuration
## Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used.
botkube/keptn:
# -- If true, enables `keptn` source.
enabled: true
config:
project: "botkube"
url: "http://localhost:8080/api"
token: "keptn_token"
log:
level: info
‍ All the Keptn configurations are defined under `config` section. Once Botkube application starts, it would stream Keptn plugin and that plugin consume the endpoint `http://localhost:8080/api` with query parameters `project=botkube` and with auth headers `X-Token=`. However, we need to add this Keptn source to `communications` configuration of Botkube as follows.
...
slack:
enabled: true
token: "xoxb-..."
channels:
'default':
name: botkube-demo
bindings:
sources:
- keptn
...
‍ Whenever an event is fired in Keptn, this event will be stored in mongodb-datasource and this will be consumed by Keptn plugin. Finally, with above configuration, it will be sent to platforms which are defined in `communications` section. ![Image 6: a screen shot of a screen showing a list of information](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b726bb3ed5ff180fca044_keptn-slack-message.png) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b726bb3ed5ff180fca044_keptn-slack-message.png) -Get Started with Botkube Plugin Development -------------------------------------------- +\## Get Started with Botkube Plugin Development -We hope that this helps you get started with developing your own Botkube plugin! If you need some help or have any questions, we're always available on the [Botkube Community Slack](http://join.botkube.io/). Check out the [Botkube Plugin Development Quick Start](https://docs.botkube.io/plugin/quick-start) and [Implementing Custom Botkube Source Plugin](https://docs.botkube.io/plugin/custom-source) guides to help you along the way. +We hope that this helps you get started with developing your own Botkube plugin! If you need some help or have any questions, we're always available on the \[Botkube Community Slack\](http://join.botkube.io).  Check out the \[Botkube Plugin Development Quick Start\](https://docs.botkube.io/plugin/quick-start) and \[Implementing Custom Botkube Source Plugin\](https://docs.botkube.io/plugin/custom-source) guides to help you along the way. diff --git a/hack/assistant-setup/content/botkube.io__blog__integrating-microsoft-teams-with-azure-for-kubernetes-deployments.md b/hack/assistant-setup/content/botkube.io__blog__integrating-microsoft-teams-with-azure-for-kubernetes-deployments.md index 8f155fee..c1a76ec3 100644 --- a/hack/assistant-setup/content/botkube.io__blog__integrating-microsoft-teams-with-azure-for-kubernetes-deployments.md +++ b/hack/assistant-setup/content/botkube.io__blog__integrating-microsoft-teams-with-azure-for-kubernetes-deployments.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/integrating-microsoft-teams-with-azure-for-k Published Time: Oct 30, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -69,9 +69,9 @@ Dashboard setup 1. Select create a new instance -![Image 2: a screen shot of a landing page for a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7dd390269cbe2d3ba4_jCUYYPLNDFZDkosCGhXjsC4Cvk9OsKaPJowAXS_Yi3-gdAekdM-YYj_QvgqvMCkAOIDbqXTaJGZuJFAjb5pIwZWo0kFlQwPBcwAzKW6X7ax6gK3rQVjbGKOJg_9Ps9i28sE-f7xg0hdp8hoY5mPwnNI.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7dd390269cbe2d3ba4_jCUYYPLNDFZDkosCGhXjsC4Cvk9OsKaPJowAXS_Yi3-gdAekdM-YYj_QvgqvMCkAOIDbqXTaJGZuJFAjb5pIwZWo0kFlQwPBcwAzKW6X7ax6gK3rQVjbGKOJg_9Ps9i28sE-f7xg0hdp8hoY5mPwnNI.png) -![Image 3: a screen shot of the intel dgb jdk page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e072ab825022ca51e_w3OobTivy6lb1zbPozEcTOySEmAZPSRU0WVO120nal_egmZ-HVayv2FIuTzLsJ6vBJuZBfrFLiMkzjzpOS2kJash0C8_p3scSVIAFUY5Rb_1YqE2xACl2811ugQ1E-VazSxtzki-AirkeARSEZ5sKq0.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e072ab825022ca51e_w3OobTivy6lb1zbPozEcTOySEmAZPSRU0WVO120nal_egmZ-HVayv2FIuTzLsJ6vBJuZBfrFLiMkzjzpOS2kJash0C8_p3scSVIAFUY5Rb_1YqE2xACl2811ugQ1E-VazSxtzki-AirkeARSEZ5sKq0.png) 2. Next, use homebrew or curl to install Botkube CLI on your terminal (Step 1) 3. Copy and paste the `Botkube install`… command (Step 2) @@ -79,17 +79,17 @@ Dashboard setup ‍ -![Image 4: a screen shot of a web page showing a house and arrows](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e1938916887fbf34f_WVBv6m9k1C5RWt4FI7QuA8VU-lSDXKQZOJWyqvfe7YZVDnNxquO3DBkznU2LP9TulrVxeDPloV4O7w40n6OVt3NjPPkMynGNKA_6wbc1knG-znVU3N5E8J6H1fqmpWafhnh4eOgb37W1Di2MgHUrrtU.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e1938916887fbf34f_WVBv6m9k1C5RWt4FI7QuA8VU-lSDXKQZOJWyqvfe7YZVDnNxquO3DBkznU2LP9TulrVxeDPloV4O7w40n6OVt3NjPPkMynGNKA_6wbc1knG-znVU3N5E8J6H1fqmpWafhnh4eOgb37W1Di2MgHUrrtU.png) 5. Name your instance and select the **Teams** option -![Image 5: a screenshot of the adobe adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e6a852b2620a9b5fb_7fpjvjcPJcqBZKRJ2oNOisODdOt9vN9J-sYcsuFLYMzlKF8CzLOXI3vM83HZ0YvdShckXSZcDBTclvCv9IRPGrNqeIIMBA6KdnKhilwSek9nqKBLZOrwUUFMZYe5zIBJmv2nh3jwJuJK2kjgO5Lh1ZM.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e6a852b2620a9b5fb_7fpjvjcPJcqBZKRJ2oNOisODdOt9vN9J-sYcsuFLYMzlKF8CzLOXI3vM83HZ0YvdShckXSZcDBTclvCv9IRPGrNqeIIMBA6KdnKhilwSek9nqKBLZOrwUUFMZYe5zIBJmv2nh3jwJuJK2kjgO5Lh1ZM.png) 6. Select the Download button to download the Botkube App. It will show up as **Botkube.zip** ‍ -![Image 6: a screenshot of a google chrome browser showing a file on the screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db9251f0d1db86ab7_w9yhNzeHzqqc4JawGTersD2qogEalGSUFs9xlGLhX_8OoCXcxSEEaJNnXaAdB3KyA25t6XnaNAzAM_P1cBjLNN68lZZGZ6GjAwWL8iAlXn4hyrwJ5FM3p8MLBCyUtwoSvw1ZRWBs7ds6jYHeYaJJJAU.png) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db9251f0d1db86ab7_w9yhNzeHzqqc4JawGTersD2qogEalGSUFs9xlGLhX_8OoCXcxSEEaJNnXaAdB3KyA25t6XnaNAzAM_P1cBjLNN68lZZGZ6GjAwWL8iAlXn4hyrwJ5FM3p8MLBCyUtwoSvw1ZRWBs7ds6jYHeYaJJJAU.png) ### Installing Botkube to Microsoft Teams @@ -97,11 +97,11 @@ Dashboard setup 1. Navigate to the Microsoft Teams application and select **Manage your Apps** at the button of the screen -![Image 7: a screen shot of the microsoft office app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d14da41d53c779535_oErOXojrwoCSfbs3A0830mnbkI1xb2rOD83YopN5B6k7Ti_O5OZdusUD4VrNjdFs_xHSaTxCjdipKQJuaLhpksHgW3Fwd8xx8MSFSq1HiuWVzsoTG90t1Dy4nlcAAkIuNdAsumH4sjQWXljJJ9y_Lbo.png) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d14da41d53c779535_oErOXojrwoCSfbs3A0830mnbkI1xb2rOD83YopN5B6k7Ti_O5OZdusUD4VrNjdFs_xHSaTxCjdipKQJuaLhpksHgW3Fwd8xx8MSFSq1HiuWVzsoTG90t1Dy4nlcAAkIuNdAsumH4sjQWXljJJ9y_Lbo.png) 2. Next select **Upload an app** and select **Upload an app to your org’s app catalog** -![Image 8: a screen shot of the azure portal](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eef4cf0cfa6050f79acc5_Screen%20Shot%202023-12-05%20at%201.36.02%20AM.png) +![Image 8](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eef4cf0cfa6050f79acc5_Screen%20Shot%202023-12-05%20at%201.36.02%20AM.png) 3. Select the **Botkube.zip** file from the previous section 4. Navigate to the **Apps** section on the left hand side and select the **Built for your Org section.** The Botkube application will be there. @@ -110,22 +110,22 @@ Dashboard setup 5. Select the **Add** button -![Image 9: a screen shot of the google drive app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d640c39e96661f69e_zpXrkocqwakQB8jrA8pwYH2CSrmRim4pp13-Pt8lZRgdgw33jCDfqnrxpYK3jt2fhSctK5cIyMt9taA-VAAUSD3tiicgAdTafZ7gAqBs08Bkljt7BJlUsxUh3OUdg1fhjCiCO5lTztUHXd8CrccWxXs.png) +![Image 9](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d640c39e96661f69e_zpXrkocqwakQB8jrA8pwYH2CSrmRim4pp13-Pt8lZRgdgw33jCDfqnrxpYK3jt2fhSctK5cIyMt9taA-VAAUSD3tiicgAdTafZ7gAqBs08Bkljt7BJlUsxUh3OUdg1fhjCiCO5lTztUHXd8CrccWxXs.png) -![Image 10: a screen shot of a google search page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d053e39713de9aa28_FNgbV-UuRUprEaIcHxqlypAX2PnrAGJjbfHZu8I2uJ4zRqP3ZXt3L4ez8rPqWhZZv_-ruLTTXoWLZFO5Nv4vKTfoJ8hjqFjrHX-M_RwhlaAPrF5IDEcZjDg523tVuwYOMranVLyV3IOVrbDzRI4OY5M.png) +![Image 10](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d053e39713de9aa28_FNgbV-UuRUprEaIcHxqlypAX2PnrAGJjbfHZu8I2uJ4zRqP3ZXt3L4ez8rPqWhZZv_-ruLTTXoWLZFO5Nv4vKTfoJ8hjqFjrHX-M_RwhlaAPrF5IDEcZjDg523tVuwYOMranVLyV3IOVrbDzRI4OY5M.png) 6. And then select the **Add to team** button -![Image 11: a screen shot of the microsoft store page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e778b3a2f89c145c5_2I5Ickc_OXlcgym-Ju-rDd9gVc0kVk-QW0_js_3gURGp0dgqj5jS0lOzoIox8vr07ky4hiHkn3LHiTIJ0JKU4jK6Q9rIsan8_lavBnIF7WETp-F_LEM0bTZW4keiuLe3cM3VA_9leLry29hAZ1_vXfU.png) +![Image 11](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e778b3a2f89c145c5_2I5Ickc_OXlcgym-Ju-rDd9gVc0kVk-QW0_js_3gURGp0dgqj5jS0lOzoIox8vr07ky4hiHkn3LHiTIJ0JKU4jK6Q9rIsan8_lavBnIF7WETp-F_LEM0bTZW4keiuLe3cM3VA_9leLry29hAZ1_vXfU.png) 7. Select your preferred team or channel you would like to add Botkube to -![Image 12: a screen shot of a google adwords account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) +![Image 12](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) 8. Next, Navigate to the chat window and a welcome message should appear 9. Select the **Grant Access** button -![Image 13: a screen showing a microsoft account sign in screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d3cb1d0c7707a8a18_OHBLhhF5yDy9WTlI0AGKR5CnwnFjre9_Vz2BKdaUsnpAnxwk4hdqExTzBxp3yX0MH9wKGbktN0E6RG9YPeLlMShX0ybFtJ2eNbkt2WmHrLzTkBm7bZPnYcDLmy9YbQEcsbhNh5ZWj1HhibNRxe223IQ.png) +![Image 13](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d3cb1d0c7707a8a18_OHBLhhF5yDy9WTlI0AGKR5CnwnFjre9_Vz2BKdaUsnpAnxwk4hdqExTzBxp3yX0MH9wKGbktN0E6RG9YPeLlMShX0ybFtJ2eNbkt2WmHrLzTkBm7bZPnYcDLmy9YbQEcsbhNh5ZWj1HhibNRxe223IQ.png) 10. A new window will pop up asking you to grant access. Click **Accept** @@ -133,25 +133,25 @@ Dashboard setup 11. Navigate to the chat window and select **Connect to Botkube Cloud** -![Image 14: a screen shot of a google adwords account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) +![Image 14](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) 12. This will take you to the Botkube Cloud dashboard. Your Teams channel will appear. Select the **Connect** Button. -![Image 15: a screen shot of a website with the words contact web project team](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eefd26cc09bfeec2845b3_Screen%20Shot%202023-12-05%20at%201.38.28%20AM.png) +![Image 15](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eefd26cc09bfeec2845b3_Screen%20Shot%202023-12-05%20at%201.38.28%20AM.png) -![Image 16: a screen shot of a sign up page with a green check mark](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d165a59345b2b698b__rEh9UH04sSf8XxhQi_3JhGSjynIaVLwD--bRFqQa3v2Rqrahxpnna3yryM1a4omthQ-Fize-gyhNgRAXDTl-DYQXkJ1LUhp1OvRWNwn62jwfra7qa806TPcVm13W3pbeA52XN47_MlPkUVEvvyb6KA.png) +![Image 16](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d165a59345b2b698b__rEh9UH04sSf8XxhQi_3JhGSjynIaVLwD--bRFqQa3v2Rqrahxpnna3yryM1a4omthQ-Fize-gyhNgRAXDTl-DYQXkJ1LUhp1OvRWNwn62jwfra7qa806TPcVm13W3pbeA52XN47_MlPkUVEvvyb6KA.png) 13. All of your Teams information will appear in the dashboard. Select the channels you want to use with Botkube. -![Image 17: a screen shot of a form in the adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ead44d850b34e7f35_nSgmglbxW-mAFvthFI-1q0c0dcMg2m2wejlA2__CmM-vyDDeyLjUh84vTLufTx77jaJ-ifWWa1bzkFpn7bPK0KbehAARBOg2Zle9HbNUk3SXAP9-jcNbNXFypsfgSPY75R2BLLwmDi9nUFUY88StBNg.png) +![Image 17](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ead44d850b34e7f35_nSgmglbxW-mAFvthFI-1q0c0dcMg2m2wejlA2__CmM-vyDDeyLjUh84vTLufTx77jaJ-ifWWa1bzkFpn7bPK0KbehAARBOg2Zle9HbNUk3SXAP9-jcNbNXFypsfgSPY75R2BLLwmDi9nUFUY88StBNg.png) 14. Connect your preferred plugins -![Image 18: a screen shot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ddec01b0e38f3eb6d_pVkuqIiFGr5zQ8lNXQcSMQXQhDbPx5rZ6m0OptpyWKHIfpzzTwn1UbTR44-HU_YM2NOBfoOhvapjYfohK0AUjF5dsvV_8JGnujLfhEzupnaCMLJoD4pzbAE6aHZemjv1Rzzi3rsu8HoFbqrSxbu1TVI.png) +![Image 18](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ddec01b0e38f3eb6d_pVkuqIiFGr5zQ8lNXQcSMQXQhDbPx5rZ6m0OptpyWKHIfpzzTwn1UbTR44-HU_YM2NOBfoOhvapjYfohK0AUjF5dsvV_8JGnujLfhEzupnaCMLJoD4pzbAE6aHZemjv1Rzzi3rsu8HoFbqrSxbu1TVI.png) 15. Review and select your preferred Botkube defaults. -![Image 19: a screenshot of the review blob details page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d6f8e75cab928022a_PVwnI51Br_JjDcyKQsNjixKmrtTDW10Ug0gHIUJMFxDo51P-_aRrStZiIrK-Pmqxg3DnFwrtTRZqhHUGhZv2d37pHnWMmUvx9p5o4FnQe8M-YkkM8wVZk7_P3-tUs0umUmnfE37H4QbtR8E-yg36w2A.png) +![Image 19](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d6f8e75cab928022a_PVwnI51Br_JjDcyKQsNjixKmrtTDW10Ug0gHIUJMFxDo51P-_aRrStZiIrK-Pmqxg3DnFwrtTRZqhHUGhZv2d37pHnWMmUvx9p5o4FnQe8M-YkkM8wVZk7_P3-tUs0umUmnfE37H4QbtR8E-yg36w2A.png) 16. Select **Apply changes** 17. Congratulations! You have successfully deployed Botkube for Microsoft Teams! diff --git a/hack/assistant-setup/content/botkube.io__blog__introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting.md b/hack/assistant-setup/content/botkube.io__blog__introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting.md index fbab4317..7099c37e 100644 --- a/hack/assistant-setup/content/botkube.io__blog__introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting.md +++ b/hack/assistant-setup/content/botkube.io__blog__introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/introducing-botkube-v1-0-the-future-of-kuber Published Time: May 04, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -39,7 +39,7 @@ Key Features of Botkube v1.0 RBAC support ------------ -![Image 2: a diagram of a business process](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6437222690593713ca726589_botkube-read-only-717ed01cf9fa5e6621f2a09c7b29a32d.svg) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6437222690593713ca726589_botkube-read-only-717ed01cf9fa5e6621f2a09c7b29a32d.svg) Botkube RBAC Architecture @@ -54,7 +54,7 @@ Interactive Control Plane Botkube brings an exciting new feature to the table - a [web-based control plane](https://app.botkube.io/) that works across multiple clusters. With this powerful tool, you can create new Botkube instances in a flash, making installation into a K8s cluster a breeze. The control plane also enables you to modify the configuration of communication platforms and plugins, and even synchronize the configuration to Botkube instances automatically. -![Image 3: a screen shot of a web page showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/643728ace69f4305d971ce6f_Screen%20Shot%202023-04-12%20at%202.54.18%20PM.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/643728ace69f4305d971ce6f_Screen%20Shot%202023-04-12%20at%202.54.18%20PM.png) Botkube Control Plane diff --git a/hack/assistant-setup/content/botkube.io__blog__introducing-botkubes-integration-with-flux.md b/hack/assistant-setup/content/botkube.io__blog__introducing-botkubes-integration-with-flux.md index f11fd1ec..bb705a8f 100644 --- a/hack/assistant-setup/content/botkube.io__blog__introducing-botkubes-integration-with-flux.md +++ b/hack/assistant-setup/content/botkube.io__blog__introducing-botkubes-integration-with-flux.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/introducing-botkubes-integration-with-flux Published Time: Aug 28, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -77,7 +77,22 @@ Optimized Flux Workflow With Botkube's new Flux executor, you can simplify complex tasks using a single command -@BotKube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch] This command works right in your preferred chat platform like Slack or Teams, making everything easy. Get ready to experience a world where innovation and user-friendly simplicity come together! ### Auto-discovery of GitHub Repository Seamlessly identifies the associated GitHub repository linked to the provided kustomization. ### Effortless Repository Cloning The git repository is cloned without manual intervention. ### Precision with Pull Requests The specified pull request is accurately reviewed by our [AI assistant](https://botkube.io/integration/chatgpt-botkube-kubernetes-integration) for processing. + @BotKube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch] + + +This command works right in your preferred chat platform like Slack or Teams, making everything easy. Get ready to experience a world where innovation and user-friendly simplicity come together! + +### Auto-discovery of GitHub Repository + +Seamlessly identifies the associated GitHub repository linked to the provided kustomization. + +### Effortless Repository Cloning + +The git repository is cloned without manual intervention. + +### Precision with Pull Requests + +The specified pull request is accurately reviewed by our [AI assistant](https://botkube.io/integration/chatgpt-botkube-kubernetes-integration) for processing. ### Seamless State Comparison diff --git a/hack/assistant-setup/content/botkube.io__blog__is-chatops-a-kubernetes-dashboard-alternative.md b/hack/assistant-setup/content/botkube.io__blog__is-chatops-a-kubernetes-dashboard-alternative.md index 5222c240..43d8b9cf 100644 --- a/hack/assistant-setup/content/botkube.io__blog__is-chatops-a-kubernetes-dashboard-alternative.md +++ b/hack/assistant-setup/content/botkube.io__blog__is-chatops-a-kubernetes-dashboard-alternative.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/is-chatops-a-kubernetes-dashboard-alternativ Published Time: Jul 10, 2023 Markdown Content: -![Image 1: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) Evan Witmer diff --git a/hack/assistant-setup/content/botkube.io__blog__level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant.md b/hack/assistant-setup/content/botkube.io__blog__level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant.md index cfa4d995..5d519b9f 100644 --- a/hack/assistant-setup/content/botkube.io__blog__level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant.md +++ b/hack/assistant-setup/content/botkube.io__blog__level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/level-up-your-sre-workflow-automating-manual Published Time: Apr 18, 2024 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -35,7 +35,7 @@ The Challenges of Repetitive SRE Work ### Manifest Management -![Image 2: a screen shot of a web page with text on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6620427a1e5102e6a6bed019_generate%20a%20manifest.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6620427a1e5102e6a6bed019_generate%20a%20manifest.gif) Manually generating Kubernetes manifests is a notorious time sink. YAML's simplicity can be deceiving; even minor errors can lead to manifest parsing failures and subsequent deployment issues. Scaling applications increases manifest complexity, demanding precise configurations for resources, secrets, and health checks. Errors here lead to wasted time troubleshooting, misallocated resources, and even application failures. This leads to increased K8s troubleshooting and deployment delays, slowing down Kubernetes workflows and decreasing the efficiency of platform teams. @@ -45,7 +45,7 @@ Generate manifests effortlessly by asking Botkube in either plain English or wit ### Manual Log retrieval -![Image 3: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) While isolating root causes within log data is a critical part of troubleshooting, it is a significant challenge for SREs. Manually sifting through complex and unstructured log streams drains SRE resources, increasing the risk of downtime and service disruptions. This also limits the ability of teams to identify patterns, trends, potential vulnerabilities before they cause major outages. @@ -53,11 +53,11 @@ While isolating root causes within log data is a critical part of troubleshootin Retrieve logs instantly with simple natural language requests, saving time and receiving the critical information SREs need quicker (e.g., "Show me error logs from the web app in the last hour"). -![Image 4: a screenshot of a chat window on a computer screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6620424f69c1630d0e844f62_VjXHCgp2Yv_Ux-63VIn9d_D7cAL52_0UUcsX-2U0HlS1o8x_AOQp0MPSUxZp7yCcCui7FCBy0_xzPdJq0jsB7lf1n7PjdSLXKHFdz5qqhTb03qNptWPPBL7P8tq1SAOIZW4Bv-26RWIiEHcfyIcWyg8.gif) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6620424f69c1630d0e844f62_VjXHCgp2Yv_Ux-63VIn9d_D7cAL52_0UUcsX-2U0HlS1o8x_AOQp0MPSUxZp7yCcCui7FCBy0_xzPdJq0jsB7lf1n7PjdSLXKHFdz5qqhTb03qNptWPPBL7P8tq1SAOIZW4Bv-26RWIiEHcfyIcWyg8.gif) ### Metric Monitoring -![Image 5: a screen shot of a window showing the email settings](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657c77914d9e2672b3b4f54a_654d07eb1993ada26a1f17b1_Enabling_Developers.gif) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657c77914d9e2672b3b4f54a_654d07eb1993ada26a1f17b1_Enabling_Developers.gif) Staying on top of key system metrics is an essential part of maintaining safe and reliable systems, but constantly monitoring dashboards takes up valuable time that SREs could spend doing other tasks. These dashboards often target different audiences and have different levels of access, forcing engineers to switch between them, breaking their focus and limiting their productivity. @@ -68,14 +68,14 @@ Botkube's intelligent monitoring goes beyond traditional by employing advanced a Generate Your Deployment Manifest Instantly with Botkube -------------------------------------------------------- -![Image 6: a screen shot of a web browser with a message screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/66207be4095de29d8a4fa8fd_deploy-serviceyaml-ezgif.com-video-to-gif-converter.gif) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/66207be4095de29d8a4fa8fd_deploy-serviceyaml-ezgif.com-video-to-gif-converter.gif) Manually creating Kubernetes manifests can be a time-consuming process. By automating manifest generation, Botkube eliminates the need for manual configuration and reduces the risk of errors. Simply specify your desired deployment configuration, and Botkube will generate the necessary Kubernetes manifests. In this example: 1. **Ask Botkube: In your chat platform, type:** -@Botkube ai create deployment for inventory-api with 2 replicas and port 8080 using container image company/inventory-api:latest - + @Botkube ai create deployment for inventory-api with 2 replicas and port 8080 using container image company/inventory-api:latest + 2. **Botkube Responds:** It instantly generates a valid Kubernetes deployment manifest. It might even suggest optimizations tailored to your cluster. 3. **Deploy with Confidence:** Apply the manifest to your cluster and get back to more important tasks. @@ -85,7 +85,7 @@ More Ways Botkube Enhances Your Workflow ### Work where you work - [Slack, Microsoft Teams, Discord and Mattermost.](https://botkube.io/integrations) -![Image 7: a screen shot of a conversation between two people](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__leveraging-botkube-for-kubernetes-cost-optimization-and-reporting.md b/hack/assistant-setup/content/botkube.io__blog__leveraging-botkube-for-kubernetes-cost-optimization-and-reporting.md index f124ef71..50721f42 100644 --- a/hack/assistant-setup/content/botkube.io__blog__leveraging-botkube-for-kubernetes-cost-optimization-and-reporting.md +++ b/hack/assistant-setup/content/botkube.io__blog__leveraging-botkube-for-kubernetes-cost-optimization-and-reporting.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/leveraging-botkube-for-kubernetes-cost-optim Published Time: Jan 29, 2024 Markdown Content: -![Image 1: a man in a black shirt is standing in front of a circle with the words experts google cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9dc3218bb2465f041cea7_1693115200398.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9dc3218bb2465f041cea7_1693115200398.jpeg) Rohit Ghumare @@ -42,7 +42,7 @@ Botkube stands out as a vital messaging solution for keeping a close eye on and ‍ -![Image 2: a diagram of a basic azure stack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65b72fc399ffea33dc180476_botklube_diagram.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65b72fc399ffea33dc180476_botklube_diagram.png) botkube architecture diagram @@ -99,4 +99,40 @@ Similarly, configure alerts for under-utilized resources, which can help identif To set up periodic reporting in BotKube, you must configure a custom script or plugin that periodically gathers resource usage data and sends a report. Let's assume we have a script named `generate_cost_report.sh` that compiles the report. We will schedule this script to run at regular intervals using a Kubernetes CronJob. -
apiVersion: batch/v1
kind: CronJob
metadata:
name: cost-report-cronjob
spec:
schedule: "0 0 * * *" # This schedule is for daily execution at midnight
jobTemplate:
spec:
template:
spec:
containers:
- name: cost-report
image: your-report-generator-image
command: ["/bin/bash", "-c", "./generate_cost_report.sh"]
restartPolicy: OnFailure
In this configuration, replace `your-report-generator-image` with the Docker image that contains your script. The `generate_cost_report.sh` should output the report in a format Botkube can send to your communication platform. ### **2\. Custom Reporting Scripts** Here's a simple Bash script example to generate a cost report. This script could be expanded to pull more detailed data as per your requirements.
#!/bin/bash
# generate_cost_report.sh
# Fetch resource usage details
pod_usage=$(kubectl top pod --all-namespaces --sort-by='cpu' | head -5)
node_usage=$(kubectl top node | head -5)
# Format the report
report="Kubernetes Cost Report:\n\n"
report+="Top 5 CPU Consuming Pods:\n${pod_usage}\n\n"
report+="Top 5 CPU Consuming Nodes:\n${node_usage}"
# Send the report via BotKube
echo "$report" | botkube send -n botkube -c botkube-communication-channel
‍`‍` **Analyzing and Acting on the Data** ------------------------------------ ### **1\. Analyzing Reports** While the script handles the generation and sending of the reports, analysis is more of a manual process. You would typically read through the reports to identify trends and anomalies in resource usage. ### **2\. Implementing Cost-Saving Measures** Based on the analysis, you might write scripts to automate scaling actions. Here's a simple script to scale down a deployment if it's underutilized:
#!/bin/bash
# check_and_scale_down.sh
# Define threshold and deployment
cpu_threshold=30 # 30%
deployment_name="your-deployment"
namespace="your-namespace"
# Fetch current CPU usage (in percentage)
current_cpu_usage=$(kubectl top pod -n $namespace | grep $deployment_name | awk '{print $3}' | sed 's/%//')
# Check if current usage is below threshold and scale down if it is
if [ "$current_cpu_usage" -lt "$cpu_threshold" ]; then
echo "Current CPU usage ($current_cpu_usage%) is below threshold ($cpu_threshold%). Scaling down..."
kubectl scale deployment $deployment_name --replicas=1 -n $namespace
else
echo "Current CPU usage is above threshold. No scaling performed."
fi
`‍`The script `check_and_scale_down.sh` has been created. This script checks the CPU usage of a specific deployment and scales it down if the usage is below the defined threshold. You can customize the `cpu_threshold`, `deployment_name`, and `namespace` variables as per your requirements. > 💡 This script is a basic example and serves as a starting point. Depending on your cluster's complexity and specific needs, you may need to expand or modify it. Remember to test any automation scripts in a controlled environment before deploying them in production. **Conclusion** -------------- Following these steps, you can effectively use Botkube to monitor, report, and optimize your Kubernetes resource usage for better cost management. Regular monitoring and proactive management are key to maintaining an efficient and cost-effective Kubernetes environment. Remember, the configurations and scripts can be further customized to suit your specific needs and the complexity of your Kubernetes environment. For more details, Join the Botkube-related discussion on Slack! Create your Slack account on [Botkube](https://join.botkube.io/) workspace today. To report bugs or features, use [GitHub issues](https://github.com/kubeshop/botkube/issues/new/choose). +
apiVersion: batch/v1
kind: CronJob
metadata:
name: cost-report-cronjob
spec:
schedule: "0 0 * * *" # This schedule is for daily execution at midnight
jobTemplate:
spec:
template:
spec:
containers:
- name: cost-report
image: your-report-generator-image
command: ["/bin/bash", "-c", "./generate_cost_report.sh"]
restartPolicy: OnFailure
+ +In this configuration, replace `your-report-generator-image` with the Docker image that contains your script. The `generate_cost_report.sh` should output the report in a format Botkube can send to your communication platform. + +### **2\. Custom Reporting Scripts** + +Here's a simple Bash script example to generate a cost report. This script could be expanded to pull more detailed data as per your requirements. + +
#!/bin/bash
# generate_cost_report.sh
# Fetch resource usage details
pod_usage=$(kubectl top pod --all-namespaces --sort-by='cpu' | head -5)
node_usage=$(kubectl top node | head -5)
# Format the report
report="Kubernetes Cost Report:\n\n"
report+="Top 5 CPU Consuming Pods:\n${pod_usage}\n\n"
report+="Top 5 CPU Consuming Nodes:\n${node_usage}"
# Send the report via BotKube
echo "$report" | botkube send -n botkube -c botkube-communication-channel
+ +‍`‍` + +**Analyzing and Acting on the Data** +------------------------------------ + +### **1\. Analyzing Reports** + +While the script handles the generation and sending of the reports, analysis is more of a manual process. You would typically read through the reports to identify trends and anomalies in resource usage. + +### **2\. Implementing Cost-Saving Measures** + +Based on the analysis, you might write scripts to automate scaling actions. Here's a simple script to scale down a deployment if it's underutilized: + +
#!/bin/bash
# check_and_scale_down.sh
# Define threshold and deployment
cpu_threshold=30 # 30%
deployment_name="your-deployment"
namespace="your-namespace"
# Fetch current CPU usage (in percentage)
current_cpu_usage=$(kubectl top pod -n $namespace | grep $deployment_name | awk '{print $3}' | sed 's/%//')
# Check if current usage is below threshold and scale down if it is
if [ "$current_cpu_usage" -lt "$cpu_threshold" ]; then
echo "Current CPU usage ($current_cpu_usage%) is below threshold ($cpu_threshold%). Scaling down..."
kubectl scale deployment $deployment_name --replicas=1 -n $namespace
else
echo "Current CPU usage is above threshold. No scaling performed."
fi
+ +`‍`The script `check_and_scale_down.sh` has been created. This script checks the CPU usage of a specific deployment and scales it down if the usage is below the defined threshold. You can customize the `cpu_threshold`, `deployment_name`, and `namespace` variables as per your requirements. + +> 💡 This script is a basic example and serves as a starting point. Depending on your cluster's complexity and specific needs, you may need to expand or modify it. Remember to test any automation scripts in a controlled environment before deploying them in production. + +**Conclusion** +-------------- + +Following these steps, you can effectively use Botkube to monitor, report, and optimize your Kubernetes resource usage for better cost management. Regular monitoring and proactive management are key to maintaining an efficient and cost-effective Kubernetes environment. + +Remember, the configurations and scripts can be further customized to suit your specific needs and the complexity of your Kubernetes environment. + +For more details, Join the Botkube-related discussion on Slack! Create your Slack account on [Botkube](https://join.botkube.io/) workspace today. To report bugs or features, use [GitHub issues](https://github.com/kubeshop/botkube/issues/new/choose). diff --git a/hack/assistant-setup/content/botkube.io__blog__maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams.md b/hack/assistant-setup/content/botkube.io__blog__maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams.md index 78e5f093..2b0f5656 100644 --- a/hack/assistant-setup/content/botkube.io__blog__maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams.md +++ b/hack/assistant-setup/content/botkube.io__blog__maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-b Published Time: Nov 29, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -65,9 +65,9 @@ _\*\* Steps 1-4 and 7-10 are one-time operations requiring administrative privil 1. Select create a new instance -![Image 2: a screen shot of a landing page for a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7dd390269cbe2d3ba4_jCUYYPLNDFZDkosCGhXjsC4Cvk9OsKaPJowAXS_Yi3-gdAekdM-YYj_QvgqvMCkAOIDbqXTaJGZuJFAjb5pIwZWo0kFlQwPBcwAzKW6X7ax6gK3rQVjbGKOJg_9Ps9i28sE-f7xg0hdp8hoY5mPwnNI.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7dd390269cbe2d3ba4_jCUYYPLNDFZDkosCGhXjsC4Cvk9OsKaPJowAXS_Yi3-gdAekdM-YYj_QvgqvMCkAOIDbqXTaJGZuJFAjb5pIwZWo0kFlQwPBcwAzKW6X7ax6gK3rQVjbGKOJg_9Ps9i28sE-f7xg0hdp8hoY5mPwnNI.png) -![Image 3: a screen shot of the intel dgb jdk page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e072ab825022ca51e_w3OobTivy6lb1zbPozEcTOySEmAZPSRU0WVO120nal_egmZ-HVayv2FIuTzLsJ6vBJuZBfrFLiMkzjzpOS2kJash0C8_p3scSVIAFUY5Rb_1YqE2xACl2811ugQ1E-VazSxtzki-AirkeARSEZ5sKq0.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e072ab825022ca51e_w3OobTivy6lb1zbPozEcTOySEmAZPSRU0WVO120nal_egmZ-HVayv2FIuTzLsJ6vBJuZBfrFLiMkzjzpOS2kJash0C8_p3scSVIAFUY5Rb_1YqE2xACl2811ugQ1E-VazSxtzki-AirkeARSEZ5sKq0.png) 2. Next, use homebrew or curl to install Botkube CLI on your terminal (Step 1) 3. Copy and paste the `Botkube install`… command (Step 2) @@ -75,72 +75,72 @@ _\*\* Steps 1-4 and 7-10 are one-time operations requiring administrative privil ‍ -![Image 4: a screen shot of a web page showing a house and arrows](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e1938916887fbf34f_WVBv6m9k1C5RWt4FI7QuA8VU-lSDXKQZOJWyqvfe7YZVDnNxquO3DBkznU2LP9TulrVxeDPloV4O7w40n6OVt3NjPPkMynGNKA_6wbc1knG-znVU3N5E8J6H1fqmpWafhnh4eOgb37W1Di2MgHUrrtU.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e1938916887fbf34f_WVBv6m9k1C5RWt4FI7QuA8VU-lSDXKQZOJWyqvfe7YZVDnNxquO3DBkznU2LP9TulrVxeDPloV4O7w40n6OVt3NjPPkMynGNKA_6wbc1knG-znVU3N5E8J6H1fqmpWafhnh4eOgb37W1Di2MgHUrrtU.png) 5. Name your instance and select the **Teams** option -![Image 5: a screenshot of the adobe adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e6a852b2620a9b5fb_7fpjvjcPJcqBZKRJ2oNOisODdOt9vN9J-sYcsuFLYMzlKF8CzLOXI3vM83HZ0YvdShckXSZcDBTclvCv9IRPGrNqeIIMBA6KdnKhilwSek9nqKBLZOrwUUFMZYe5zIBJmv2nh3jwJuJK2kjgO5Lh1ZM.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e6a852b2620a9b5fb_7fpjvjcPJcqBZKRJ2oNOisODdOt9vN9J-sYcsuFLYMzlKF8CzLOXI3vM83HZ0YvdShckXSZcDBTclvCv9IRPGrNqeIIMBA6KdnKhilwSek9nqKBLZOrwUUFMZYe5zIBJmv2nh3jwJuJK2kjgO5Lh1ZM.png) 6. Select the Download button to download the Botkube App. It will show up as **Botkube.zip** ‍ -![Image 6: a screenshot of a google chrome browser showing a file on the screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db9251f0d1db86ab7_w9yhNzeHzqqc4JawGTersD2qogEalGSUFs9xlGLhX_8OoCXcxSEEaJNnXaAdB3KyA25t6XnaNAzAM_P1cBjLNN68lZZGZ6GjAwWL8iAlXn4hyrwJ5FM3p8MLBCyUtwoSvw1ZRWBs7ds6jYHeYaJJJAU.png) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db9251f0d1db86ab7_w9yhNzeHzqqc4JawGTersD2qogEalGSUFs9xlGLhX_8OoCXcxSEEaJNnXaAdB3KyA25t6XnaNAzAM_P1cBjLNN68lZZGZ6GjAwWL8iAlXn4hyrwJ5FM3p8MLBCyUtwoSvw1ZRWBs7ds6jYHeYaJJJAU.png) ### Installing Botkube to Microsoft Teams 1. Navigate to the Microsoft Teams application and select **Manage your Apps** at the button of the screen -![Image 7: a screen shot of the microsoft office app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d14da41d53c779535_oErOXojrwoCSfbs3A0830mnbkI1xb2rOD83YopN5B6k7Ti_O5OZdusUD4VrNjdFs_xHSaTxCjdipKQJuaLhpksHgW3Fwd8xx8MSFSq1HiuWVzsoTG90t1Dy4nlcAAkIuNdAsumH4sjQWXljJJ9y_Lbo.png) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d14da41d53c779535_oErOXojrwoCSfbs3A0830mnbkI1xb2rOD83YopN5B6k7Ti_O5OZdusUD4VrNjdFs_xHSaTxCjdipKQJuaLhpksHgW3Fwd8xx8MSFSq1HiuWVzsoTG90t1Dy4nlcAAkIuNdAsumH4sjQWXljJJ9y_Lbo.png) 2. Next select **Upload an app** and select **Upload an app to your org’s app catalog** -![Image 8: a screen shot of the azure portal](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eef4cf0cfa6050f79acc5_Screen%20Shot%202023-12-05%20at%201.36.02%20AM.png) +![Image 8](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eef4cf0cfa6050f79acc5_Screen%20Shot%202023-12-05%20at%201.36.02%20AM.png) 3. Select the **Botkube.zip** file from the previous section 4. Navigate to the **Apps** section on the left hand side and select the **Built for your Org section.** The Botkube application will be there. 5. Select the **Add** buttton. -![Image 9: a screen shot of the google drive app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d640c39e96661f69e_zpXrkocqwakQB8jrA8pwYH2CSrmRim4pp13-Pt8lZRgdgw33jCDfqnrxpYK3jt2fhSctK5cIyMt9taA-VAAUSD3tiicgAdTafZ7gAqBs08Bkljt7BJlUsxUh3OUdg1fhjCiCO5lTztUHXd8CrccWxXs.png) +![Image 9](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d640c39e96661f69e_zpXrkocqwakQB8jrA8pwYH2CSrmRim4pp13-Pt8lZRgdgw33jCDfqnrxpYK3jt2fhSctK5cIyMt9taA-VAAUSD3tiicgAdTafZ7gAqBs08Bkljt7BJlUsxUh3OUdg1fhjCiCO5lTztUHXd8CrccWxXs.png) -![Image 10: a screen shot of a google search page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d053e39713de9aa28_FNgbV-UuRUprEaIcHxqlypAX2PnrAGJjbfHZu8I2uJ4zRqP3ZXt3L4ez8rPqWhZZv_-ruLTTXoWLZFO5Nv4vKTfoJ8hjqFjrHX-M_RwhlaAPrF5IDEcZjDg523tVuwYOMranVLyV3IOVrbDzRI4OY5M.png) +![Image 10](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d053e39713de9aa28_FNgbV-UuRUprEaIcHxqlypAX2PnrAGJjbfHZu8I2uJ4zRqP3ZXt3L4ez8rPqWhZZv_-ruLTTXoWLZFO5Nv4vKTfoJ8hjqFjrHX-M_RwhlaAPrF5IDEcZjDg523tVuwYOMranVLyV3IOVrbDzRI4OY5M.png) 6. And then select the **Add to team** button -![Image 11: a screen shot of the microsoft store page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e778b3a2f89c145c5_2I5Ickc_OXlcgym-Ju-rDd9gVc0kVk-QW0_js_3gURGp0dgqj5jS0lOzoIox8vr07ky4hiHkn3LHiTIJ0JKU4jK6Q9rIsan8_lavBnIF7WETp-F_LEM0bTZW4keiuLe3cM3VA_9leLry29hAZ1_vXfU.png) +![Image 11](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e778b3a2f89c145c5_2I5Ickc_OXlcgym-Ju-rDd9gVc0kVk-QW0_js_3gURGp0dgqj5jS0lOzoIox8vr07ky4hiHkn3LHiTIJ0JKU4jK6Q9rIsan8_lavBnIF7WETp-F_LEM0bTZW4keiuLe3cM3VA_9leLry29hAZ1_vXfU.png) 7. Select your preferred team or channel you would like to add Botkube to -![Image 12: a screen shot of a google adwords account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) +![Image 12](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) 8. Next, Navigate to the chat window and a welcome message should appear 9. Select the **Grant Access** button -![Image 13: a screen showing a microsoft account sign in screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d3cb1d0c7707a8a18_OHBLhhF5yDy9WTlI0AGKR5CnwnFjre9_Vz2BKdaUsnpAnxwk4hdqExTzBxp3yX0MH9wKGbktN0E6RG9YPeLlMShX0ybFtJ2eNbkt2WmHrLzTkBm7bZPnYcDLmy9YbQEcsbhNh5ZWj1HhibNRxe223IQ.png) +![Image 13](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d3cb1d0c7707a8a18_OHBLhhF5yDy9WTlI0AGKR5CnwnFjre9_Vz2BKdaUsnpAnxwk4hdqExTzBxp3yX0MH9wKGbktN0E6RG9YPeLlMShX0ybFtJ2eNbkt2WmHrLzTkBm7bZPnYcDLmy9YbQEcsbhNh5ZWj1HhibNRxe223IQ.png) 10. A new window will pop up asking you to grant access. Click **Accept** 11. Navigate to the chat window and select **Connect to Botkube Cloud** -![Image 14: a screen shot of a google adwords account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) +![Image 14](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) 12. This will take you to the Botkube Cloud dashboard. Your Teams channel will appear. Select the **Connect** Button. -![Image 15: a screen shot of a website with the words contact web project team](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eefd26cc09bfeec2845b3_Screen%20Shot%202023-12-05%20at%201.38.28%20AM.png) +![Image 15](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eefd26cc09bfeec2845b3_Screen%20Shot%202023-12-05%20at%201.38.28%20AM.png) -![Image 16: a screen shot of a sign up page with a green check mark](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d165a59345b2b698b__rEh9UH04sSf8XxhQi_3JhGSjynIaVLwD--bRFqQa3v2Rqrahxpnna3yryM1a4omthQ-Fize-gyhNgRAXDTl-DYQXkJ1LUhp1OvRWNwn62jwfra7qa806TPcVm13W3pbeA52XN47_MlPkUVEvvyb6KA.png) +![Image 16](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d165a59345b2b698b__rEh9UH04sSf8XxhQi_3JhGSjynIaVLwD--bRFqQa3v2Rqrahxpnna3yryM1a4omthQ-Fize-gyhNgRAXDTl-DYQXkJ1LUhp1OvRWNwn62jwfra7qa806TPcVm13W3pbeA52XN47_MlPkUVEvvyb6KA.png) 13. All of your Teams information will appear in the dashboard. Select the channels you want to use with Botkube. -![Image 17: a screen shot of a form in the adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ead44d850b34e7f35_nSgmglbxW-mAFvthFI-1q0c0dcMg2m2wejlA2__CmM-vyDDeyLjUh84vTLufTx77jaJ-ifWWa1bzkFpn7bPK0KbehAARBOg2Zle9HbNUk3SXAP9-jcNbNXFypsfgSPY75R2BLLwmDi9nUFUY88StBNg.png) +![Image 17](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ead44d850b34e7f35_nSgmglbxW-mAFvthFI-1q0c0dcMg2m2wejlA2__CmM-vyDDeyLjUh84vTLufTx77jaJ-ifWWa1bzkFpn7bPK0KbehAARBOg2Zle9HbNUk3SXAP9-jcNbNXFypsfgSPY75R2BLLwmDi9nUFUY88StBNg.png) 14. Connect your preferred plugins -![Image 18: a screen shot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ddec01b0e38f3eb6d_pVkuqIiFGr5zQ8lNXQcSMQXQhDbPx5rZ6m0OptpyWKHIfpzzTwn1UbTR44-HU_YM2NOBfoOhvapjYfohK0AUjF5dsvV_8JGnujLfhEzupnaCMLJoD4pzbAE6aHZemjv1Rzzi3rsu8HoFbqrSxbu1TVI.png) +![Image 18](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ddec01b0e38f3eb6d_pVkuqIiFGr5zQ8lNXQcSMQXQhDbPx5rZ6m0OptpyWKHIfpzzTwn1UbTR44-HU_YM2NOBfoOhvapjYfohK0AUjF5dsvV_8JGnujLfhEzupnaCMLJoD4pzbAE6aHZemjv1Rzzi3rsu8HoFbqrSxbu1TVI.png) 15. Review and select your preferred Botkube defaults. -![Image 19: a screenshot of the review blob details page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d6f8e75cab928022a_PVwnI51Br_JjDcyKQsNjixKmrtTDW10Ug0gHIUJMFxDo51P-_aRrStZiIrK-Pmqxg3DnFwrtTRZqhHUGhZv2d37pHnWMmUvx9p5o4FnQe8M-YkkM8wVZk7_P3-tUs0umUmnfE37H4QbtR8E-yg36w2A.png) +![Image 19](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d6f8e75cab928022a_PVwnI51Br_JjDcyKQsNjixKmrtTDW10Ug0gHIUJMFxDo51P-_aRrStZiIrK-Pmqxg3DnFwrtTRZqhHUGhZv2d37pHnWMmUvx9p5o4FnQe8M-YkkM8wVZk7_P3-tUs0umUmnfE37H4QbtR8E-yg36w2A.png) 16. Select **Apply changes** 17. Congratulations! You have successfully deployed Botkube for Microsoft Teams! diff --git a/hack/assistant-setup/content/botkube.io__blog__microsoft-teams-integration-for-botkube-a-technical-journey.md b/hack/assistant-setup/content/botkube.io__blog__microsoft-teams-integration-for-botkube-a-technical-journey.md index 6c899e85..ab1bb8d8 100644 --- a/hack/assistant-setup/content/botkube.io__blog__microsoft-teams-integration-for-botkube-a-technical-journey.md +++ b/hack/assistant-setup/content/botkube.io__blog__microsoft-teams-integration-for-botkube-a-technical-journey.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-te Published Time: Dec 14, 2023 Markdown Content: -![Image 1: a black and white photo of a man in a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ed2e11a11a3c6d7401_53d6BKOddSnzxKZMBQxx_KPWy4IOk8nhK4eSxM8uKIo.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ed2e11a11a3c6d7401_53d6BKOddSnzxKZMBQxx_KPWy4IOk8nhK4eSxM8uKIo.jpeg) Paweł Kosiec @@ -17,70 +17,72 @@ Discover the technical journey behind enhancing Microsoft Teams integration for ### Table of Contents -* [Introduction](#introduction-) -* [Inspiration from the Field](#inspiration-from-the-field-) -* [Technical journey](#technical-journey-) -* [New Microsoft Teams integration: Key Features](#new-microsoft-teams-integration-key-features-) -* [Setting Up and Configuration](#setting-up-and-configuration-) -* [What do you think? Let us know!](#what-do-you-think-let-us-know-) +* [Introduction](#introduction--2) +* [Inspiration from the Field](#inspiration-from-the-field--2) +* [Technical journey](#technical-journey--2) +* [New Microsoft Teams integration: Key Features](#new-microsoft-teams-integration-key-features--2) +* [Setting Up and Configuration](#setting-up-and-configuration--2) +* [What do you think? Let us know!](#what-do-you-think-let-us-know--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! #### Start Receiving Kubernetes Notifications Now with Botkube Cloud -Introduction ------------- +Introduction + +--------------- If you are already familiar with Botkube, then you know that it's a collaborative tool to help you monitor and troubleshoot Kubernetes clusters. Botkube integrates the most popular communication platforms, and Microsoft Teams is one of them. -The initial version of our integration debuted in [February 2020](https://github.com/kubeshop/botkube/pull/242), marking a significant milestone in our journey. Since then, we've been continuously evolving and improving. In this release cycle, we've identified and acknowledged its limitations in the user-experience and ease of set up. +The initial version of our integration debuted in \[February 2020\](https://github.com/kubeshop/botkube/pull/242), marking a significant milestone in our journey. Since then, we've been continuously evolving and improving. In this release cycle, we've identified and acknowledged its limitations in the user-experience and ease of set up. -Fortunately, these times are over now! We've been working hard on a brand-new Microsoft Teams integration, which we introduced as a part of [Botkube 1.6 release](https://botkube.io/blog/botkube-1-6-release). +Fortunately, these times are over now! We've been working hard on a brand-new Microsoft Teams integration, which we introduced as a part of \[Botkube 1.6 release\](https://botkube.io/blog/botkube-1-6-release). Now, let's talk about how we got here. -Inspiration from the Field --------------------------- +Inspiration from the Field + +----------------------------- -During our conversations with users at events like KubeCon and Civo Navigate, we found out that many IT companies rely on Microsoft Teams for their communication. It's not surprising, considering that Microsoft Teams is one of the most popular communication platforms in the world. It is used by over 1 million organizations and 320 million users ([source](https://www.demandsage.com/microsoft-teams-statistics/)). +During our conversations with users at events like KubeCon and Civo Navigate, we found out that many IT companies rely on Microsoft Teams for their communication. It's not surprising, considering that Microsoft Teams is one of the most popular communication platforms in the world. It is used by over 1 million organizations and 320 million users (\[source\](https://www.demandsage.com/microsoft-teams-statistics/)). Through discussions with various users and organizations, a common problem surfaced--many faced challenges due to the requirement for a public endpoint on their Kubernetes clusters and difficult configuration steps. Also, the integration lacked some of the core features that were available in other platforms like Slack. This was usually a blocker for them. Right after the Botkube Cloud launch, we focused on building the seamless multi-cluster Slack integration, as it was without doubt the most popular communication platform among our users. However, we knew that we had to do something about the Microsoft Teams integration as well. Because of the way the Microsoft Teams API works, the only way we could fix this problem properly was a dedicated infrastructure for handling the communication between Botkube and Microsoft Teams. -That was the time we were approached by a large enterprise company that was using Microsoft Teams as their main communication tool. They were interested in a proper multi-cluster solution for their customer's Kubernetes clusters. After a series of interviews and discussions, we used their feedback to start developing a new Microsoft Teams integration. +That was the time we were approached by a large enterprise company that was using Microsoft Teams as their main communication tool. They were interested in a proper multi-cluster solution for their customer's Kubernetes clusters. After a series of interviews and discussions, we  used their feedback to start developing a new Microsoft Teams integration. ‍ -![Image 2: let's do this](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657956af7d97aef6d1200ecc_lets-do-this.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657956af7d97aef6d1200ecc_lets-do-this.gif) Source: [tenor.com](https://tenor.com/) -Technical journey ------------------ +Technical journey + +-------------------- -### Investigation and research +### Investigation and research The very first stage was to investigate various aspects of the Microsoft Teams communication platform and its API. We wanted to understand the limitations and challenges we would face during the development process. We also wanted to make sure that we could deliver the features that were missing in the previous version of the integration. This phase consisted of multiple different steps, including: -* Research around Microsoft Teams Bot Framework and Graph API capabilities. +\- Research around Microsoft Teams Bot Framework and Graph API capabilities. -* Multi-tenancy architecture design with a proof of concept application (covering security, multi-cluster support, and scalability). +\- Multi-tenancy architecture design with a proof of concept application (covering security, multi-cluster support, and scalability). -* App distribution, installation and permission granting process. - -* Interactivity support for the Microsoft Teams messages. +\- App distribution, installation and permission granting process. +\- Interactivity support for the Microsoft Teams messages. Every single step was crucial to the success of the feature and had it own challenges. During the investigation stage, we quickly realized that this solution will be slightly different from the multi-cluster Slack integration we've built before. -### Architecture design +### Architecture design After our set of investigations, we had a clear picture what we're going to build. We established the following architecture: -![Image 3: a flow diagram showing how a user interacts with an app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657956df81f7578f9bec69ec_architecture.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657956df81f7578f9bec69ec_architecture.png) Let me go through the diagram. @@ -92,50 +94,53 @@ Same as for Slack integration, in Botkube Cloud we use a message broker internal Because of the way the Microsoft Teams API works, and to ensure proper tenant separation, both source notifications and executor commands are routed via Botkube Cloud. This is different from the Slack integration, where we could use the Slack API directly from the Botkube instance for handling incoming notifications. However, Botkube Cloud is used simply as a proxy, without storing any event data. -### Interactivity support +### Interactivity support Interactivity support for the Microsoft Teams messages was one of the challenging parts of the development process. We wanted to make sure that the user experience is as good as possible, and close to the Slack integration. Fortunately, Microsoft Teams uses Microsoft's Adaptive Cards format, which is a flexible way to present interactive content in Microsoft Teams messages. Moreover, in-place message updates are supported, to ensure the content is always up-to-date. But, of course, technical details were different from the Slack integration, so we needed to render the messages differently. After a while we were able to achieve similar feeling to the users familiar with our multi-cluster Slack solution. Here's a quick comparison: -![Image 4: a screenshot of the microsoft team page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657957112416eb71be03a4ac_teams-vs-slack-interactivity.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657957112416eb71be03a4ac_teams-vs-slack-interactivity.png) -### Development and testing +### Development and testing Thanks to the Microsoft Teams proof of concept application, we were able to quickly start the development process. The fact that we built the multi-cluster Slack integration before also helped tremendously. We were able to reuse some of the concepts like gRPC communication between Botkube Agent and Botkube Cloud, and the message broker infrastructure. After busy weeks full of development and testing, we were able to deliver the first version of the new Microsoft Teams integration. While it's not yet perfect, it's a huge step forward. We are working on adding more features and improving the existing ones, continuously refining the integration based on user feedback, including the one from the company that came to us with the initial request. -New Microsoft Teams integration: Key Features ---------------------------------------------- +New Microsoft Teams integration: Key Features -So what the first version of the new Microsoft Teams integration brings to the table? Let's take a look at the key features: +------------------------------------------------ -* Multi-cluster support. +So what the first version of the new Microsoft Teams integration brings to the table? Let's take a look at the key features: -* Enhanced per-channel plugin configuration including RBAC policy. +\- Multi-cluster support. -* Interactive messages. +\- Enhanced per-channel plugin configuration including RBAC policy. -* Actionable notifications. +\- Interactive messages. +\- Actionable notifications. While some features known from Slack, such as the Kubectl command builder, are not yet available in the new Microsoft Teams integration, we are working on adding them in the future releases. Still, every single item listed above weren't available in the previous version of the Microsoft Teams integration. And, what's the most important, **we simplified the configuration process**. It still isn't perfect, but we think that it's a huge step forward. -As the previous integration was so painful to set up, we decided to deprecate it. Worry not, though! The new Microsoft Teams integration is now available to all users as a part of the [Botkube Cloud](https://app.botkube.io/) offering--both Free and Team plans. - -![Image 5: a man with long hair looking at a laptop](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65795734bc6d6051bcdd0d01_new-teams-reaction.gif) +As the previous integration was so painful to set up, we decided to deprecate it. Worry not, though! The new Microsoft Teams integration is now available to all users as a part of the \[Botkube Cloud\](https://app.botkube.io) offering--both Free and Team plans. -Your reaction after trying out the new Microsoft Teams integration (hopefully!) source: [tenor.com](https://tenor.com/) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65795734bc6d6051bcdd0d01_new-teams-reaction.gif) -Setting Up and Configuration ----------------------------- +Your reaction after trying out the new Microsoft Teams integration (hopefully!) +source: [tenor.com](https://tenor.com/) -Interested in trying out the brand-new Microsoft Teams integration in Botkube? To get started, create a free [Botkube Cloud](https://app.botkube.io/) account and follow the [Microsoft Teams](https://docs.botkube.io/installation/teams) instruction. To see the multi-cluster support in action, enable the free Botkube Cloud trial and connect as many Botkube installations as you want! +Setting Up and Configuration -What do you think? Let us know! ------------------------------- -We are constantly working on improving Botkube and its new Microsoft Teams integration. Our roadmap is driven by user feedback and community contributions. Let us know what you think about the new integration and how we can make it better. You can reach out to us on the [Botkube Community Slack workspace](https://join.botkube.io/), or simply [create an issue](https://github.com/kubeshop/botkube) on our GitHub repository. +Interested in trying out the brand-new Microsoft Teams integration in Botkube? To get started, create a free \[Botkube Cloud\](https://app.botkube.io) account and follow the \[Microsoft Teams\](https://docs.botkube.io/installation/teams) instruction. To see the multi-cluster support in action, enable the free Botkube Cloud trial and connect as many Botkube installations as you want! + +What do you think? Let us know! + +---------------------------------- + +We are constantly working on improving Botkube and its new Microsoft Teams integration. Our roadmap is driven by user feedback and community contributions. Let us know what you think about the new integration and how we can make it better. You can reach out to us on the \[Botkube Community Slack workspace\](https://join.botkube.io/), or simply \[create an issue\](https://github.com/kubeshop/botkube) on our GitHub repository. diff --git a/hack/assistant-setup/content/botkube.io__blog__optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin.md b/hack/assistant-setup/content/botkube.io__blog__optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin.md index 2a6588f2..74b1277b 100644 --- a/hack/assistant-setup/content/botkube.io__blog__optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin.md +++ b/hack/assistant-setup/content/botkube.io__blog__optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/optimizing-collaboration-and-notifications-w Published Time: Oct 26, 2023 Markdown Content: -![Image 1: a man in sunglasses taking a selfie in the mountains](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3f0810c273feb4b4ad3_VEyGvbbIe6fYlHwidQsOYSS3FvzlHuQsOUjeuZzXWJw.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3f0810c273feb4b4ad3_VEyGvbbIe6fYlHwidQsOYSS3FvzlHuQsOUjeuZzXWJw.jpeg) Josef Karásek @@ -17,11 +17,11 @@ A closer look into the Botkube team's process for developing the ArgoCD plugin ### Table of Contents -* [ArgoCD Plugin for Kubernetes Deployment Management](#argocd-plugin-for-kubernetes-deployment-management) -* [How Botkube Uses ArgoCD for GitOps Management](#how-botkube-uses-argocd-for-gitops-management) -* [Conclusion](#conclusion) -* [Sign up now!](#sign-up-now-) -* [Feedback](#feedback) +* [ArgoCD Plugin for Kubernetes Deployment Management](#argocd-plugin-for-kubernetes-deployment-management-2) +* [How Botkube Uses ArgoCD for GitOps Management](#how-botkube-uses-argocd-for-gitops-management-2) +* [Conclusion](#conclusion-2) +* [Sign up now!](#sign-up-now--2) +* [Feedback](#feedback-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -47,7 +47,7 @@ How Botkube Uses ArgoCD for GitOps Management ![Image 3: Diagram of Developer teams use of Argo CD and Git](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/653a912003e50d0ea9eb0c15_Argo%20Sync%20Image%20(1).png) -Diagram trying to show how Botkube uses ArgoCD and Git to manage K8s Clusters +Diagram trying to show how Botkube uses ArgoCD and Git to manage K8s Clusters At Botkube, we use two long-lived Kubernetes clusters which both run in Google Kubernetes Engine (GKE). One cluster is used for production and the other one is used for staging. Each cluster runs its own Argo instance, which is created during cluster creation. A majority of development and bug fixing is done in local dev environments, such as Kind or k3d clusters and is only merged into the main branch after passing all tests in CI. This means that the main branch is always in a deployable state and ArgoCD in the staging cluster consumes directly from the main branch with the auto-sync feature on. Releases into production need to be triggered manually and can happen less frequently. Although we incorporate time for changes to be tested during the staging process, we have a short feature development cycle and our team is quite comfortable with releasing to prod on Friday evenings. @@ -61,10 +61,25 @@ As with every new Botkube feature, we were the first users. We wanted to make su The plugin can be installed either via web UI at [app.botkube.io](http://app.botkube.io/) or with the Botkube CLI. -Botkube install --version v1.5.0 \\ ---set sources.argocd.Botkube/argocd.enabled=true \\ ---set 'rbac.groups.argocd.create'=true \\ ---set 'sources.argocd.Botkube/argocd.config.defaultSubscriptions.applications\[0\].name'=guestbook \\ --set 'sources.argocd.Botkube/argocd.config.defaultSubscriptions.applications\[0\].namespace'=argocd \\ --set communications.default-group.socketSlack.enabled=true \\ --set communications.default-group.socketSlack.channels.default.name=${SLACK\_CHANNEL\_NAME} \\ --set communications.default-group.socketSlack.appToken=${SLACK\_API\_APP\_TOKEN} \\ --set communications.default-group.socketSlack.botToken=${SLACK\_API\_BOT\_TOKEN} ‍ ‍ Of course, the Botkube engineering team uses Botkube in both staging and prod. We have a dedicated channel for Botkube notifications in our Slack workspace and we have configured the Botkube ArgoCD plugin to send notifications to this channel as well. ![Image 4: Showing Kubernetes Cluster created and deleted in Slack with Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/653a68dff56c4c123324282e_L72F7n2Dmu8c1Ua4Zpyw7FLyLF4LTUh7AjQ8cKUg5u8TguoHXxfwbYBJYMtZjMXCm6PXk3xyEj-dwF83OsRdwoA-RXiMUHSnIQppKb6WnZSim6V8x5_1vp94dlRVuFj7L_fFlwG7Ir_VYrORpIZkzmA.png) + Botkube install --version v1.5.0 \\ + --set sources.argocd.Botkube/argocd.enabled=true \\ + --set 'rbac.groups.argocd.create'=true \\ + --set 'sources.argocd.Botkube/argocd.config.defaultSubscriptions.applications\[0\].name'=guestbook \\ + --set 'sources.argocd.Botkube/argocd.config.defaultSubscriptions.applications\[0\].namespace'=argocd \\ + --set communications.default-group.socketSlack.enabled=true \\ + --set communications.default-group.socketSlack.channels.default.name=${SLACK\_CHANNEL\_NAME} \\ + --set communications.default-group.socketSlack.appToken=${SLACK\_API\_APP\_TOKEN} \\ + --set communications.default-group.socketSlack.botToken=${SLACK\_API\_BOT\_TOKEN} + +‍ + +‍ + +Of course, the Botkube engineering team uses Botkube in both staging and prod. + +We have a dedicated channel for Botkube notifications in our Slack workspace and we have configured the Botkube ArgoCD plugin to send notifications to this channel as well. + +![Image 4: Showing Kubernetes Cluster created and deleted in Slack with Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/653a68dff56c4c123324282e_L72F7n2Dmu8c1Ua4Zpyw7FLyLF4LTUh7AjQ8cKUg5u8TguoHXxfwbYBJYMtZjMXCm6PXk3xyEj-dwF83OsRdwoA-RXiMUHSnIQppKb6WnZSim6V8x5_1vp94dlRVuFj7L_fFlwG7Ir_VYrORpIZkzmA.png) ‍ @@ -72,7 +87,7 @@ Botkube install --version v1.5.0 \\ First lesson after enabling the plugin was that setting up ArgoCD notifications, in this case for Slack, was really easy. We just had to point Botkube at which ArgoCD Applications it should watch and the plugin took care of the rest. We didn't have to worry about creating new message templates or event triggers. Botkube took care of all of that for us. After a while of using the plugin, we were happy that the defaults we'd gone with were working well for us. We didn't need to change anything. -### Real Use Case: Horizontal Pod Autoscaler +### Real Use Case: Horizontal Pod Autoscaler  ‍ @@ -91,14 +106,12 @@ As we continue to improve the capabilities of the plugin, we have identified pot Your feedback, whether you've already used the plugin or are just considering trying it out, is valuable to us. We encourage you to share your insights and suggestions.The Botkube team welcomes [contributions](https://github.com/kubeshop/botkube) from all its users. Together, we can improve and expand the functionality of this tool for the benefit of the entire community. -Sign up now! ------------- +\## Sign up now! Get started with Botkube! Whether you’re a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the community of users who are already benefiting from the power of Botkube. -Feedback --------- +\## Feedback -We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Just email our Developer Advocate, Maria or use this calendly [link](https://calendly.com/maria-botkube) to sign up.You can also talk to us in the Botkube GitHub issues, connect with others and get help in the Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at blair@kubeshop.io. +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Just email our Developer Advocate, Maria or use this calendly\[ link \](https://calendly.com/maria-botkube)to sign up.You can also talk to us in the Botkube GitHub issues, connect with others and get help in the Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at blair@kubeshop.io. ‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__real-time-platform-engineer-advice-ai-assistant.md b/hack/assistant-setup/content/botkube.io__blog__real-time-platform-engineer-advice-ai-assistant.md index 602a46fa..0f552cda 100644 --- a/hack/assistant-setup/content/botkube.io__blog__real-time-platform-engineer-advice-ai-assistant.md +++ b/hack/assistant-setup/content/botkube.io__blog__real-time-platform-engineer-advice-ai-assistant.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/real-time-platform-engineer-advice-ai-assist Published Time: Mar 06, 2024 Markdown Content: -![Image 1: a woman with short hair smiling for the camera](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) Kelly Revenaugh @@ -17,10 +17,10 @@ Imagine having K8s experts available, providing help to your team 24/7. Get real ### Table of Contents -* [Designed for DevOps Teams with All Experience Levels](#designed-for-devops-teams-with-all-experience-levels) -* [Troubleshoot Kubernetes Errors in Seconds](#troubleshoot-kubernetes-errors-in-seconds) -* [Kubernetes Expertise Directly in Your Chat Platform](#kubernetes-expertise-directly-in-your-chat-platform) -* [Get Started with AIOps for Kubernetes](#get-started-with-aiops-for-kubernetes) +* [Designed for DevOps Teams with All Experience Levels](#designed-for-devops-teams-with-all-experience-levels-2) +* [Troubleshoot Kubernetes Errors in Seconds](#troubleshoot-kubernetes-errors-in-seconds-2) +* [Kubernetes Expertise Directly in Your Chat Platform](#kubernetes-expertise-directly-in-your-chat-platform-2) +* [Get Started with AIOps for Kubernetes](#get-started-with-aiops-for-kubernetes-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -30,63 +30,59 @@ Imagine having K8s experts available, providing help to your team 24/7. Get real We’re thrilled to announce our newest Botkube feature, AI Assistant! This game-changing capability makes it easier than ever for teams to identify, diagnose, and troubleshoot issues in any Kubernetes cluster. Powered by a Kubernetes-focused LLM, Botkube provides crucial visibility into Kubernetes events while empowering teams to manage these events through direct communication platforms like Slack or Microsoft Teams. -This integration goes beyond simplifying your [Kubernetes Observability](https://botkube.io/learn/kubernetes-observability-best-practices) workflow by making troubleshooting more efficient for both experienced and beginner users. +This integration goes beyond simplifying your \[Kubernetes Observability\](https://botkube.io/learn/kubernetes-observability-best-practices) workflow by making troubleshooting more efficient for both experienced and beginner users. ‍ -Designed for DevOps Teams with All Experience Levels ----------------------------------------------------- +\## Designed for DevOps Teams with All Experience Levels Whether your DevOps team is filled with seasoned K8s professionals or those that are getting started on their cloud journey, Botkube’s AI capabilities are designed to cater to the needs and skill level of every user, helping to make Kubernetes management easier for all. -For experienced teams, the AI Assistant helps simplify and centralize cluster performance optimizations. For users still getting the hang of K8s deployments, our easy-to-understand Kubernetes advice provides useful context and explanations to guide you through the otherwise complex world of Kubernetes. **_It's like having a Kubernetes expert by your side, ready to guide you through every step of troubleshooting and resolution._** +For experienced teams, the AI Assistant helps simplify and centralize cluster performance optimizations. For users still getting the hang of K8s deployments, our easy-to-understand Kubernetes advice provides useful context and explanations to guide you through the otherwise complex world of Kubernetes. \*\*\_It's like having a Kubernetes expert by your side, ready to guide you through every step of troubleshooting and resolution.\_\*\* By bridging the gap between novice and experienced users, Botkube ensures that teams, regardless of their size or individual members' experience levels, can effectively manage their Kubernetes environments. -### K8s Troubleshooting for Experienced Users +\### K8s Troubleshooting for Experienced Users **‍**Experienced K8s users benefit from having a unified interface that consolidates operational tasks. Execute advanced diagnostic commands, manage resources across multiple clusters, or set up custom alerts for specific events without leaving your chat interface. By leveraging Botkube to streamline workflows, focus is placed on optimization and scalability instead of repetitive checks and needless troubleshooting. With Botkube, seasoned DevOps professionals can: -* Quickly compare the resource utilization of pods across different namespaces’ +\- Quickly compare the resource utilization of pods across different namespaces’ -* Set up intelligent alerts to predict and notify potential issues based on trends in logs and metrics with ease +\- Set up intelligent alerts to predict and notify potential issues based on trends in logs and metrics with ease -* Manage other cluster needs all within their common chat system - -* and a whole lot more +\- Manage other cluster needs all within their common chat system +\- and a whole lot more Imagine having Kubernetes experts available to you, providing help within your team’s chat platform 24/7. Get real-time, data-driven insights about your Kubernetes clusters without ever leaving your chat window. -### K8s Troubleshooting for Beginners +\### K8s Troubleshooting for Beginners -For novices, navigating through Kubernetes' complexity is simplified through intuitive AI-driven suggestions and commands. New users can easily understand the state of their deployments, pods, and services by using plain language queries in the chat interface — bypassing the steep learning curve associated with Kubernetes' command-line tools. For instance, instead of memorizing and typing out complex **`kubectl`** commands, a new user can simply ask "__what is__ __the status of my Kubernetes clusters in the default namespace?__" and Botkube will provide the needed information in seconds without having to switch interfaces. +For novices, navigating through Kubernetes' complexity is simplified through intuitive AI-driven suggestions and commands. New users can easily understand the state of their deployments, pods, and services by using plain language queries in the chat interface — bypassing the steep learning curve associated with Kubernetes' command-line tools. For instance, instead of memorizing and typing out complex \*\*\`kubectl\`\*\* commands, a new user can simply ask  "_\*what is\*_ _\*the status of my Kubernetes clusters in the default namespace?\*_" and Botkube will provide the needed information in seconds without having to switch interfaces. -Troubleshoot Kubernetes Errors in Seconds ------------------------------------------ +\## Troubleshoot Kubernetes Errors in Seconds -![Image 2: a screenshot of a chat page with a purple background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ea186bc6cc4a02d07a8679_screens1hot.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ea186bc6cc4a02d07a8679_screens1hot.png) -‍ Integrating AI into Botkube revolutionizes the way users interact with Kubernetes environments, making the debugging and management of Kubernetes clusters more intuitive and efficient. +‍ +Integrating AI into Botkube revolutionizes the way users interact with Kubernetes environments, making the debugging and management of Kubernetes clusters more intuitive and efficient. -Through the 'AI Help' button, users can now execute commands like **`kubectl get pods`** to fetch logs or **`kubectl describe deployment`** for detailed insights into specific resources from Slack or Microsoft Teams. For example, suppose you encounter an error with a deployment. In this case, you can quickly gather logs for a pod in a failing state or retrieve configurations that might be causing issues, such as resource limits or image pull errors. +Through the 'AI Help' button, users can now execute commands like \*\*\`kubectl get pods\`\*\* to fetch logs or \*\*\`kubectl describe deployment\`\*\* for detailed insights into specific resources from Slack or Microsoft Teams. For example, suppose you encounter an error with a deployment. In this case, you can quickly gather logs for a pod in a failing state or retrieve configurations that might be causing issues, such as resource limits or image pull errors. In addition, Botkube's AI Assistant can intelligently suggest actions based on the context of the issue. For instance, if there's a Persistent Volume Claim (PVC) issue, you can fetch the status of the PVC and other related events, providing a holistic view helping to diagnose binding problems or storage class misconfigurations. Botkube also gathers information on network policies and ingress rules that might be affecting service connectivity, streamlining what traditionally would have involved multiple steps and commands into a seamless, single-click operation. Plain and simple: Botkube makes complex tasks more manageable by streamlining k8s troubleshooting tasks and providing valuable help and context to DevOps professionals of all knowledge levels. Botkube offers a centralized, easy-to-use interface for troubleshooting, that saves time and empowers users to manage Kubernetes environments more efficiently. -Kubernetes Expertise Directly in Your Chat Platform ---------------------------------------------------- +\## Kubernetes Expertise Directly in Your Chat Platform -Navigating the vast world of K8s error messages is, at times, daunting. We’ve all wondered “what does `PodCrashExitCode` __actually__ mean?” Now, you can leverage the power of Botkube to resolve issues. From general questions about Kubernetes to environment-specific questions like asking for help to identify pods in a default namespace, Botkube makes centralized troubleshooting a reality. +Navigating the vast world of K8s error messages is, at times, daunting. We’ve all wondered “what does \`PodCrashExitCode\` _\*actually\*_ mean?” Now, you can leverage the power of Botkube to resolve issues. From general questions about Kubernetes to environment-specific questions like asking for help to identify pods in a default namespace, Botkube makes centralized troubleshooting a reality. -Once Botkube is connected to your K8s environment, you can prompt questions or commands such as “__What apps are deployed in my cluster?__” or “__Show me the logs for all of my failing pods across all namespaces__” using the `@botkube ai` command. You can also utilize the`Ask AI` button attached to error notifications that are displayed by Botkube. +Once Botkube is connected to your K8s environment, you can prompt questions or commands such as “_\*What apps are deployed in my cluster?\*_” or “_\*Show me the logs for all of my failing pods across all namespaces\*_” using the \`@botkube ai\` command. You can also utilize the\`Ask AI\` button attached to error notifications that are displayed by Botkube. -Get Started with AIOps for Kubernetes -------------------------------------- +\## Get Started with AIOps for Kubernetes -Getting started with our AI Assistant is straightforward and easy. Available out-of-the-box with every Botkube Cloud instance, existing users who upgrade to the latest version will find integrating the AI Assistant into their workflow intuitive. **New users can [quickly set up Botkube](http://app.botkube.io/) and start benefiting from AI-driven Kubernetes management in minutes.** +Getting started with our AI Assistant is straightforward and easy. Available out-of-the-box with every Botkube Cloud instance, existing users who upgrade to the latest version will find integrating the AI Assistant into their workflow intuitive. \*\*New users can \[quickly set up Botkube\](http://app.botkube.io) and start benefiting from AI-driven Kubernetes management in minutes.\*\* -If you are using the OSS version of Botkube, check out [our migration tutorial](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to move your set up to Botkube Cloud in minutes and start taking advantage of all the latest features. +If you are using the OSS version of Botkube, check out \[our migration tutorial\](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to move your set up to Botkube Cloud in minutes and start taking advantage of all the latest features. Botkube’s AI Assistant is more than a feature — it’s the Platform Engineer you wish you had by your side 24/7. diff --git a/hack/assistant-setup/content/botkube.io__blog__revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube.md b/hack/assistant-setup/content/botkube.io__blog__revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube.md index 7b7a338b..b1f66d84 100644 --- a/hack/assistant-setup/content/botkube.io__blog__revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube.md +++ b/hack/assistant-setup/content/botkube.io__blog__revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/revolutionize-your-kubernetes-troubleshootin Published Time: Nov 29, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -51,7 +51,7 @@ Botkube's integration with Microsoft Teams provides users with direct access to ‍ -![Image 3: a screenshot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6567879667dde77a83a5861b_p-Naa0ZdnovPq_SSVldIS1NhIah6tTIxeofzBX1tOEUJL7dmMubUhdobLqieWsTnIDdatibAbRqNC7dkwN_xYIje3QqjqgDWHO49bMbAkwBIyCtTM2h5gAbhBVBh1OJavuANnxvvOxS4Z5l_OLumnzI.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6567879667dde77a83a5861b_p-Naa0ZdnovPq_SSVldIS1NhIah6tTIxeofzBX1tOEUJL7dmMubUhdobLqieWsTnIDdatibAbRqNC7dkwN_xYIje3QqjqgDWHO49bMbAkwBIyCtTM2h5gAbhBVBh1OJavuANnxvvOxS4Z5l_OLumnzI.png) ### Improving Reliability @@ -63,7 +63,7 @@ Botkube's integration with Microsoft Teams streamlines the collaborative process ‍ -![Image 4: a screenshot of a page with a message and a button](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678794b1beb119ed7c14c8_t7Oj6aNKqMZhSXW1SgyrrWxobf3im5J0ypr0E0_DuJfBxrGmbemFqH02ZCBWIhQiDoPKnmR_UR5VeMNUrf4Fgcn89JSWMLkWZgBBDvR7_iEZ-_UDxC0gvdTlFWpJgeH4Z2ffYMywev5vyMhP3xIkMPg.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678794b1beb119ed7c14c8_t7Oj6aNKqMZhSXW1SgyrrWxobf3im5J0ypr0E0_DuJfBxrGmbemFqH02ZCBWIhQiDoPKnmR_UR5VeMNUrf4Fgcn89JSWMLkWZgBBDvR7_iEZ-_UDxC0gvdTlFWpJgeH4Z2ffYMywev5vyMhP3xIkMPg.png) Getting Started with Botkube’s Microsoft Teams ---------------------------------------------- diff --git a/hack/assistant-setup/content/botkube.io__blog__scaling-new-heights-taking-botkube-to-scale-20x.md b/hack/assistant-setup/content/botkube.io__blog__scaling-new-heights-taking-botkube-to-scale-20x.md index 28fcdb29..46774d37 100644 --- a/hack/assistant-setup/content/botkube.io__blog__scaling-new-heights-taking-botkube-to-scale-20x.md +++ b/hack/assistant-setup/content/botkube.io__blog__scaling-new-heights-taking-botkube-to-scale-20x.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/scaling-new-heights-taking-botkube-to-scale- Published Time: Mar 21, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby diff --git a/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-security-troubleshooting-with-ai.md b/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-security-troubleshooting-with-ai.md new file mode 100644 index 00000000..a31fe4e9 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-security-troubleshooting-with-ai.md @@ -0,0 +1,129 @@ +Title: Simplify Kubernetes Security Troubleshooting with AI + +URL Source: https://botkube.io/blog/simplify-kubernetes-security-troubleshooting-with-ai + +Published Time: May 08, 2024 + +Markdown Content: +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/663ad9425dee853429acf422_T01TRG6U4AV-U06CH7HDJTS-34c4e3601ac1-512.jpg) + +Vaidas Jablonskis + +Software Engineer + +Botkube + +Learn how Botkube can streamline troubleshooting and help overcome common Kubernetes PSA-related issues + +### Table of Contents + +* [What is Kubernetes Pod Security Admission (PSA)?](#what-is-kubernetes-pod-security-admission-psa--2) +* [Common Challenges with Pod Security Policies](#common-challenges-with-pod-security-policies-2) +* [Getting Started with Kubernetes PSA Troubleshooting Example](#getting-started-with-kubernetes-psa-troubleshooting-example-2) +* [Enforce Pod Security Standards with Namespace Labels](#enforce-pod-security-standards-with-namespace-labels-2) +* [Summary](#summary-2) +* [Try Out Botkube for Kubernetes Security Best Practices Today](#try-out-botkube-for-kubernetes-security-best-practices-today-2) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Start Using Botkube AI Assistant Today! + +Kubernetes is a powerful container orchestration platform, but its complexity can leave even seasoned developers scratching their heads. One particularly tricky area is \[Pod Security Admission (PSA)\](https://kubernetes.io/docs/concepts/security/pod-security-admission/). While PSA plays a crucial role in cluster security, it can also be the source of unexpected deployment failures. That's where the AI-powered Botkube Assistant, specifically designed for Kubernetes, comes to the rescue. Botkube understands the complexities of your cluster and guides you towards solutions in clear, simple language. + +In this blog post, we'll demonstrate how Botkube can streamline troubleshooting and help you overcome common PSA-related issues. + +\## What is Kubernetes Pod Security Admission (PSA)? + +\- The Pod Security Admission Controller (PSA) acts as a gatekeeper within your Kubernetes cluster. It evaluates Pod specifications against predefined security policies to ensure your applications adhere to security best practices. Think of PSA as your cluster's security guard, making sure that potentially risky deployments are blocked before they can cause problems. + +\## Common Challenges with Pod Security Policies + +\- **\*\*Privileged Containers\*\***: Some applications may demand privileged access, but this can expose your cluster to vulnerabilities. Pod Security Admission Controller can enforce strict policies to prevent privileged containers unless absolutely necessary. + +\- \*\*Host Network/Ports\*\*: Allowing pods direct access to your host network or specific privileged ports increases attack vectors. PSA can restrict this access. + +\- \*\*Root User:\*\* Running containers as the root user is a major security risk. PSA can block or warn about pods attempting to run as root. + +\- \*\*Volume Mounts\*\*: PSA can be used to prevent your containers from accessing sensitive directories on your host system for enhanced protection. + +\- \*\*Capabilities\*\*: Linux capabilities give containers a wide range of permissions. PSA can help you enforce a 'least privilege' model by dropping unnecessary capabilities and minimizing risks. + +\## Getting Started with Kubernetes PSA Troubleshooting Example + +Deploying applications in Kubernetes can sometimes lead to unexpected hiccups when the Pod Security Admission (PSA) controller steps in. Understanding why your Pod fails to launch and how to quickly resolve these security-related errors is crucial for smooth operations. In this tutorial, we'll walk you through a real-world scenario of a deployment blocked by PSA.  We'll demonstrate how Botkube’s AI assistant can help you: + +\- Pinpoint the exact reasons behind the deployment failure. + +\- Understand the relevant k8s security concepts. + +\- Guide you through fixing the issues step-by-step. + +Let's get started! + +\### Prerequisites + +\- Kubernetes Cluster with PSA: Consult your provider's documentation on enabling the Pod Security Admission Controller. + +\- \[Botkube Instance\](http://app.botkube.io/): Follow the installation guide in the \[Botkube documentation\](https://docs.botkube.io/examples-and-tutorials/getstarted). + +\### A Note on Environments + +To fully explore the examples in this tutorial, you'll need a few things in place: + +\- \*\*Kubernetes Cluster with PSA:\*\* You'll need a Kubernetes cluster where the Pod Security Admission (PSA) controller is active. If you're using a managed Kubernetes service (like GKE, EKS, or AKS), PSA is likely enabled by default. For self-managed clusters, consult your setup documentation for instructions on enabling PSA. + +If you're new to Kubernetes or want to experiment without setting up a full production cluster, you can leverage a local Kubernetes environment. The official Kubernetes documentation provides a great tutorial specifically focused on deploying a local cluster with Pod Security Standards enabled: \[https://kubernetes.io/docs/concepts/security/pod-security-standards/\](https://kubernetes.io/docs/concepts/security/pod-security-standards/). This guide walks you through setting up Kind, a popular local Kubernetes tool. + +\- \*\*Botkube Installation\*\*: You'll want to have \[Botkube installed and connected to your Kubernetes cluster\](https://docs.botkube.io/examples-and-tutorials/getstarted). Botkube provides clear installation guides for different environments. Refer to the installation documentation for the process that best suits your setup. + +_\*Note: While exploring Botkube with a local cluster is a great way to learn, keep in mind that real-world production deployments might require additional considerations.\*_ + +\## Enforce Pod Security Standards with Namespace Labels + +\- Create a Namespace Manifest: Define your namespace and include the desired Pod Security Admission (PSA) labels. Here's the annotated version: + +
---
apiVersion: v1
kind: Namespace
metadata:
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restricted
name: psa
+ +\- Apply the Manifest: Use kubectl to create the namespace: + +`kubectl apply -f namespace.yaml` + +Key points: + +\- Enforcement: Pods deployed in this namespace must meet the 'restricted' requirements. Violations will block pod creation. + +\- Audit and Warning: The 'restricted' profile is used for logging purposes, giving you insights into potential issues. + +Now, you’ll see that we have a very simple deployment below. It’s a shell one-liner which runs in a loop and prints data every 10 seconds. We'll deploy our simple 'sleeper' service, which is intentionally designed with potential security flaws. This will allow us to see how the Pod Security Admission controller reacts and how Botkube helps us fix it. + +`kubectl -n psa apply -f deployment.yaml` + +
---
# https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
apiVersion: apps/v1
kind: Deployment
metadata:
name: sleeper
namespace: psa
labels:
app: sleeper
spec:
selector:
matchLabels:
app: sleeper
replicas: 1
template:
metadata:
labels:
app: sleeper
spec:
containers:
- name: sleeper
image: alpine:latest
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- |
while true; do date; sleep 10; done
volumeMounts:
- name: localtime
mountPath: /etc/localtime
volumes:
- name: localtime
hostPath:
path: /usr/share/zoneinfo/Asia/Tokyo
restartPolicy: Always
+ +‍ + +1\. Our deployment failed! The error messages may not be immediately clear, especially if we're not very familiar with Pod Security Admission policies. + +Let's call in our expert assistant, Botkube. We'll ask Botkube to analyze the error output and provide guidance on resolving the issues. + +2\. Now that the assistant suggested how we could fix the issue, let’s apply the changes. + +3\. Argh, we've fixed one thing, but another issue has cropped up! This is common in troubleshooting scenarios, especially with complex systems like Kubernetes. + +Not to worry, Botkube is still here to help! We'll provide the new error messages to Botkube and get further recommendations. + +4\. We'll carefully follow Botkube's instructions to modify the sleeper deployment configuration. This will include adding the missing runAsUser property. + +5\. We've made the necessary changes, and our deployment succeeds! Our 'sleeper' service is now running in compliance with our cluster's security policies. + +6\. Troubleshooting can be tedious, but Botkube made the process much smoother. Its ability to explain the underlying problems and guide us towards solutions saved us valuable time. + +\## Summary + +The beauty of using an AI assistant like Botkube lies in its ability to streamline troubleshooting through an iterative, conversational process. Instead of poring over complex error messages or Kubernetes documentation, you can engage with Botkube as if you were explaining the problem to a knowledgeable colleague. With each interaction, it pinpoints potential issues, suggests solutions, and helps you verify those fixes. This not only saves you valuable time but also presents a fantastic opportunity to learn about Kubernetes security principles along the way. By seeing how each change addresses specific Pod Security Admission violations, you gain a deeper understanding of how to build secure and compliant deployments from the ground up. + +\## Try Out Botkube for Kubernetes Security Best Practices Today + +Ready to streamline your Kubernetes security practices? \[Sign up for Botkube today\](http://app.botkube.io/)—it's free to get started and can quickly empower your team to proactively monitor, manage, and secure your cluster all within your chat platform like Slack or Microsoft Teams. Join the growing community of users who simplify Kubernetes management easily with just a few clicks. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.md b/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.md index aa1d4e21..14763bdf 100644 --- a/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.md +++ b/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/simplify-kubernetes-with-botkubes-ai-develop Published Time: Apr 04, 2024 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -37,7 +37,7 @@ Kubernetes, while incredibly useful, presents developers with significant challe ‍**Solution: Botkube Empowers Developers with Self-Service and Collaboration** ------------------------------------------------------------------------------ -![Image 2: a screenshot of a chat window on a computer screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) Botkube revolutionizes the developer experience by seamlessly integrating Kubernetes management into communication platforms like [Slack and Microsoft Teams](https://botkube.io/integrations).We understand how frustrating it can be for DevOps teams dealing with these challenges. Here's how it empowers developers: @@ -56,7 +56,7 @@ By connecting Kubernetes to your team's communication channels, Botkube fosters **How Botkube Simplifies Kubernetes for Developers** ---------------------------------------------------- -![Image 3: a screenshot of a twitter page showing a message](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) #### Natural Language Interaction @@ -82,7 +82,7 @@ Botkube's AI assistant integrates within team communication platforms, deliverin **Conclusion: Transform Your Kubernetes Workflow with Botkube** --------------------------------------------------------------- -![Image 4: a screen shot of a conversation between two people](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) [Botkube's AI Assistant](https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant) signifies a step forward in Kubernetes management, introducing AI-enhanced troubleshooting and operational efficiency to the developer's toolkit. By simplifying Kubernetes operations, Botkube enables developers to self-serve and access data more easily, reducing the workload on Ops teams and making the platform more user-friendly and dependable.Integrating Botkube into your team’s workflow is the first step toward unlocking a more efficient, AI-driven Kubernetes ecosystem, elevating the developer experience to new heights. diff --git a/hack/assistant-setup/content/botkube.io__blog__step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting.md b/hack/assistant-setup/content/botkube.io__blog__step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting.md index e71f158d..ce91176e 100644 --- a/hack/assistant-setup/content/botkube.io__blog__step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting.md +++ b/hack/assistant-setup/content/botkube.io__blog__step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cl Published Time: Jul 06, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,105 +17,96 @@ This step-by-step tutorial gets you started with Botkube Cloud Slack App, which ### Table of Contents -* [Creating Botkube Cloud Account](#creating-botkube-cloud-account) -* [Connecting Kubernetes Cluster to Slack](#connecting-kubernetes-cluster-to-slack) -* [Conclusion](#conclusion) -* [Sign up now](#sign-up-now) +* [Creating Botkube Cloud Account](#creating-botkube-cloud-account-2) +* [Connecting Kubernetes Cluster to Slack](#connecting-kubernetes-cluster-to-slack-2) +* [Conclusion](#conclusion-2) +* [Sign up now](#sign-up-now-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! ![Image 2: Diagram of how Botkube connects K8s Clusters to Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709cc5761791c793a83cb_FXqJSS9KtaIOKugq8s7dLxGlnmtLjrwb6L7gurT9lYJdDRz12RFZoLngWUxSDtvrMKpEnhFCEKOroy2rvA9MJiSEZV4DUJwBa58Vl2JiUXfXJ6b3RrHK-sXsLbaqGbijRlnbXXLmuqKB6ckrNR36yFE.png) -‍ Botkube is a powerful tool designed to streamline incident and event response in Kubernetes environments. With its [Cloud](https://app.botkube.io/) [Slack integration](https://botkube.io/integration/slack), Botkube enables collaborative troubleshooting by seamlessly integrating with your organization's Slack workspace. In this tutorial, we will walk you through the step-by-step process of setting up and utilizing Botkube's new Cloud Slack feature, empowering your team to effectively create a kubernetes connection to slack and manage multiple Kubernetes clusters to improve incident resolution time +‍ +Botkube is a powerful tool designed to streamline incident and event response in Kubernetes environments. With its \[Cloud\](https://app.botkube.io/) \[Slack integration\](https://botkube.io/integration/slack), Botkube enables collaborative troubleshooting by seamlessly integrating with your organization's Slack workspace. In this tutorial, we will walk you through the step-by-step process of setting up and utilizing Botkube's new Cloud Slack feature, empowering your team to effectively create a kubernetes connection to slack and manage multiple Kubernetes clusters to improve incident resolution time This blog post assumes that we're starting a completely new Botkube installation, but will show the quickest way to get Kubernetes alerts into Slack. Requirements: -* A Slack workspace where you have permission to install apps and create channels -* A Kubernetes cluster where you have access to install Botkube -* Working kubectl and helm installation -* A [Botkube Cloud](https://app.botkube.io/) account +\* A Slack workspace where you have permission to install apps and create channels +\* A Kubernetes cluster where you have access to install Botkube +\* Working kubectl and helm installation +\* A \[Botkube Cloud\](https://app.botkube.io/) account -Here's a video walkthrough of the installation: ‍ +Here's a video walkthrough of the installation: +‍ + -Creating Botkube Cloud Account ------------------------------- +\## Creating Botkube Cloud Account -1. On the Botkube [homepage](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. -2. Fill in the required information in the registration form. You can sign up with your email address or Github account. - -Connecting Kubernetes Cluster to Slack --------------------------------------- - -3. Select either the Wizard or the Block builder method to initiate the setup process for Botkube's Cloud Slack integration. +1\. On the Botkube \[homepage\](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. +2\. Fill in the required information in the registration form. You can sign up with your email address or Github account. +\## Connecting Kubernetes Cluster to Slack +3\. Select either the Wizard or the Block builder method to initiate the setup process for Botkube's Cloud Slack integration. ![Image 3: Easy one click Kubernetes deployment for cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709dfd8e90bc79339fcd0_cQKP0DfzGkbQO4R8kCAnqr54pgSa_IKaPa756N-FFua5n9N1omSH9fg9nGI1JYNjRS6ZmkbNUYrZLK1Z2BmTjPVHBDP0U9jNpidqq7RIqKWJScUJ32pOPryOAp49HR6OoerKN7yJSu6yHr2DU1GDaoo.png) -‍ - -4. Next, enter your instance display name. +‍ +4\. Next, enter your instance display name. ![Image 4: K8s cluster building GUI](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709efd8e90bc7933a1393_nAeC7-04jk70WellyEP2GM4m75jP4jrLhnmbjAkZr3rLlNi7zaD2bMLx8rvebpfqFIrvB8OSIxIqKezCZngk7ooCH6WAOT_1PBSQKz-sAAl9WRSq-GqtR1gmHmwC87Oq443Bzdu_sMKsHw-_g8Jwrfo.png) -5. Select the Official Botkube Slack option. (Note this option requires you to sign up for a 30 day free trial) +5\. Select the Official Botkube Slack option. (Note this option requires you to sign up for a 30 day free trial) ![Image 5: Official Slack Kubernetes bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709ffd8e90bc7933a2249_3GYyjQn-Uklnp1Bn8T7YmSOdKEaFnl3idDQcYJiD1mx7xeBbr6yvoRgbLI3Fir7TaW4a1N8l4tgB_Zbt6b3XryqzyYff4z1I_nffpWkoS6Hx7yPmmTrk2Z9tnAlXWUoM_VrAm0iBje2a8oaIiaGxRx0.png) -‍ - -6. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. -7. Select the workspace within Slack where you want to utilize Botkube. You will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. +‍ +6\. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. +7\. Select the workspace within Slack where you want to utilize Botkube. You will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. ![Image 6: Multicluster setup screen for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a0bae43806c67551203_v-0W_ZDNIBT2Z7lbvKemYUyidm6L4ftXfEXxY9t0i5d6NB3_A_wrkVIluEVKfh8ZCCSYan2mS8PfS0YXm8DmViUyII5FXmmaLUPy6deAhqmYypJr0mZCg8aOo1FckVZaX3LOlTK6Epso_FqKUAde3Qw.png) -‍ - -8. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. +‍ +8\. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. ![Image 7: One click slack sign in](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a1d00209556840fc2aa_qCmpnXKLE-S-5GKx1PijNsYeJOqKsWffvD0NIp708myAL6SynM44bx0khhpKpQCX-LnUoIQ2t5JAbqjdOfxrQSxIJPZWLRKYrX0O1lKJJQQj0hmkIM_5ADswoPXLaRPrMmLwAtVCSAsGEbySEsGW0WY.png) ‍ -9. Select the Plugins you would like to use. Helm, kubectl, and kubernetes source are the botkube default plug-ins. +9\. Select the Plugins you would like to use. Helm, kubectl, and kubernetes source are the botkube default plug-ins. ![Image 8: Add plugins to your Kubernetes Cluster quickly with Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a29a107604e69f10a44_EqV_jhVu5WsrFY2awVlpBZ5UGrulD-EtQrKoYnYoyZP-7TuapKozeQFXiLnQB3g0sUT8YdFZX_yYBgeaJUHhuXpYq3fUuaV9SyJgI0MAwYeJM3to-VfmwRuNyLOkBupW9r32e61df73T4HIa50KMVlc.png) ‍ -10. Click the create button -11. Copy and paste the helm commands into your terminal and then click next - -![Image 9: Helm command to copy into command prompt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a33b3210007e280a92a_kqmlF1iCEr1KDQYsMNCGC83a_ZPx0agVAUb6crdZHQOONeg4BlQbwXSWferYj26OZkxyG2cRZ7jtLoDQtbUdEQ9eriQ-KmQmeBcLGxc7QQTtraL3VOAUQW0rNCWGNjJj5HBdzIv8lbk6HgjLwIJwTNM.png) +10\. Click the create button +11\. Copy and paste the helm commands into your terminal and then click next -‍ +![Image 9: Helm command to copy into command prompt ](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a33b3210007e280a92a_kqmlF1iCEr1KDQYsMNCGC83a_ZPx0agVAUb6crdZHQOONeg4BlQbwXSWferYj26OZkxyG2cRZ7jtLoDQtbUdEQ9eriQ-KmQmeBcLGxc7QQTtraL3VOAUQW0rNCWGNjJj5HBdzIv8lbk6HgjLwIJwTNM.png) -12. You should see your Botkube instance being created. +‍ +12\. You should see your Botkube instance being created. ![Image 10: Slack Kubernetes integration setup complete](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a3e978de29171f3a547_pjoT_YHQoMpAqVlVcPpsEl0oupPk1cJLMMLXHbehvipxrb0tni3hVtXkLE52YZMypptKk1Uozszf0pPUCN_SpzzP4W49mZy7NwJfLYWEGMBpwjHwIvIvD--mO22yCj9kV3wE4T8jIA532dDf2oUzVY0.png) ‍ -### Let’s see it in action +\### Let’s see it in action ![Image 11: ChatOps for Kubernetes in Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a5bb3210007e280d3f8_Untitled%20design.gif) -The new Botkube Cloud Slack app adds some great features that weren't previously available, particularly around multi-cluster management. With new **@botkube cloud** commands you can easily navigate between instances. By using **"@botkube cloud list instances**," you can conveniently view your connected deployments. You can also establish a default instance for a specific workspace and easily switch between them using our slack interactivity feature. Increase your team’s efficiency with the ability to run commands across all your connected clusters by simply adding " **\--all-clusters.**" This feature saves you valuable time and lets you manage all your resources with a single command. - -Conclusion ----------- - -Botkube's [Cloud Slack integration](https://botkube.io/integration/slack) offers a range of key features and functionalities. From seamless [incident response](https://docs.botkube.io/usage/automated-actions) to enhanced [resource monitoring](https://docs.botkube.io/usage/source/prometheus/), Botkube empowers teams to troubleshoot and manage Kubernetes clusters effectively. Utilizing Botkube's Cloud Slack feature is crucial for teams seeking to optimize Kubernetes workflows and streamline troubleshooting processes. By leveraging Botkube, teams can improve incident resolution time, collaborate efficiently, and enhance overall operational efficiency in Kubernetes environments. - -‍ Integrate Botkube's Cloud with Slack to enhance your Kubernetes operations and improve incident response and collaboration. By utilizing Botkube's powerful features, you can streamline troubleshooting processes and achieve quicker resolutions for any Kubernetes-related issues. +The new Botkube Cloud Slack app adds some great features that weren't previously available, particularly around multi-cluster management. With new \*\*@botkube cloud\*\* commands you can easily navigate between instances.  By using \*\*"@botkube cloud list instances\*\*," you can conveniently view your connected deployments. You can also establish a default instance for a specific workspace and easily switch between them using our slack interactivity feature. Increase your team’s efficiency with the ability to run commands across all your connected clusters by simply adding " \*\*--all-clusters.\*\*" This feature saves you valuable time and lets you manage all your resources with a single command. +\## Conclusion -Sign up now ------------ +Botkube's \[Cloud Slack integration\](https://botkube.io/integration/slack) offers a range of key features and functionalities. From seamless\[ incident response\](https://docs.botkube.io/usage/automated-actions) to enhanced \[resource monitoring\](https://docs.botkube.io/usage/source/prometheus/), Botkube empowers teams to troubleshoot and manage Kubernetes clusters effectively. Utilizing Botkube's Cloud Slack feature is crucial for teams seeking to optimize Kubernetes workflows and streamline troubleshooting processes. By leveraging Botkube, teams can improve incident resolution time, collaborate efficiently, and enhance overall operational efficiency in Kubernetes environments. -Get started with [Botkube](https://app.botkube.io/)! Whether you're a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the community of users who are already benefiting from the power of Botkube. +‍ +Integrate Botkube's Cloud with Slack to enhance your Kubernetes operations and improve incident response and collaboration. By utilizing Botkube's powerful features, you can streamline troubleshooting processes and achieve quicker resolutions for any Kubernetes-related issues. +\## Sign up now -### Feedback +Get started with \[Botkube\](https://app.botkube.io/)! Whether you're a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the community of users who are already benefiting from the power of Botkube. +\### Feedback We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Just email maria@kubeshop.io or use this calendly link to sign up. -You can also talk to us in the Botkube GitHub [issues](https://github.com/kubeshop/botkube/issues), connect with others and get help in the Botkube Slack community, or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). +You can also talk to us in the Botkube GitHub \[issues\](https://github.com/kubeshop/botkube/issues), connect with others and get help in the Botkube Slack community, or email our Product Leader at \[blair@kubeshop.io\](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__streamlining-gitops-with-the-botkube-flux-plugin.md b/hack/assistant-setup/content/botkube.io__blog__streamlining-gitops-with-the-botkube-flux-plugin.md index cd8e2ead..9596a10d 100644 --- a/hack/assistant-setup/content/botkube.io__blog__streamlining-gitops-with-the-botkube-flux-plugin.md +++ b/hack/assistant-setup/content/botkube.io__blog__streamlining-gitops-with-the-botkube-flux-plugin.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/streamlining-gitops-with-the-botkube-flux-pl Published Time: Sep 01, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,197 +17,187 @@ Learn how to set up Botkube with Flux and GitHub-events plugins in this step-by- ### Table of Contents -* [Prerequisites](#prerequisites) -* [Using the Flux Plugin in Action](#using-the-flux-plugin-in-action) -* [Conclusion](#conclusion) -* [Sign up now!](#sign-up-now-) -* [Feedback](#feedback) +* [Prerequisites](#prerequisites-2) +* [Using the Flux Plugin in Action](#using-the-flux-plugin-in-action-2) +* [Conclusion](#conclusion-2) +* [Sign up now!](#sign-up-now--2) +* [Feedback](#feedback-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! #### Get started with Botkube Cloud -In today's fast-paced world of Kubernetes management, embracing GitOps is a crucial step towards efficient collaboration and automation. However, it comes with its own set of challenges. Enter [Botkube](https://botkube.io/), a Kubernetes collaborative troubleshooting tool for Kubernetes that seamlessly integrates with popular collaboration platforms like [Slack, Microsoft Teams, Discord, and Mattermost](https://botkube.io/integrations). Botkube not only simplifies alert management but also optimizes GitOps workflows by enhancing automation, real-time collaboration and centralizing knowledge. Learn more about Botkube’s move towards [GitOps](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) and the new Flux Plugin in our [release announcemen](https://botkube.io/blog/introducing-botkubes-integration-with-flux)t. In this tutorial, we will explore the Botkube Flux plugin, a powerful tool that automates notifications, enhances GitOps practices, and simplifies the interaction between Kubernetes clusters and GitHub repositories. By the end of this tutorial, you'll have a solid understanding of how to create, configure, and leverage the Botkube Flux plugin to streamline your GitOps workflow. +In today's fast-paced world of Kubernetes management, embracing GitOps is a crucial step towards efficient collaboration and automation. However, it comes with its own set of challenges. Enter \[Botkube\](https://botkube.io/), a Kubernetes collaborative troubleshooting tool for Kubernetes that seamlessly integrates with popular collaboration platforms like \[Slack, Microsoft Teams, Discord, and Mattermost\](https://botkube.io/integrations). Botkube not only simplifies alert management but also optimizes GitOps workflows by enhancing automation, real-time collaboration and centralizing knowledge.  Learn more about Botkube’s move towards \[GitOps\](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) and the new Flux Plugin in our \[release announcemen\](https://botkube.io/blog/introducing-botkubes-integration-with-flux)t. In this tutorial, we will explore the Botkube Flux plugin, a powerful tool that automates notifications, enhances GitOps practices, and simplifies the interaction between Kubernetes clusters and GitHub repositories. By the end of this tutorial, you'll have a solid understanding of how to create, configure, and leverage the Botkube Flux plugin to streamline your GitOps workflow. -Prerequisites -------------- +\## Prerequisites Before we dive into the tutorial, make sure you have the following prerequisites ready: -* A GitHub account with access to tokens -* Basic familiarity with Kubernetes and its components. -* Access to a Kubernetes cluster with helm installed -* Access to Slack workspace -* A Botkube Cloud Account +\* A GitHub account with access to tokens +\* Basic familiarity with Kubernetes and its components. +\* Access to a Kubernetes cluster with helm installed +\* Access to Slack workspace +\* A Botkube Cloud Account -‍ - -### Creating Botkube Cloud Account +‍ +\### Creating Botkube Cloud Account -1. On the Botkube [homepage](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. -2. Fill in the required information in the registration form. You can sign up with your email address or Github account. +1\. On the Botkube \[homepage\](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. +2\. Fill in the required information in the registration form. You can sign up with your email address or Github account. -* Click [here](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) for a more indepth Botkube installation tutorial +\* Click \[here\](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) for a more indepth Botkube installation tutorial ![Image 2: Easy one click Kubernetes deployment for cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709dfd8e90bc79339fcd0_cQKP0DfzGkbQO4R8kCAnqr54pgSa_IKaPa756N-FFua5n9N1omSH9fg9nGI1JYNjRS6ZmkbNUYrZLK1Z2BmTjPVHBDP0U9jNpidqq7RIqKWJScUJ32pOPryOAp49HR6OoerKN7yJSu6yHr2DU1GDaoo.png) -### Connecting Kubernetes Cluster to Slack +\### Connecting Kubernetes Cluster to Slack Select either the Wizard or the Block builder method to initiate the setup process for Botkube's Cloud Slack integration. -1. Next, enter your instance display name. +1\. Next, enter your instance display name. ![Image 3: K8s cluster building GUI](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709efd8e90bc7933a1393_nAeC7-04jk70WellyEP2GM4m75jP4jrLhnmbjAkZr3rLlNi7zaD2bMLx8rvebpfqFIrvB8OSIxIqKezCZngk7ooCH6WAOT_1PBSQKz-sAAl9WRSq-GqtR1gmHmwC87Oq443Bzdu_sMKsHw-_g8Jwrfo.png) -2. Select the Official Botkube Slack option. (Note this option requires you to sign up for a 30 day free trial) +2\. Select the Official Botkube Slack option. (Note this option requires you to sign up for a 30 day free trial) ![Image 4: Official Slack Kubernetes bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709ffd8e90bc7933a2249_3GYyjQn-Uklnp1Bn8T7YmSOdKEaFnl3idDQcYJiD1mx7xeBbr6yvoRgbLI3Fir7TaW4a1N8l4tgB_Zbt6b3XryqzyYff4z1I_nffpWkoS6Hx7yPmmTrk2Z9tnAlXWUoM_VrAm0iBje2a8oaIiaGxRx0.png) -3. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. -4. Select the workspace within Slack where you want to utilize Botkube. You will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. +3\. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. +4\. Select the workspace within Slack where you want to utilize Botkube. You will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. ![Image 5: Multicluster setup screen for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a0bae43806c67551203_v-0W_ZDNIBT2Z7lbvKemYUyidm6L4ftXfEXxY9t0i5d6NB3_A_wrkVIluEVKfh8ZCCSYan2mS8PfS0YXm8DmViUyII5FXmmaLUPy6deAhqmYypJr0mZCg8aOo1FckVZaX3LOlTK6Epso_FqKUAde3Qw.png) ‍ -5. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. +5\. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. ![Image 6: One click slack sign in](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a1d00209556840fc2aa_qCmpnXKLE-S-5GKx1PijNsYeJOqKsWffvD0NIp708myAL6SynM44bx0khhpKpQCX-LnUoIQ2t5JAbqjdOfxrQSxIJPZWLRKYrX0O1lKJJQQj0hmkIM_5ADswoPXLaRPrMmLwAtVCSAsGEbySEsGW0WY.png) ‍ -6. Select the Plugins you would like to use. +6\. Select the Plugins you would like to use. -### Enabling the Plugin +\### Enabling the Plugin -![Image 7: a screenshot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f219c6901138bd3fb3ecbb__JgXw9_EzpdpHItfymUJr5owqit0mMnoORy7I1PApaua66YV3GKd00wMc4TYYSpNpW-uhYDgGc0FHywymRF2Zf4tGny-TIORkO8LdDfmwTFyuOX5gDR4-najpP4gOHJs7XZ0TgmsOm_kCGFu08ZuRWw.png) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f219c6901138bd3fb3ecbb__JgXw9_EzpdpHItfymUJr5owqit0mMnoORy7I1PApaua66YV3GKd00wMc4TYYSpNpW-uhYDgGc0FHywymRF2Zf4tGny-TIORkO8LdDfmwTFyuOX5gDR4-najpP4gOHJs7XZ0TgmsOm_kCGFu08ZuRWw.png) ‍ -1. Select the Flux and GitHub-events Plugin +1\. Select the Flux and GitHub-events Plugin -* Begin by selecting the Flux and GitHub-events plugins within your Botkube setup. -2. Insert Your GitHub Access Token +\* Begin by selecting the Flux and GitHub-events plugins within your Botkube setup. -* To do this, navigate to your GitHub developer settings. +2\. Insert Your GitHub Access Token -* Locate your GitHub access token and copy it. +\* To do this, navigate to your GitHub developer settings. +\* Locate your GitHub access token and copy it. -* Insert the copied access token into the appropriate field within the Flux plugin settings. +\* Insert the copied access token into the appropriate field within the Flux plugin settings. -![Image 8: a screen showing the settings for a github channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f218c651c3be1367d23eb4_RxmxZInIIFLvZUTkgh63JlGBKnJlN1oGd5RW1NGQ6dM0ZPgnXaTXJ48wRFBDJWzUvNlIo5H9PuOEBMbB_rCh15bW_VK2f3uXPwOl_y2P7QLtzLNs2aIZBukjuu2WQGfkJD3LznRWAQy-CropKTSXxbc.png) +![Image 8](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f218c651c3be1367d23eb4_RxmxZInIIFLvZUTkgh63JlGBKnJlN1oGd5RW1NGQ6dM0ZPgnXaTXJ48wRFBDJWzUvNlIo5H9PuOEBMbB_rCh15bW_VK2f3uXPwOl_y2P7QLtzLNs2aIZBukjuu2WQGfkJD3LznRWAQy-CropKTSXxbc.png) ‍ ‍ -3. Configure Permissions - -* In the Flux plugin settings, select the "Permissions" tab. +3\. Configure Permissions -* Choose the "Custom" option. +\* In the Flux plugin settings, select the "Permissions" tab. -* Under the custom permissions, select the "Group" option +\* Choose the "Custom" option. -* Next, update the permissions for RBAC (Role-Based Access Control). +\* Under the custom permissions, select the "Group" option +\* Next, update the permissions for RBAC (Role-Based Access Control). -* Add "flux-write" and "flux-read-patch" permissions since they are required for using the "flux install" command. +\* Add "flux-write" and "flux-read-patch" permissions since they are required for using the "flux install" command. -![Image 9: a screenshot of a google adwords configuration screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f218e2755212a14074243d_bvJGmOwBNt4TLjh_yde1mlTZ_X-b0Mk-pXbKoJP3iLSNfw3ilvM_21hkaj0M5qAP8W04glEk1aWetaklzfuvZGGNBmmQefuFjt-4LWGz-WF2XTIsFnIcNliGTAL_izF_RQfj-6OjcUihJYdk66t2jkM.png) +![Image 9](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f218e2755212a14074243d_bvJGmOwBNt4TLjh_yde1mlTZ_X-b0Mk-pXbKoJP3iLSNfw3ilvM_21hkaj0M5qAP8W04glEk1aWetaklzfuvZGGNBmmQefuFjt-4LWGz-WF2XTIsFnIcNliGTAL_izF_RQfj-6OjcUihJYdk66t2jkM.png) ‍ -4. Configure GitHub-events Plugin +4\. Configure GitHub-events Plugin -* Now, select the GitHub-events plugin -5. Insert GitHub Access Token +\* Now, select the GitHub-events plugin -* Insert the same GitHub access token that you used for the Flux plugin into the GitHub-events plugin settings. +5\. Insert GitHub Access Token -![Image 10: github events experimental source plugin](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f21921f9104d28d7620904_a-5ZlAVnumBSl5orUqAAU2Ma0aWx3xrJ7QjVRWZU-IKvraswRku8RkYh4Ax6QRo_W0lvDHnhGTCRKQm0dF3U-kyVq_1c6THoimLnlRy0uw8oZ0mahQbCxZKINNbdCKTVbNfoSr0KgqF-w9A8YG5fGe0.png) +\* Insert the same GitHub access token that you used for the Flux plugin into the GitHub-events plugin settings. -‍ +![Image 10](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f21921f9104d28d7620904_a-5ZlAVnumBSl5orUqAAU2Ma0aWx3xrJ7QjVRWZU-IKvraswRku8RkYh4Ax6QRo_W0lvDHnhGTCRKQm0dF3U-kyVq_1c6THoimLnlRy0uw8oZ0mahQbCxZKINNbdCKTVbNfoSr0KgqF-w9A8YG5fGe0.png) -6. Repository Configuration +‍ -* Scroll down to the "Repository Configuration" section. +6\. Repository Configuration -* Insert the name of your repository into the appropriate field. +\* Scroll down to the "Repository Configuration" section. -* Scroll further down to the "Pull Request Matcher" section. +\* Insert the name of your repository into the appropriate field. -* Select the types of pull requests you want Botkube to check for. +\* Scroll further down to the "Pull Request Matcher" section. -* For this demo, choose the "open" option. +\* Select the types of pull requests you want Botkube to check for. +\* For this demo, choose the "open" option. -![Image 11: a screenshot of the repo configuration screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2193d26a35a2059f5a9c2_zV2W8j7eAJbfFdR_eFsbWZQdpJmZY0uXib1XCLCk9HR3n8XuQuCnnmy8T0Lk_eSWv6ZVPy2iTd_KHrhLUvGlSI0kN6OVtwI4K9dLHYxUW_wR3piuJYV0KDB4Hsh9hFOBW-SrYC0bRe2GPg_0bxGLekU.png) +![Image 11](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2193d26a35a2059f5a9c2_zV2W8j7eAJbfFdR_eFsbWZQdpJmZY0uXib1XCLCk9HR3n8XuQuCnnmy8T0Lk_eSWv6ZVPy2iTd_KHrhLUvGlSI0kN6OVtwI4K9dLHYxUW_wR3piuJYV0KDB4Hsh9hFOBW-SrYC0bRe2GPg_0bxGLekU.png) ‍ -* In the same section, locate the "File Pattern" field. +\* In the same section, locate the "File Pattern" field. -* Type in the file path that you want pull requests to match. +\* Type in the file path that you want pull requests to match. -* For this demo, use your "kustomize" folder. +\* For this demo, use your "kustomize" folder. - -![Image 12: a screenshot of the file patterns page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2194b9e5c70cd869dbfb4_X_x4cE-nGwjogL8wBWDcCQOeuxeHW-JzGMp6YmgOJEU1rK9z-79prBw2HNnmkXnmJCBkraY_qsRPwBGuxXfzWFqY1PtocW51l3qfly2Gsu0ToaPZb62pcIR_O-hlNBKu5T_tN7cwrgixqPNxAkDObQc.png) +![Image 12](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2194b9e5c70cd869dbfb4_X_x4cE-nGwjogL8wBWDcCQOeuxeHW-JzGMp6YmgOJEU1rK9z-79prBw2HNnmkXnmJCBkraY_qsRPwBGuxXfzWFqY1PtocW51l3qfly2Gsu0ToaPZb62pcIR_O-hlNBKu5T_tN7cwrgixqPNxAkDObQc.png) ‍ -7. Click the "Submit" button to save your configurations. +7\. Click the "Submit" button to save your configurations. -* If desired, configure any additional plugins you want to use at this stage. +\* If desired, configure any additional plugins you want to use at this stage. -![Image 13: a screen shot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2195fe9284fa6e17e51d1_9T2t8y3gIhVQPV4qHiXUcKwdYB_vYQ2wV06O1P7wM1zxib3rJlv8h2oTNW25bNehjGHDtQ2qYWwRy_96GYdI-bvl-0yEIKUjmfTqrARjZU4GcgVySZCldUnKHrlA5JjVwEXkxAFnyHu3SFQP4NMbok8.png) +![Image 13](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2195fe9284fa6e17e51d1_9T2t8y3gIhVQPV4qHiXUcKwdYB_vYQ2wV06O1P7wM1zxib3rJlv8h2oTNW25bNehjGHDtQ2qYWwRy_96GYdI-bvl-0yEIKUjmfTqrARjZU4GcgVySZCldUnKHrlA5JjVwEXkxAFnyHu3SFQP4NMbok8.png) ‍ -8. Click "Next" to proceed to the installation step. +8\. Click "Next" to proceed to the installation step. -9. On the next page, you will have the option to also enable [Command Alias](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) and [Botkube Actions](https://docs.botkube.io/usage/automated-actions/). +9\. On the next page, you will have the option to also enable \[Command Alias\](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) and \[Botkube Actions\](https://docs.botkube.io/usage/automated-actions/). -* Make your selection and click the create button. -10. You are now ready to start playing with your Botkube plugin. +\* Make your selection and click the create button. +10\. You are now ready to start playing with your Botkube plugin. ‍ -Using the Flux Plugin in Action -------------------------------- +\## Using the Flux Plugin in Action -### Running a Flux install +\### Running a Flux install -![Image 14: a screen shot of a web page with a white background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64ecb79001bc7e01e2c88804_flux-interactivity.gif) +![Image 14](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64ecb79001bc7e01e2c88804_flux-interactivity.gif) With the Botkube Flux plugin, you have the power to streamline your Kubernetes deployment workflow even further. Beyond the ability to effortlessly manage GitHub pull requests, this plugin offers you the convenience of checking prerequisites on your cluster and performing a complete Flux installation – all from your preferred communication platform. This means that not only can you seamlessly collaborate with your team members by sharing and discussing pull request changes within your Slack channel, but you can also ensure that your cluster is properly configured before initiating the installation of Flux. This capability to validate prerequisites directly from your communication platform adds a layer of control and convenience to your Kubernetes operations. -‍ - -### Automating a Flux Diff Workflow +‍ +\### Automating a Flux Diff Workflow -![Image 15: a screen shot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) +![Image 15](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) This command streamlines several essential tasks in your workflow. It starts by automatically identifying the relevant GitHub repository linked to the provided kustomization. After that, it proceeds to clone this repository and check out a specified pull request. The command then performs a thorough comparison between the changes in the pull request and the current state of your cluster. What sets it apart is its ability to conveniently share the resulting diff report on your Slack channel, facilitating seamless collaboration among team members for reviewing and discussing the alterations. Moreover, the command enhances efficiency by offering additional contextual actions, including posting the diff report as a GitHub comment on the corresponding pull request, approving the pull request, and providing quick access to view the pull request itself. Combining Botkube's GitHub Slack integration for repo control and Flux CD integration for more tools allows for better GitOps workflow management. -Conclusion ----------- +\## Conclusion In conclusion, the Botkube Flux plugin presents an invaluable asset for simplifying GitOps workflows. From automating notifications to enhancing collaboration, this tool streamlines the process of managing Kubernetes clusters and GitHub repositories. We encourage you to implement the plugin in your workflow and explore further automation possibilities.With seamless integration into major communication channels, Botkube empowers you to take swift action on identified errors, ensuring your Kubernetes environment runs smoothly wherever you are. -Sign up now! ------------- +\## Sign up now! -Get started with [Botkube](http://cloud.botkube.io/)! Whether you’re a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the [community of users](https://join.botkube.io/) who are already benefiting from the power of Botkube. - -‍ +Get started with [Botkube](https://app.botkube.io/). Whether you’re a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the [community of users](https://join.botkube.io/) who are already benefiting from the power of Botkube. -Feedback --------- +‍ +\## Feedback -We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Just email our Developer Advocate, Maria or use this calendly [link](https://calendly.com/maria-botkube) to sign up. +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Just email our Developer Advocate, Maria or use this calendly\[ link \](https://calendly.com/maria-botkube)to sign up. -You can also talk to us in the Botkube GitHub issues, connect with others and get help in the Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at blair@kubeshop.io. +You can also talk to us in the Botkube GitHub issues, connect with others and get help in the Botkube \[Slack community\](http://join.botkube.io/), or email our Product Leader at blair@kubeshop.io. diff --git a/hack/assistant-setup/content/botkube.io__blog__streamlining-kubernetes-management-a-closer-look-at-botkube-chatops.md b/hack/assistant-setup/content/botkube.io__blog__streamlining-kubernetes-management-a-closer-look-at-botkube-chatops.md index 5d13a410..c148b2f8 100644 --- a/hack/assistant-setup/content/botkube.io__blog__streamlining-kubernetes-management-a-closer-look-at-botkube-chatops.md +++ b/hack/assistant-setup/content/botkube.io__blog__streamlining-kubernetes-management-a-closer-look-at-botkube-chatops.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/streamlining-kubernetes-management-a-closer- Published Time: Jan 19, 2024 Markdown Content: -![Image 1: a man in a black shirt is standing in front of a circle with the words experts google cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9dc3218bb2465f041cea7_1693115200398.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9dc3218bb2465f041cea7_1693115200398.jpeg) Rohit Ghumare @@ -17,11 +17,11 @@ Learn about Botkube from Rohit Ghumare, Google Developer Expert – Google Cloud ### Table of Contents -* [Step 1: Signing Up for Botkube](#step-1-signing-up-for-botkube) -* [Step 2: Setting Your Instance](#step-2-setting-your-instance-) -* [Debugging Botkube](#debugging-botkube-) -* [Botkube Meets Helm](#botkube-meets-helm) -* [Conclusion](#conclusion) +* [Step 1: Signing Up for Botkube](#step-1-signing-up-for-botkube-2) +* [Step 2: Setting Your Instance](#step-2-setting-your-instance--2) +* [Debugging Botkube](#debugging-botkube--2) +* [Botkube Meets Helm](#botkube-meets-helm-2) +* [Conclusion](#conclusion-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -44,7 +44,7 @@ Ready to dive into the hands-on demo where we use Botkube for Kubernetes trouble * **Existing Users:** Already part of the Botkube family? Just [log in](https://app.botkube.io/#first-login) with your existing credentials, and you're good to go. * You can expect your dashboard to be like this: -![Image 2: a screen shot of a website with a blue background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d4f685f0a8da71eabce5_Screenshot%202024-01-13%20at%2018.33.18.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d4f685f0a8da71eabce5_Screenshot%202024-01-13%20at%2018.33.18.png) > **Linking Your Kubernetes Cluster to Slack:** Now that you're in, let's connect your Kubernetes cluster to Slack for real-time monitoring magic. @@ -58,26 +58,27 @@ Ready to dive into the hands-on demo where we use Botkube for Kubernetes trouble Use [Homebrew](https://brew.sh/) to install the latest Botkube CLI: -`brew install kubeshop/botkube/botkube` +\`\`\`brew install kubeshop/botkube/botkube\`\`\` -Alternatively, download the Botkube CLI binary and move it to a directory under your `$PATH:` - -curl -Lo botkube https://github.com/kubeshop/botkube/releases/download/v1.7.0/botkube-darwin-arm64chmod +x botkube && mv botkube /usr/local/bin/botkube +Alternatively, download the Botkube CLI binary and move it to a directory under your \`$PATH:\` +\`\`\` +curl -Lo botkube https://github.com/kubeshop/botkube/releases/download/v1.7.0/botkube-darwin-arm64chmod +x botkube && mv botkube /usr/local/bin/botkube +\`\`\` ### **2\. Install Botkube on your cluster** Install or upgrade Botkube and connect it to Botkube Cloud: -botkube install --version=v1.7.0 \ ---set config.provider.endpoint=https://api.botkube.io/graphql \ ---set config.provider.identifier=b2b56b7d-392a-4614-b1ba-93eb0e92f424 \ ---set config.provider.apiKey=key:1d4ffcee-9df8-489c-bcd2-f288eb781dde - - +\`\`\` +botkube install --version=v1.7.0 \\ +\--set config.provider.endpoint=https://api.botkube.io/graphql \\   +\--set config.provider.identifier=b2b56b7d-392a-4614-b1ba-93eb0e92f424 \\   +\--set config.provider.apiKey=key:1d4ffcee-9df8-489c-bcd2-f288eb781dde +\`\`\` Now, Choose a display name for your Botkube instance. This is like giving a cool nickname to your new digital helper. -![Image 3: a screen showing the creation of a house in adobe adobe adobe ado](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d575d9deb7aaf9866988_Screenshot%202024-01-13%20at%2020.15.55.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d575d9deb7aaf9866988_Screenshot%202024-01-13%20at%2020.15.55.png) ### **Step 3: Choosing Your Integration Method** @@ -88,23 +89,23 @@ Now, Choose a display name for your Botkube instance. This is like giving a cool ### Comparison for Botkube bidirectional communication integrations: -![Image 4: a table showing the differences between azure and youtube integrations](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65aed164c12e1b6851dff536_Screenshot%202024-01-22%20at%203.34.16%20PM.png) +![Image 4](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65aed164c12e1b6851dff536_Screenshot%202024-01-22%20at%203.34.16%20PM.png) ### **Step 4: Syncing with Slack** * Jump into your Slack app settings. Look for the "Add Slack" button and give it a click. This is where the real magic begins – integrating Botkube with your Slack world. -![Image 5: a screen shot of a page with a button on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5b8de7e130a53622129_Screenshot%202024-01-13%20at%2020.22.38.png) +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5b8de7e130a53622129_Screenshot%202024-01-13%20at%2020.22.38.png) ### **Step 5: Selecting Your Slack Workspace** * Head on to the Slack console and Create an app from an app manifest. -![Image 6: a screen shot of a web page showing the add apps button](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5d3de7e130a5362396c_Screenshot%202024-01-13%20at%2021.00.59.png) +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5d3de7e130a5362396c_Screenshot%202024-01-13%20at%2021.00.59.png) Pick a workspace of your choice where you want to install the Botkube -![Image 7: a screenshot of the pick workspace to develop your app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5f1035f985e43bc7225_Screenshot%202024-01-13%20at%2021.02.50.png) +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5f1035f985e43bc7225_Screenshot%202024-01-13%20at%2021.02.50.png) You can use the manifest YAML file below for app creation. @@ -112,16 +113,16 @@ You can use the manifest YAML file below for app creation. Choose the Slack workspace where you want Botkube to be your sidekick. Now you can bridge the gap between Slack and Kubernetes, bringing them together in harmony. -![Image 8: a screenshot of the adobe adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d62aeb09b9191aa90344_Screenshot%202024-01-13%20at%2021.28.43.png) +![Image 8](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d62aeb09b9191aa90344_Screenshot%202024-01-13%20at%2021.28.43.png) You need to invite Botkube to your Slack workspace first, so click on “invite bot to channel” and add the name of the channel you want to invite Botkube from. -![Image 9: a screen shot of a screen with a message box on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d674bcf59b0f274bfccb_Screenshot%202024-01-13%20at%2021.30.26.png) +![Image 9](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d674bcf59b0f274bfccb_Screenshot%202024-01-13%20at%2021.30.26.png) * Refer this [documentation](https://docs.botkube.io/installation/slack/socket-slack) for more details about integrating Slack with Botkube. * Install an App in your workspace -![Image 10: a screenshot of a screen showing a user's permission to access the theatrical stack workspace](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d6a944c186ec25c1d101_Screenshot%202024-01-13%20at%2021.09.44.png) +![Image 10](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d6a944c186ec25c1d101_Screenshot%202024-01-13%20at%2021.09.44.png) * Now, We need to copy the **_Bot token and App level token_** from the Slack Console that is required afterward. * Bot Token is directly available on Slack console - [Oauth token](https://www.notion.so/Streamlining-Kubernetes-Management-A-Closer-Look-at-Botkube-ChatOps-d5d0c9761ca449ea84d449aaf8031fa8?pvs=21) @@ -129,22 +130,23 @@ You need to invite Botkube to your Slack workspace first, so click on “invite 1. Select the **Basic Information** link from the left sidebar and scroll down to the **App-Level Token section**. Click on the **Generate Token and Scopes** button. -![Image 11: a screen showing the app level tokens page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d6c60f818c7e0fa3d23d_Screenshot%202024-01-13%20at%2021.36.17.png) +![Image 11](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d6c60f818c7e0fa3d23d_Screenshot%202024-01-13%20at%2021.36.17.png) -2. Enter a **Name**, select `connections:write` scope, and click **Generate**. +2. Enter a **Name**, select \`connections:write\` scope, and click **Generate**. -![Image 12: generating an app level token](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7029fa7ebdd68ebe769_Screenshot%202024-01-13%20at%2021.38.49.png) +![Image 12](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7029fa7ebdd68ebe769_Screenshot%202024-01-13%20at%2021.38.49.png) Export slack tokens from your terminal as follows: -export SLACK_API_BOT_TOKEN="botToken" -export SLACK_API_APP_TOKEN="appToken" - +\`\`\` +export SLACK\_API\_BOT\_TOKEN="botToken" +export SLACK\_API\_APP\_TOKEN="appToken" +\`\`\` * You need to make sure you’re adding Botkube to your channel where you’ll be using Botkube, as shown below. * After installing the Botkube app to your Slack workspace, you could see a new bot user with the name "Botkube" added to your workspace. Add that bot to a Slack channel you want to receive notifications in. You can add it by inviting @Botkube to a channel. -![Image 13: how to add a person to a group on tumblr](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d76a9e3dce9e6797a30d_Screenshot%202024-01-13%20at%2022.53.41.png) +![Image 13](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d76a9e3dce9e6797a30d_Screenshot%202024-01-13%20at%2022.53.41.png) We’re going to install Botkube on our Kubernetes cluster now. Run below commands: @@ -152,41 +154,41 @@ We’re going to install Botkube on our Kubernetes cluster now. Run below comman You should expect the output as given below: -![Image 14: a screen shot of a black screen with text on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d79c9e3dce9e6797ca20_Screenshot%202024-01-14%20at%2001.13.47.png) +![Image 14](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d79c9e3dce9e6797ca20_Screenshot%202024-01-14%20at%2001.13.47.png) -![Image 15: a screen shot of a pc with a black screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7a4e97f05231a340be0_Screenshot%202024-01-14%20at%2001.14.35.png) +![Image 15](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7a4e97f05231a340be0_Screenshot%202024-01-14%20at%2001.14.35.png) ### **Step 6: Bringing Botkube to Your Channels** * Want Botkube in your private Slack channels? No problem! Just use the "Add to Channel" feature. This way, Botkube becomes part of the conversation, ready to assist in Kubernetes-related discussions and incident management. * It’s time to head on to our web platform for Botkube, where we can now easily select the channels where we’ve already installed Botkube. -![Image 16: a screenshot of the adwords settings page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7eb0f818c7e0fa4e848_Screenshot%202024-01-13%20at%2023.12.43.png) +![Image 16](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7eb0f818c7e0fa4e848_Screenshot%202024-01-13%20at%2023.12.43.png) ### **Step 7: Customizing Your Plugins** * The final touch is selecting the plugins you want to use. This is like picking the right tools for your toolbox. Choose the ones that best fit your Kubernetes monitoring and troubleshooting needs. It's all about making Botkube work for you and your team. * We had already configured Helm and Kubernetes in the above commands. If you have other use-cases, you can explore argocd, flux, keptn, etc. plugins. All the best 🚀 -![Image 17: a screen shot of a google docs page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d865ae8cb06de78b6563_Screenshot%202024-01-13%20at%2023.13.41.png) +![Image 17](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d865ae8cb06de78b6563_Screenshot%202024-01-13%20at%2023.13.41.png) Create Instance by making changes: -![Image 18: a screen shot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d88aae0351187ae818a8_Screenshot%202024-01-13%20at%2023.14.04.png) +![Image 18](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d88aae0351187ae818a8_Screenshot%202024-01-13%20at%2023.14.04.png) **Congratulations!** You're all set up with Botkube Cloud and Slack. Now you've got a powerful ally in managing your Kubernetes clusters right within your Slack workspace. Go ahead, give it a spin, and see how it transforms your workflow! -![Image 19: a screen shot of a website with a white background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8ae0f818c7e0fa582e7_Screenshot%202024-01-13%20at%2023.15.22.png) +![Image 19](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8ae0f818c7e0fa582e7_Screenshot%202024-01-13%20at%2023.15.22.png) Go to your Slack workspace, you can expect below updates automatically! -![Image 20: a screen shot of the adobe video editor in adobe adobe adobe video](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8d6e97f05231a350620_Screenshot%202024-01-13%20at%2023.16.31.png) +![Image 20](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8d6e97f05231a350620_Screenshot%202024-01-13%20at%2023.16.31.png) ### Verify Botkube Installation -In Slack, try running kubectl commands under the _kubernetes_ channel like this `@SLACK_APP_NAME kubectl get nodes` +In Slack, try running kubectl commands under the _kubernetes_ channel like this \`@SLACK\_APP\_NAME kubectl get nodes\` -![Image 21: a screenshot of the chat screen on a computer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8fcb5f4e48c29b03978_Screenshot%202024-01-14%20at%2000.28.44.png) +![Image 21](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8fcb5f4e48c29b03978_Screenshot%202024-01-14%20at%2000.28.44.png) Debugging Botkube ----------------- @@ -195,39 +197,42 @@ Debugging Botkube > Most likely, you’ll come across some common errors around slack channel name or botkube not recognizing your slack workspace channels. To resolve this, you can manually edit the botkube YAML configuration file. -* Configure Botkube by editing the values.yaml file. - -vi botkube/values.yaml +\- Configure Botkube by editing the values.yaml file. +\`\`\` +vi botkube/values.yaml +\`\`\` Enable **_socketSlack_**_:_ under ”_communications:”_ and set the name of the default channel to match the name of your actual Slack channel. Set the **botToken** and **appToken** values to the tokens you retrieved from above. -communications: -'default-group': -socketSlack: -enabled: true -channels: -'default': -name: 'kubernetes' ... -... -botToken: 'BOT_TOKEN' -appToken: 'APP_TOKEN' - +\`\`\` +communications: + 'default-group': +   socketSlack: +     enabled: true +     channels: +       'default': +         name: 'kubernetes'  ... +                                                          ... +     botToken: 'BOT\_TOKEN' +     appToken: 'APP\_TOKEN' +\`\`\` Enable the Helm and Kubectl executors -executors: -k8s-default-tools: -botkube/helm: -enabled: true -... -... -... -botkube/kubectl: -enabled: true -... -... - +\`\`\` +executors: + k8s-default-tools: +   botkube/helm: +     enabled: true +       ... +... +       ... +   botkube/kubectl: +     enabled: true +       ... +... +\`\`\` Alternatively, You can also use **helm** for the Installation process for efficient Kubernetes application management. @@ -236,7 +241,8 @@ Alternatively, You can also use **helm** for the Installation process for effici A standout feature of Botkube? It's a [Helm executor plugin](https://botkube.io/integration/helm). This nifty integration lets you wield Helm commands right from your chat platform. Need to roll back a release or check an app’s status? Botkube’s got your back. -**Botkube’s Toolkit ‍**Botkube isn’t just about deploying and monitoring. It’s a powerhouse for executing a range of Helm commands like install, upgrade, and rollback. Just remember to tweak those RBAC settings for read-write commands. +**Botkube’s Toolkit +‍**Botkube isn’t just about deploying and monitoring. It’s a powerhouse for executing a range of Helm commands like install, upgrade, and rollback. Just remember to tweak those RBAC settings for read-write commands. **Why Botkube and Helm Are a Dream Team** @@ -250,22 +256,23 @@ A standout feature of Botkube? It's a [Helm executor plugin](https://botkube.io/ **Setting Up Botkube with Helm: A Step-by-Step Guide** -# Adding Botkube to helm -helm repo add botkube https://charts.botkube.io. +\`\`\` +\# Adding Botkube to helm +helm repo add botkube [https://charts.botkube.io](https://charts.botkube.io/). helm search repo botkube -# Reveals all available charts -helm search repo botkube +\# Reveals all available charts +helm search repo botkube -# Botkube Installation +\# Botkube Installation helm install botkube --namespace botkube --create-namespace botkube/botkube -# Verifying Installation +\# Verifying Installation kubectl get pods -n botkube -# If you're using Slack, try this -@Botkube helm list - +\# If you're using Slack, try this +@Botkube helm list +\`\`\` Conclusion ---------- diff --git a/hack/assistant-setup/content/botkube.io__blog__supercharging-developer-collaboration-how-chatops-lives-on-with-botkube.md b/hack/assistant-setup/content/botkube.io__blog__supercharging-developer-collaboration-how-chatops-lives-on-with-botkube.md index 6e8ffeff..33062ba6 100644 --- a/hack/assistant-setup/content/botkube.io__blog__supercharging-developer-collaboration-how-chatops-lives-on-with-botkube.md +++ b/hack/assistant-setup/content/botkube.io__blog__supercharging-developer-collaboration-how-chatops-lives-on-with-botkube.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/supercharging-developer-collaboration-how-ch Published Time: Jun 20, 2023 Markdown Content: -![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) Maria Ashby @@ -17,61 +17,54 @@ Chatops is not dead...it's making a comeback. In the fast-paced world of softwar ### Table of Contents -* [Unleashing the Power of ChatOps:](#unleashing-the-power-of-chatops-) -* [Evolving with the Developer Community:](#evolving-with-the-developer-community-) -* [What is Botkube? Is it ChatOps for Kubernetes?](#what-is-botkube-is-it-chatops-for-kubernetes-) -* [How Botkube Innovates the Chatops Space](#how-botkube-innovates-the-chatops-space) -* [Embrace the Future of Collaborative Troubleshooting:](#embrace-the-future-of-collaborative-troubleshooting-) -* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) +* [Unleashing the Power of ChatOps:](#unleashing-the-power-of-chatops--2) +* [Evolving with the Developer Community:](#evolving-with-the-developer-community--2) +* [What is Botkube? Is it ChatOps for Kubernetes?](#what-is-botkube-is-it-chatops-for-kubernetes--2) +* [How Botkube Innovates the Chatops Space](#how-botkube-innovates-the-chatops-space-2) +* [Embrace the Future of Collaborative Troubleshooting:](#embrace-the-future-of-collaborative-troubleshooting--2) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you--2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! In the fast-paced world of software development, collaboration and effective communication are extremely important. That's where ChatOps comes in—a game-changing method that has transformed the way development and operations teams collaborate. Despite rumors of its demise, ChatOps is alive and well, and all thanks to an incredible tool called Botkube. In this blog post, we'll show the ways ChatOps has evolved and why every developer should be excited about Botkube's impact on their troubleshooting workflow. -Unleashing the Power of ChatOps: --------------------------------- +\## Unleashing the Power of ChatOps: -As developers, we know that seamless collaboration and streamlined processes are the keys to success. [ChatOps](https://botkube.io/learn/chatops) harnesses the power of chat platforms to centralize discussions, actions, and alerts, providing a single hub for team collaboration. It's a practice that encourages transparency, knowledge sharing, and continuous improvement within development and operations workflows. ChatOps enables us to automate tasks, gather information, and trigger actions, all through the convenience of chat conversations. +As developers, we know that seamless collaboration and streamlined processes are the keys to success. \[ChatOps\](https://botkube.io/learn/chatops) harnesses the power of chat platforms to centralize discussions, actions, and alerts, providing a single hub for team collaboration. It's a practice that encourages transparency, knowledge sharing, and continuous improvement within development and operations workflows. ChatOps enables us to automate tasks, gather information, and trigger actions, all through the convenience of chat conversations. -Evolving with the Developer Community: --------------------------------------- +\## Evolving with the Developer Community: While ChatOps initially gained traction with tools like Hubot and Lita, it has never stopped evolving to meet the dynamic needs of modern development teams. With the advent of Kubernetes and containerization, the demand for ChatOps tools tailored to these environments became apparent. This is where Botkube, a powerful open-source tool, steps in to revolutionize how we monitor and manage our Kubernetes infrastructure. -What is Botkube? Is it ChatOps for Kubernetes? ----------------------------------------------- +\## What is Botkube? Is it ChatOps for Kubernetes? Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more.. In this blog post, we'll give you an introduction to Botkube and highlight some of its key features and benefits. -How Botkube Innovates the Chatops Space ---------------------------------------- +\## How Botkube Innovates the Chatops Space -### Real-time Collaboration: +\### Real-time Collaboration: Imagine receiving instant alerts about pod crashes, resource constraints, or failed deployments, directly in your chat platform. Botkube ensures that the right team members are informed promptly, enabling quick decision-making and efficient troubleshooting. No more delays or miscommunications – just instant collaboration at its finest. -### Centralized Knowledge: +\### Centralized Knowledge: With Botkube, all our Kubernetes-related discussions, diagnoses, and actions take place within the chat platform. This not only encourages knowledge sharing but also creates a centralized repository of information and actions taken. No more scattered conversations or lost context. It's all neatly preserved for easy access and accelerated onboarding of new team members. -### Turbocharged Efficiency: +\### Turbocharged Efficiency: Botkube's automation capabilities eliminate repetitive tasks and enable lightning-fast actions through chat commands. We can scale deployments, inspect logs, or roll back changes with a few keystrokes, all while staying in the flow of our chat conversations. This seamless workflow minimizes context switching, boosts productivity, and expedites application deployment and management. -### Flexibility and Scalability: +\### Flexibility and Scalability: Whether we're working with a single Kubernetes cluster or managing multiple ones, Botkube has us covered. It scales effortlessly, ensuring we can monitor and manage our infrastructure effectively. Moreover, Botkube's extensible architecture lets us integrate custom alerting mechanisms or notifications, tailoring it to our specific needs. -Embrace the Future of Collaborative Troubleshooting: ----------------------------------------------------- +\## Embrace the Future of Collaborative Troubleshooting: ChatOps isn't going anywhere in fact, it's thriving, and with tools like Botkube, it's reaching new heights. This powerful combination empowers us to collaborate seamlessly, automate tasks effortlessly, and gain real-time insights into our Kubernetes infrastructure. As the Kubernetes community continues to push boundaries, ChatOps fueled by Botkube will remain an indispensable practice. Embrace the power of ChatOps and join the exciting journey of transforming how we collaborate, communicate, and code. -Feedback - We’d Love to Hear From You! --------------------------------------- - +\## Feedback - We’d Love to Hear From You! As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. You can talk to us in the Botkube GitHub issues, Botkube Slack community, or email our Product Leader at blair@kubeshop.io. diff --git a/hack/assistant-setup/content/botkube.io__blog__the-state-of-kubernetes-errors-in-2023.md b/hack/assistant-setup/content/botkube.io__blog__the-state-of-kubernetes-errors-in-2023.md index 648b1c0f..e68f2d4c 100644 --- a/hack/assistant-setup/content/botkube.io__blog__the-state-of-kubernetes-errors-in-2023.md +++ b/hack/assistant-setup/content/botkube.io__blog__the-state-of-kubernetes-errors-in-2023.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/the-state-of-kubernetes-errors-in-2023 Published Time: Aug 03, 2023 Markdown Content: -![Image 1: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) Evan Witmer @@ -81,7 +81,7 @@ ChatOps is a method of using chat tools to automate and streamline DevOps workfl Govardhana Miriyala Kannaiah wrote a great [LinkedIn post](https://www.linkedin.com/posts/govardhana-miriyala-kannaiah_gopuwrites-kubernetes-devops-activity-7076547924205146115-b6le/) where he outlined a chart for effective Kubernetes troubleshooting. The two axis of this chart are ‘ How effective it is’ and ‘How often to do it’. This shows the different troubleshooting techniques like checking logs or verifying pod configuration. We hope you enjoy his graph as much as we did! -![Image 2: a diagram showing the different types of troubleshooting](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64cbf6afb711c416c4939db4_6xCx7eRWFrIzItkWAb9rcnUhWR2ID4us4Lc-1ynN0EHEgkmBQRO78zIdtlvPjq-SKy6ipbxlXLWjsnCsiuyC0WbGGq8svhXY3VOJuC4AKdzzVHpMS3XXzwQ9Izj59OGYUoTP5Eiu6EZv1W9sWpQEd_c.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64cbf6afb711c416c4939db4_6xCx7eRWFrIzItkWAb9rcnUhWR2ID4us4Lc-1ynN0EHEgkmBQRO78zIdtlvPjq-SKy6ipbxlXLWjsnCsiuyC0WbGGq8svhXY3VOJuC4AKdzzVHpMS3XXzwQ9Izj59OGYUoTP5Eiu6EZv1W9sWpQEd_c.png) **Concluding Kubernetes Errors** -------------------------------- diff --git a/hack/assistant-setup/content/botkube.io__blog__use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor.md b/hack/assistant-setup/content/botkube.io__blog__use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor.md index d72ad4cd..612b91cf 100644 --- a/hack/assistant-setup/content/botkube.io__blog__use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor.md +++ b/hack/assistant-setup/content/botkube.io__blog__use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-error Published Time: Jul 31, 2023 Markdown Content: -![Image 1: a woman with short hair smiling for the camera](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) Kelly Revenaugh @@ -17,11 +17,11 @@ People have been using ChatGPT and AI for many uses over the past year. But have ### Table of Contents -* [Using ChatGPT with Kubernetes](#using-chatgpt-with-kubernetes) -* [How Botkube Makes ChatGPT for Kubernetes Even Better](#how-botkube-makes-chatgpt-for-kubernetes-even-better) -* [Common Use Cases with ChatGPT and Botkube](#common-use-cases-with-chatgpt-and-botkube) -* [Is ChatGPT Safe to Use in Kubernetes?](#is-chatgpt-safe-to-use-in-kubernetes-) -* [Get Started with Botkube’s Doctor Plugin](#get-started-with-botkube-s-doctor-plugin) +* [Using ChatGPT with Kubernetes](#using-chatgpt-with-kubernetes-2) +* [How Botkube Makes ChatGPT for Kubernetes Even Better](#how-botkube-makes-chatgpt-for-kubernetes-even-better-2) +* [Common Use Cases with ChatGPT and Botkube](#common-use-cases-with-chatgpt-and-botkube-2) +* [Is ChatGPT Safe to Use in Kubernetes?](#is-chatgpt-safe-to-use-in-kubernetes--2) +* [Get Started with Botkube’s Doctor Plugin](#get-started-with-botkube-s-doctor-plugin-2) #### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! @@ -29,63 +29,58 @@ People have been using ChatGPT and AI for many uses over the past year. But have Artificial Intelligence (AI) and its counterpart, GPT (generative pre-trained transformer), have been making incredible progress over the past year. Large Language Models power tools like ChatGPT to answer almost any question using the collective knowledge stored over years on the Internet. -And more recently, AI has entered the Kubernetes ecosystem. Throughout the past year, the industry has seen AI help with Kubernetes cost optimization, security management, troubleshooting, and more. So, the Botkube team harnessed the power of ChatGPT to answer questions and give recommendations on troubleshooting Kubernetes clusters with our new [AI Troubleshooting feature called Doctor](https://docs.botkube.io/usage/executor/doctor). ‍ +And more recently, AI has entered the Kubernetes ecosystem. Throughout the past year, the industry has seen AI help with Kubernetes cost optimization, security management, troubleshooting, and more. So, the Botkube team harnessed the power of ChatGPT to answer questions and give recommendations on troubleshooting Kubernetes clusters with our new \[AI Troubleshooting feature called Doctor\](https://docs.botkube.io/usage/executor/doctor). +‍ ‍ -Learn more about how we developed Botkube’s Doctor (ChatGPT) plugin during an internal Hackathon in Pawel’s [blog post](https://botkube.io/blog/building-a-chatgpt-plugin-from-ideation-to-implementation). +Learn more about how we developed Botkube’s Doctor (ChatGPT) plugin during an internal Hackathon in Pawel’s \[blog post\](https://botkube.io/blog/building-a-chatgpt-plugin-from-ideation-to-implementation). -Using ChatGPT with Kubernetes ------------------------------ +\## Using ChatGPT with Kubernetes Using ChatGPT to troubleshoot issues in your Kubernetes cluster can save time and streamline your workflow. GPT (generative pre-trained transformer) automates many of the tedious and time-consuming tasks involved in troubleshooting, allowing you to focus on more important tasks. Additionally, ChatGPT's ability to analyze your cluster configuration and resource usage can help you optimize your cluster for better performance and cost savings. -How Botkube Makes ChatGPT for Kubernetes Even Better ----------------------------------------------------- +\## How Botkube Makes ChatGPT for Kubernetes Even Better -Now, through the ChatOps-based interface in communication platforms like [Slack, MS Teams, Discord](http://botkube.io/integrations), Botkube users can now interact with ChatGPT and get recommendations while troubleshooting Kubernetes. Even though Kubernetes has been widely adopted over the past few years, there are still many developers and Ops teams who struggle with the complexity of Kubernetes. The ChatGPT plugin will help beginner and intermediate K8s users who are faced with troubleshooting issues or questions without the need for a Google search on Kubernetes documentation. every error they encounter. +Now, through the ChatOps-based interface in communication platforms like \[Slack, MS Teams, Discord\](http://botkube.io/integrations), Botkube users can now interact with ChatGPT and get recommendations while troubleshooting Kubernetes. Even though Kubernetes has been widely adopted over the past few years, there are still many developers and Ops teams who struggle with the complexity of Kubernetes. The ChatGPT plugin will help beginner and intermediate K8s users who are faced with troubleshooting issues or questions without the need for a Google search on Kubernetes documentation. every error they encounter. -Common Use Cases with ChatGPT and Botkube ------------------------------------------ +\## Common Use Cases with ChatGPT and Botkube There are many ways to use ChatGPT when troubleshooting Kubernetes clusters. AI can help analyze logs, metrics, and other data from your Kubernetes cluster to identify issues – then returns recommendations on how to fix and improve errors and issues. -Here's a few use cases as examples: - -### Assistance for Beginner Kubernetes Users +Here's a few use cases as examples: +\### Assistance for Beginner Kubernetes Users -![Image 2: a purple screen with a purple background and a purple text](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c7f3a7c42051dab4872cab_8hyWVq9NOkFLCQpe-EqzxKczhU5VIqqG_bm2kP876TdzysK0Z3PGJOXCBF3aPo8wIV9w8bC5n77ksg5I62jg7KlzmZpnmxNRmP2yvLTrxWZaHYv2tZFxGfQAo21ky2infXvJraVs4RbpiM4Jiyl1ulA.png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c7f3a7c42051dab4872cab_8hyWVq9NOkFLCQpe-EqzxKczhU5VIqqG_bm2kP876TdzysK0Z3PGJOXCBF3aPo8wIV9w8bC5n77ksg5I62jg7KlzmZpnmxNRmP2yvLTrxWZaHYv2tZFxGfQAo21ky2infXvJraVs4RbpiM4Jiyl1ulA.png) -After the Doctor plugin is installed, users are able to use the `Get Help` button located under incoming error events, like the one shown above. This helps lower the barrier of entry for new Kubernetes and/or Botkube users. +After the Doctor plugin is installed, users are able to use the \`Get Help\` button located under incoming error events, like the one shown above. This helps lower the barrier of entry for new Kubernetes and/or Botkube users. -The Get Help action passes the error data to ChatGPT, which returns a response with actionable buttons to execute commands, like `kubectl describe pod` or `kubectl logs pod`, instead of scouring the Internet for the correct answer. +The Get Help action passes the error data to ChatGPT, which returns a response with actionable buttons to execute commands, like \`kubectl describe pod\` or \`kubectl logs pod\`, instead of scouring the Internet for the correct answer. Users can also ask ChatGPT specific questions directly from the interface. Users can ask questions about Kubernetes, like “Where does Kubernetes store its state?” to tutorial-like questions like “How do I create a Pod?” -__Keep in mind that the ChatGPT plugin will only give recommendations and expects the Botkube user to execute commands.__ +_\*Keep in mind that the ChatGPT plugin will only give recommendations and expects the Botkube user to execute commands.\*_ -### ChatGPT Recommendations +\### ChatGPT Recommendations -![Image 3: a screenshot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c7f3b7be2361ae1bb5afd0_LEr5f9Rr-O1pgKD_dYqFRG8GcwopzDWXYkDiVyEL3as3vJF3r1DQhDHa4SZs0sQD2NmW8sHJ3XUVMxUAp5z8WJx-mIuyXanea4788oniZnR0o4m2UrCZXKe-Uj8RZufiLihfB__BQYzgNo3uG2IrIwY.png) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c7f3b7be2361ae1bb5afd0_LEr5f9Rr-O1pgKD_dYqFRG8GcwopzDWXYkDiVyEL3as3vJF3r1DQhDHa4SZs0sQD2NmW8sHJ3XUVMxUAp5z8WJx-mIuyXanea4788oniZnR0o4m2UrCZXKe-Uj8RZufiLihfB__BQYzgNo3uG2IrIwY.png) -The new Doctor plugin allows you to integrate [Botkube's existing Kubernetes recommendations](https://www.youtube.com/watch?v=9D2tASyx7eA) derived from cluster logs to receive personalized suggestions based on the specific information extracted from your Kubernetes cluster. +The new Doctor plugin allows you to integrate \[Botkube's existing Kubernetes recommendations\](https://www.youtube.com/watch?v=9D2tASyx7eA) derived from cluster logs to receive personalized suggestions based on the specific information extracted from your Kubernetes cluster. Whether it's optimizing resource allocation, enhancing security measures, or improving overall performance, the Doctor plug-in empowers users with valuable insights to make informed decisions for their Kubernetes environments. -### Troubleshooting Automations +\### Troubleshooting Automations -Users can harness ChatGPT capabilities to craft custom Botkube configurations and [automated actions](https://docs.botkube.io/usage/automated-actions) effortlessly, working seamlessly with other plugins. By leveraging Slack interactivity as a command builder, users can efficiently interact with the system, receiving tailored suggestions for automations that directly address the specific challenges encountered within their Kubernetes cluster. The Doctor plug-in empowers users to find precise solutions and execute commands with ease, streamlining the troubleshooting process and enhancing overall cluster management. +Users can harness ChatGPT capabilities to craft custom Botkube configurations and \[automated actions\](https://docs.botkube.io/usage/automated-actions) effortlessly, working seamlessly with other plugins. By leveraging Slack interactivity as a command builder, users can efficiently interact with the system, receiving tailored suggestions for automations that directly address the specific challenges encountered within their Kubernetes cluster. The Doctor plug-in empowers users to find precise solutions and execute commands with ease, streamlining the troubleshooting process and enhancing overall cluster management. -Is ChatGPT Safe to Use in Kubernetes? -------------------------------------- +\## Is ChatGPT Safe to Use in Kubernetes? -Giving access to your Kubernetes clusters in production to __any__ tool can be nerve-wracking. We take our users’ data and security seriously. Luckily, ChatGPT in Botkube only generates information and recommendations based on what you ask it and will not execute any commands. Take a look at our [Terms of Service](https://app.botkube.io/terms-of-service), [End User License Agreement](https://app.botkube.io/eula) and [Privacy Policy](https://app.botkube.io/privacy-policy). +Giving access to your Kubernetes clusters in production to _\*any\*_ tool can be nerve-wracking. We take our users’ data and security seriously. Luckily, ChatGPT in Botkube only generates information and recommendations based on what you ask it and will not execute any commands. Take a look at our \[Terms of Service\](https://app.botkube.io/terms-of-service), \[End User License Agreement\](https://app.botkube.io/eula) and \[Privacy Policy\](https://app.botkube.io/privacy-policy). -Get Started with Botkube’s Doctor Plugin ----------------------------------------- +\## Get Started with Botkube’s Doctor Plugin -Ready to try it out on your own? The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/executor/doctor). +Ready to try it out on your own? The easiest way to configure it is through the \[Botkube web app\](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your \[Botkube YAML configuration\](https://docs.botkube.io/configuration/executor/doctor). -Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use the Doctor plugin in the [documentation](https://docs.botkube.io/usage/executor/doctor). +Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use the Doctor plugin in the \[documentation\](https://docs.botkube.io/usage/executor/doctor). -We’d love to hear how you are using ChatGPT to troubleshoot your Kubernetes clusters! Share your experiences with us in the Botkube [Slack community](http://join.botkube.io/) or [email our Developer Advocate, Maria](mailto:maria@kubeshop.io) and we’ll send you some fun swag. +We’d love to hear how you are using ChatGPT to troubleshoot your Kubernetes clusters! Share your experiences with us in the Botkube \[Slack community\](http://join.botkube.io/) or \[email our Developer Advocate, Maria\](mailto:maria@kubeshop.io) and we’ll send you some fun swag. diff --git a/hack/assistant-setup/content/botkube.io__contact.md b/hack/assistant-setup/content/botkube.io__contact.md index bb5d7fd5..43ce93bb 100644 --- a/hack/assistant-setup/content/botkube.io__contact.md +++ b/hack/assistant-setup/content/botkube.io__contact.md @@ -3,9 +3,44 @@ Title: Contact Us URL Source: https://botkube.io/contact Markdown Content: -Botkube is made by Kubeshop -— a first of its kind open source accelerator focused on the cloud native ecosystem +Responsive -At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. +[![Image 1](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) -[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +Product + +[Features](https://botkube.io/features)[Integrations](https://botkube.io/integrations)[Case studies](https://botkube.io/case-studies) + +[Pricing](https://botkube.io/pricing) + +Support + +[Overview](https://botkube.io/support)[Docs](https://docs.botkube.io/)[Learn](https://botkube.io/learn) + +Company + +[About Us](https://botkube.io/about)[Blog](https://botkube.io/blog)[News](https://botkube.io/news)[Events](https://botkube.io/events)[Contact Us](https://botkube.io/contact) + +[Sign in](https://app.testkube.io/) + +[Get started](#)[Get started](https://app.botkube.io/) + +[Sign in](https://app.botkube.io/) + +[Get Started](https://app.botkube.io/) + +Use the form to leave us a message or connect with us on social: + +[](https://github.com/kubeshop/botkube)[](https://join.botkube.io/)[](https://twitter.com/botkube_io)[](https://www.linkedin.com/showcase/botkube/)[](https://www.youtube.com/playlist?list=PL2Vye-us8_x_5eqYQTBq7ZywupscaW5yA) + +![Image 2](https://assets-global.website-files.com/633705de6adaa38599d8e258/64de5389c7d816d1f6530501_botkube-status-icon.svg) + +Check the status of Botkube [here.](https://status.botkube.io/) + +![Image 3](https://assets-global.website-files.com/633705de6adaa38599d8e258/64248f7486143f7980b84c40_botkube-contact-us-pers.svg) + +![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/634ee5c0455ce28d5f1d965c_blair-rampling.jpeg) + +Book a meeting with Botkube’s Product Manager, Blair Rampling to help you get started. + +[Book a meeting with Blair](https://calendly.com/d/zg4-dfv-rv6/chat-with-the-botkube-team-60-minutes?month=2024-04) diff --git a/hack/assistant-setup/content/botkube.io__demo.md b/hack/assistant-setup/content/botkube.io__demo.md index c37d2ada..336b1af0 100644 --- a/hack/assistant-setup/content/botkube.io__demo.md +++ b/hack/assistant-setup/content/botkube.io__demo.md @@ -6,13 +6,9 @@ Markdown Content: See Botkube in Action --------------------- -#### Can’t try Botkube yourself? Get a live demo or sandbox trial environment +#### The easiest way to see the best of Botkube is to try it yourself. The DIY installation\* only takes a few minutes to get a fully functional Botkube environment. -### The best way to see the best of Botkube 
is to try it yourself - -If you don’t have access or permissions to install Botkube in your environment, we can help. Sign up now for either: - -This requires: +\*This requires: 1. @@ -21,5 +17,3 @@ A collaboration platform into which you have permission to install an app 2. A working Kubernetes cluster in which to install Botkube - -The installation only takes a few minutes to get a fully functional Botkube environment. diff --git a/hack/assistant-setup/content/botkube.io__features.md b/hack/assistant-setup/content/botkube.io__features.md index fab82dbe..4465c943 100644 --- a/hack/assistant-setup/content/botkube.io__features.md +++ b/hack/assistant-setup/content/botkube.io__features.md @@ -3,7 +3,7 @@ Title: Features URL Source: https://botkube.io/features Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) +[![Image 1: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) Empowering DevOps with AI-Powered Kubernetes Troubleshooting ------------------------------------------------------------ @@ -27,9 +27,7 @@ Act on events directly in the collaboration platform (including mobile apps) by Actions allow you to automatically run commands based on specific events and see the results in the event message. Gather logs and other details on errors, get descriptions of newly created resources, and even auto-rollback failed deployments and upgrades with simple configuration steps. -[Take a closer look ![Image 4: a screenshot of an error message on a website](https://assets-global.website-files.com/633705de6adaa38599d8e258/64025d7fab04582144112fc7_Screenshot%202023-02-27%20at%2017.42%201.png)](#) - -![Image 5: Automate K8s maintenance tasks](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif) +[Take a closer look ![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/64025d7fab04582144112fc7_Screenshot%202023-02-27%20at%2017.42%201.png)](#)![Image 5: Automate K8s maintenance tasks](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif) ![Image 6: Collaboration with developer teams managing K8s](https://assets-global.website-files.com/633705de6adaa38599d8e258/6348669b8c031b85668d3a2b_KVP1-Monitoring.gif) diff --git a/hack/assistant-setup/content/botkube.io__integration__argo-cd-botkube-kubernetes-integration.md b/hack/assistant-setup/content/botkube.io__integration__argo-cd-botkube-kubernetes-integration.md index 327bd29e..ffcfac71 100644 --- a/hack/assistant-setup/content/botkube.io__integration__argo-cd-botkube-kubernetes-integration.md +++ b/hack/assistant-setup/content/botkube.io__integration__argo-cd-botkube-kubernetes-integration.md @@ -1,4 +1,4 @@ -Title: Argo CD & Botkube Kubernetes Integration +Title: Botkube.io URL Source: https://botkube.io/integration/argo-cd-botkube-kubernetes-integration diff --git a/hack/assistant-setup/content/botkube.io__integration__botkube-flux-kubernetes-integration.md b/hack/assistant-setup/content/botkube.io__integration__botkube-flux-kubernetes-integration.md index 80050b53..f18d0243 100644 --- a/hack/assistant-setup/content/botkube.io__integration__botkube-flux-kubernetes-integration.md +++ b/hack/assistant-setup/content/botkube.io__integration__botkube-flux-kubernetes-integration.md @@ -1,4 +1,4 @@ -Title: Flux & Botkube Kubernetes Integration +Title: Botkube.io URL Source: https://botkube.io/integration/botkube-flux-kubernetes-integration diff --git a/hack/assistant-setup/content/botkube.io__integration__chatgpt-botkube-kubernetes-integration.md b/hack/assistant-setup/content/botkube.io__integration__chatgpt-botkube-kubernetes-integration.md index e633ab1c..8d6595b1 100644 --- a/hack/assistant-setup/content/botkube.io__integration__chatgpt-botkube-kubernetes-integration.md +++ b/hack/assistant-setup/content/botkube.io__integration__chatgpt-botkube-kubernetes-integration.md @@ -1,4 +1,4 @@ -Title: ChatGPT & Botkube Kubernetes Integration (K8s Doctor Plugin) +Title: Botkube.io URL Source: https://botkube.io/integration/chatgpt-botkube-kubernetes-integration diff --git a/hack/assistant-setup/content/botkube.io__integration__discord.md b/hack/assistant-setup/content/botkube.io__integration__discord.md index 3e54b8da..a823abe4 100644 --- a/hack/assistant-setup/content/botkube.io__integration__discord.md +++ b/hack/assistant-setup/content/botkube.io__integration__discord.md @@ -1,4 +1,4 @@ -Title: Discord & Botkube Kubernetes Integration +Title: Botkube.io URL Source: https://botkube.io/integration/discord @@ -22,3 +22,9 @@ Discord + Botkube K8s Integration --------------------------------- With the Botkube integration into Discord, developers can now receive Kubernetes and Cluster alerts directly in their collaboration tool of choice, including Discord. This integration allows for real-time notifications of Kubernetes cluster events, such as pod failures and autoscaling, to be sent directly to Discord channels. Even Helm deployment alerts can now show up in the channel, providing developers with the option to troubleshoot directly from the Chat. With Botkube's integration into Discord, developers can focus on their work and stay on top of Kubernetes alerts without having to worry about setting up and managing custom webhooks. + +‍ + +### New Kubernetes AI Bot for Discord + +After release 1.10 of Botkube, every install now comes with Botkube AI by default. What does that mean? It means that you now can troubleshoot your Kubernetes cluster directly from Discord with the power of AI. If you keep getting a repetitive error, such as the [OOMKILLED](https://botkube.io/learn/what-is-oomkilled) error, you can ask Botkube's AI what pod is causing that error. Once the AI finds the failing pod, it will suggest the fix which can be applied in with click thanks to Botkube's ability to run kubectl commands. diff --git a/hack/assistant-setup/content/botkube.io__integration__kasten.md b/hack/assistant-setup/content/botkube.io__integration__kasten.md index b4bd3cbe..ba98d9a3 100644 --- a/hack/assistant-setup/content/botkube.io__integration__kasten.md +++ b/hack/assistant-setup/content/botkube.io__integration__kasten.md @@ -1,4 +1,4 @@ -Title: Kasten & Botkube Kubernetes Integration +Title: Botkube.io URL Source: https://botkube.io/integration/kasten diff --git a/hack/assistant-setup/content/botkube.io__integration__keptn.md b/hack/assistant-setup/content/botkube.io__integration__keptn.md index 2d95860b..cc392b11 100644 --- a/hack/assistant-setup/content/botkube.io__integration__keptn.md +++ b/hack/assistant-setup/content/botkube.io__integration__keptn.md @@ -1,4 +1,4 @@ -Title: Keptn & Botkube Kubernetes Integration +Title: Botkube.io URL Source: https://botkube.io/integration/keptn diff --git a/hack/assistant-setup/content/botkube.io__integration__mattermost.md b/hack/assistant-setup/content/botkube.io__integration__mattermost.md index 735575f1..cf618629 100644 --- a/hack/assistant-setup/content/botkube.io__integration__mattermost.md +++ b/hack/assistant-setup/content/botkube.io__integration__mattermost.md @@ -1,4 +1,4 @@ -Title: Mattermost & Botkube Kubernetes Integration +Title: Botkube.io URL Source: https://botkube.io/integration/mattermost @@ -22,3 +22,7 @@ Mattermost + Botkube K8s Integration ------------------------------------ Botkube has become the Kubernetes Integration partner for Mattermost, allowing users to receive Kubernetes-related alerts directly in their Mattermost channels. Botkube provides a seamless integration with Mattermost, which enables teams to collaborate more effectively by providing real-time notifications on Kubernetes cluster events, such as pod failures, deployments, and autoscaling. With Botkube, users can easily share permissions to their Kubernetes cluster through a shared team channel, ensuring that the right people have access to the right resources. Additionally, Botkube provides the ability to perform Kubernetes cluster commands directly from Mattermost, allowing users to restart their cluster or perform general maintenance tasks from their local machine without having to switch between different tools. This integration between Botkube and Mattermost streamlines Kubernetes operations, providing a more efficient and effective way to manage your Kubernetes clusters. + +### Now with Botkube's Kuberntes AI Assistant + +Botkube's AI assistant is a game-changer for Kubernetes management. It comes standard, empowering you to take your Mattermost alerts to the next level.  Now, Botkube doesn't just notify you of Kubernetes errors – it digs deep to understand _why_ they occurred. Even better, with your permission, the AI assistant can take action to resolve those errors autonomously, saving you precious time and streamlining your incident response. diff --git a/hack/assistant-setup/content/botkube.io__integration__prometheus.md b/hack/assistant-setup/content/botkube.io__integration__prometheus.md index 025097a2..8d9f47cc 100644 --- a/hack/assistant-setup/content/botkube.io__integration__prometheus.md +++ b/hack/assistant-setup/content/botkube.io__integration__prometheus.md @@ -7,7 +7,7 @@ Markdown Content: There has never been an easier way to get started with alert manager by Prometheus. If it is not already installed into your Kubernetes cluster, just simply go over to Botkube’s setup wizard and select the different K8s plugins you would like to add. No more CLI deployment needed! -![Image 1: Adding Alerts to your Kubernetes Cluster with Prometheus Alert manager](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6549321f3ab68ce0bef6a1a0_POEEPnLdeD8pzH-pcTbUwkuHvE46ilC2nSw5zPvp4f1DuxdIBV3hbRC-hBnuEAYpCS7UzSU2bpsNdmWXFGIot6nhEtZskDiPOP7K7er6bOy4-1p2AKkjcJYNaYaGHClmW5rrmFsd8rzXLO6MIFJabZg.png) +![Image 1: Adding Alerts to your Kubernetes Cluster with Prometheus Alert manager ](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6549321f3ab68ce0bef6a1a0_POEEPnLdeD8pzH-pcTbUwkuHvE46ilC2nSw5zPvp4f1DuxdIBV3hbRC-hBnuEAYpCS7UzSU2bpsNdmWXFGIot6nhEtZskDiPOP7K7er6bOy4-1p2AKkjcJYNaYaGHClmW5rrmFsd8rzXLO6MIFJabZg.png) How does Prometheus work? ------------------------- diff --git a/hack/assistant-setup/content/botkube.io__integration__slack.md b/hack/assistant-setup/content/botkube.io__integration__slack.md index a80efe89..aa0a77eb 100644 --- a/hack/assistant-setup/content/botkube.io__integration__slack.md +++ b/hack/assistant-setup/content/botkube.io__integration__slack.md @@ -1,4 +1,4 @@ -Title: Slack & Botkube Kubernetes Integration +Title: Botkube.io URL Source: https://botkube.io/integration/slack @@ -10,7 +10,7 @@ When developers want to receive notifications about the status of their cluster, ### Now with Kubernetes AI Assistant for Troubleshooting k8s! -![Image 1: Checking Kubernetes Namespaces in Slack with Botkube's AI Assistant](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) +![Image 1: Checking Kubernetes Namespaces in Slack with Botkube's AI Assistant ](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) Checking Kubernetes Namespaces in Slack with Botkube diff --git a/hack/assistant-setup/content/botkube.io__integration__teams.md b/hack/assistant-setup/content/botkube.io__integration__teams.md index 602bdead..0f2671a1 100644 --- a/hack/assistant-setup/content/botkube.io__integration__teams.md +++ b/hack/assistant-setup/content/botkube.io__integration__teams.md @@ -1,4 +1,4 @@ -Title: Microsoft Teams & Botkube K8s Integration +Title: Botkube.io URL Source: https://botkube.io/integration/teams diff --git a/hack/assistant-setup/content/botkube.io__integrations.md b/hack/assistant-setup/content/botkube.io__integrations.md index e1a576cf..cb092883 100644 --- a/hack/assistant-setup/content/botkube.io__integrations.md +++ b/hack/assistant-setup/content/botkube.io__integrations.md @@ -8,4 +8,4 @@ Botkube is made by Kubeshop At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__ai.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__ai.md index 0df045e5..e096aba6 100644 --- a/hack/assistant-setup/content/botkube.io__learn-main-topic__ai.md +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__ai.md @@ -8,4 +8,4 @@ Botkube is made by Kubeshop At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__definitions.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__definitions.md index 80e50327..2c9fed28 100644 --- a/hack/assistant-setup/content/botkube.io__learn-main-topic__definitions.md +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__definitions.md @@ -8,4 +8,4 @@ Botkube is made by Kubeshop At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__errors.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__errors.md index 27ecc2e2..220f2933 100644 --- a/hack/assistant-setup/content/botkube.io__learn-main-topic__errors.md +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__errors.md @@ -8,4 +8,4 @@ Botkube is made by Kubeshop At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__monitoring-kubernetes.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__monitoring-kubernetes.md index 562ab157..8f3ff311 100644 --- a/hack/assistant-setup/content/botkube.io__learn-main-topic__monitoring-kubernetes.md +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__monitoring-kubernetes.md @@ -8,4 +8,4 @@ Botkube is made by Kubeshop At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__use-cases.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__use-cases.md index d557efe6..a2063321 100644 --- a/hack/assistant-setup/content/botkube.io__learn-main-topic__use-cases.md +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__use-cases.md @@ -8,4 +8,4 @@ Botkube is made by Kubeshop At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn.md b/hack/assistant-setup/content/botkube.io__learn.md index 60247a6d..b7f9e3b3 100644 --- a/hack/assistant-setup/content/botkube.io__learn.md +++ b/hack/assistant-setup/content/botkube.io__learn.md @@ -8,4 +8,4 @@ Botkube is made by Kubeshop At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn__ai-for-devops.md b/hack/assistant-setup/content/botkube.io__learn__ai-for-devops.md index 1a4088be..16ec42b9 100644 --- a/hack/assistant-setup/content/botkube.io__learn__ai-for-devops.md +++ b/hack/assistant-setup/content/botkube.io__learn__ai-for-devops.md @@ -3,18 +3,18 @@ Title: Botkube: Revolutionizing Kubernetes Troubleshooting with AI-Power URL Source: https://botkube.io/learn/ai-for-devops Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) +[![Image 1: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) AI for DevOps: How Botkube's Kubernetes AI Assistant Revolutionizes Troubleshooting ----------------------------------------------------------------------------------- -![Image 2: a blue phone with the word learn on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fdbe5e2b0c291bb5ec0536_Botkube%20BLOG%20Thumbnail%20(6).png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fdbe5e2b0c291bb5ec0536_Botkube%20BLOG%20Thumbnail%20(6).png) Last updated April 18, 2024 -![Image 3: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) Evan Witmer @@ -67,6 +67,74 @@ By integrating AI into Kubernetes operations, Botkube significantly enhances the ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) + +### Dig deeper: + +[![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +AI for DevOps: How Botkube's Kubernetes AI Assistant Revolutionizes Troubleshooting +----------------------------------------------------------------------------------- + +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fdbe5e2b0c291bb5ec0536_Botkube%20BLOG%20Thumbnail%20(6).png) + +Last updated + +April 18, 2024 + +![Image 7](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Table of Contents +----------------- + +* [What is Botkube?](#what-is-botkube--2) +* [How Botkube's AI Assistant Transforms DevOps](#how-botkube-s-ai-assistant-transforms-devops-2) +* [Real-World Use Cases](#real-world-use-cases-2) +* [Conclusion](#conclusion-2) + +#### Get started with Botkube Cloud + +DevOps teams are constantly seeking ways to streamline workflows, increase efficiency, and minimize downtime. Artificial intelligence (AI) is rapidly transforming the DevOps landscape, offering innovative solutions to common challenges. Botkube stands out as a pioneer in this domain, leveraging a powerful Kubernetes AI assistant to optimize DevOps processes. + +**What is Botkube?** +-------------------- + +Botkube is a collaborative Kubernetes troubleshooting platform that brings essential notifications, context-rich information, and troubleshooting tools directly into your existing communication channels (Slack, Microsoft Teams, Mattermost, etc.). Powered by AI and automation, Botkube empowers DevOps teams to quickly address common problems, streamline incident response, and enhance overall Kubernetes operations. + +**How Botkube's AI Assistant Transforms DevOps** +------------------------------------------------ + +Botkube's Kubernetes AI assistant acts as a virtual member of your DevOps team, offering the following core benefits: + +* **Direct Kubernetes Interaction:** Botkube provides seamless communication with your Kubernetes clusters. DevOps engineers can execute essential kubectl commands directly from their familiar chat platforms, eliminating the need to switch between tools for basic troubleshooting. +* **AI-Powered Insights:** The AI assistant for DevOps engineers gathers and analyzes data from your Kubernetes clusters, such as information regarding pods, namespaces, logs, and events. This centralized access to crucial information, coupled with AI analysis, speeds up troubleshooting and helps identify the root causes of issues. +* **Proactive Monitoring:** Botkube continuously monitors your Kubernetes environment, sending real-time alerts to your communication channels for any detected anomalies or potential problems. This proactive approach allows your team to address issues before they escalate into major incidents, ensuring maximum uptime. +* **Collaboration and Knowledge Sharing:** Botkube fosters collaboration by centralizing Kubernetes alerts, data, and conversations within shared communication channels. This encourages knowledge sharing, reduces resolution time, and creates a comprehensive repository of solutions for future reference. + +**Real-World Use Cases** +------------------------ + +![Image 8: Using AI to solve DevOps Kubernetes problems](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) + +Maria Using AI for DevOps to solve a Kubernetes Problem + +1. **Faster Incident Response:** When an alert is triggered, Botkube's AI assistant can quickly diagnose common issues through its access to real-time Kubernetes data. This information can be shared directly with the DevOps team, leading to faster problem resolution. +2. **Troubleshooting Assistance:** DevOps engineers can leverage the AI assistant to ask diagnostic questions, such as "What is the status of my pods?" or "Are there any errors in the logs?". Botkube provides insightful answers using natural language processing, streamlining the troubleshooting process. +3. **Self-Service for Developers:** Botkube empowers developers with controlled access to Kubectl commands and cluster resources. This self-service model reduces the burden on DevOps teams for routine tasks and enables developers to troubleshoot problems in their own environments. + +**Conclusion** +-------------- + +By integrating AI into Kubernetes operations, Botkube significantly enhances the DevOps or [SRE experience](https://botkube.io/blog/level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant). Its ability to execute Kubectl commands, proactively monitor clusters, and provide intelligent insights enables teams to collaborate more effectively, resolve issues faster, and ultimately improve the reliability of their Kubernetes applications. If you're looking to harness the power of AI for your DevOps workflows, Botkube is a solution worth exploring. + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) ### Dig deeper: diff --git a/hack/assistant-setup/content/botkube.io__learn__ai-tools-for-kubernetes.md b/hack/assistant-setup/content/botkube.io__learn__ai-tools-for-kubernetes.md index 7c50aa5e..1af2cba7 100644 --- a/hack/assistant-setup/content/botkube.io__learn__ai-tools-for-kubernetes.md +++ b/hack/assistant-setup/content/botkube.io__learn__ai-tools-for-kubernetes.md @@ -50,4 +50,4 @@ AI is rapidly transforming Kubernetes management. By streamlining tasks and proa ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__chatops.md b/hack/assistant-setup/content/botkube.io__learn__chatops.md index b433755b..d6c009f3 100644 --- a/hack/assistant-setup/content/botkube.io__learn__chatops.md +++ b/hack/assistant-setup/content/botkube.io__learn__chatops.md @@ -30,4 +30,4 @@ Instead of manually scaling applications up or down based on demand or performan Instead of manually monitoring applications for health status, performance metrics, logs, events, etc., using CLI commands or configuration files (YAML), automation tools can monitor applications automatically using dashboard tools or alerting systems. This can improve the visibility and troubleshooting of the applications. -One way to make Kubernetes activities easier to automate is to use tools that allow users to create aliases or short phrases to reference long CLI commands. Maria put together a [tutorial](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) covering how set up aliases using a ChatOps automation tool like [Botkube](http://botkube.io/?utm_source=learn). +One way to make Kubernetes activities easier to automate is to use tools that allow users to create aliases or short phrases to reference long CLI commands. Maria put together a [tutorial](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) covering how set up aliases using a ChatOps automation tool like [Botkube](https://botkube.io/?utm_source=learn). diff --git a/hack/assistant-setup/content/botkube.io__learn__createcontainererror.md b/hack/assistant-setup/content/botkube.io__learn__createcontainererror.md index 2d7e5ec2..04c279f2 100644 --- a/hack/assistant-setup/content/botkube.io__learn__createcontainererror.md +++ b/hack/assistant-setup/content/botkube.io__learn__createcontainererror.md @@ -55,4 +55,56 @@ To diagnose and resolve a CreateContainerError, follow these steps: Retrieve the description of the pod by running the following command and save to a text file: -_kubectl describe pod \[pod\_name\] /tmp/troubleshooting\_describe\_pod.txt_ #### STEP 2: Look into Pod Events Output Search through the text file that you just created for any of the below messages in your Pod Events: _Is waiting to start_ _Starting container process caused_ _Container name \[cont\_name\] is already in use by container_ _No command specified_ #### STEP 3: Troubleshoot the Error When error is **_"is waiting to start_**", it means that an object mounted by the container could not be found or is missing. * \*Be certain it is not related to ConfigMaps or Secrets, as mentioned earlier.\* * Examine the pod's configuration and verify that all items assigned to it or the container are accessible in the same workspace. If not, either generate them or modify the manifest to point to an existing object. When error is **_"starting container process caused"_**, * Observe words following the "container process caused" message to see the error that occurred when the container was started. * Find the error. Then modify the image or the container start command to fix. When the error is **_"container name \[cont\_name\] is already in use by container"_**, it means that the container runtime did not delete a previous container created with a similar name. * To fix this error, sign in with root access on the node and open the kubelet log located at /var/log/kubelet.log. * Find the issue in the kubelet log and solve it by reinstalling the container runtime or the kubelet. Sometimes this requires users to re-register the node with the cluster. When error is **_"no command specified",_** it means that the image configuration and pod configuration did not specify which command to run to start the container. * To fix this error, edit the image and pod configuration and add a valid command to start the container. Please note that these steps will only resolve the most common causes of CreateContainerError. If one of these quick fixes does not work, a more complex diagnosis procedure may be necessary to identify the contributing factors in the Kubernetes environment and resolve the problem. Introducing Botkube for Effortless Kubernetes Error Troubleshooting ------------------------------------------------------------------- Kubernetes troubleshooting can be a daunting task without the right tools. Even with best practices in place, errors can still occur, leading to stressful and time-consuming investigations. That's why we developed Botkube – a tool that simplifies the process of Kubernetes troubleshooting for DevOps teams. Botkube provides the following features to streamline the troubleshooting process: Change Intelligence: Every error in Kubernetes is a result of a change. With Botkube, you can quickly identify who made what changes and when they made them. Effortless Notifications: Botkube integrates seamlessly with existing communication channels like Slack, providing real-time notifications so you can quickly resolve issues as they occur. Comprehensive Visibility: Botkube offers a complete timeline of all code and configuration changes, deployments, alerts, code diffs, pod logs, and more. All this information is presented in a single pane of glass, with simple drill-down options for further investigation. Insight into Service Dependencies: Botkube makes it easy to visualize cross-service changes and the ripple effects of such changes across your entire system. If you're interested in exploring Botkube and its features, sign up for a [free trial using this link](https://docs.botkube.io/installation/). With Botkube, you'll never have to waste precious time and resources looking for needles in haystacks again. +_kubectl describe pod \[pod\_name\] /tmp/troubleshooting\_describe\_pod.txt_ + +#### STEP 2: Look into Pod Events Output + +Search through the text file that you just created for any of the below messages in your Pod Events: + +_Is waiting to start_ + +_Starting container process caused_ + +_Container name \[cont\_name\] is already in use by container_ + +_No command specified_ + +#### STEP 3: Troubleshoot the Error + +When error is **_"is waiting to start_**", it means that an object mounted by the container could not be found or is missing. + +* \*Be certain it is not related to ConfigMaps or Secrets, as mentioned earlier.\* +* Examine the pod's configuration and verify that all items assigned to it or the container are accessible in the same workspace. If not, either generate them or modify the manifest to point to an existing object. + +When error is **_"starting container process caused"_**, + +* Observe words following the "container process caused" message to see the error that occurred when the container was started. +* Find the error. Then modify the image or the container start command to fix. + +When the error is **_"container name \[cont\_name\] is already in use by container"_**, it means that the container runtime did not delete a previous container created with a similar name. + +* To fix this error, sign in with root access on the node and open the kubelet log located at /var/log/kubelet.log. +* Find the issue in the kubelet log and solve it by reinstalling the container runtime or the kubelet. Sometimes this requires users to re-register the node with the cluster. + +When error is **_"no command specified",_** it means that the image configuration and pod configuration did not specify which command to run to start the container. + +* To fix this error, edit the image and pod configuration and add a valid command to start the container. + +Please note that these steps will only resolve the most common causes of CreateContainerError. If one of these quick fixes does not work, a more complex diagnosis procedure may be necessary to identify the contributing factors in the Kubernetes environment and resolve the problem. + +Introducing Botkube for Effortless Kubernetes Error Troubleshooting +------------------------------------------------------------------- + +Kubernetes troubleshooting can be a daunting task without the right tools. Even with best practices in place, errors can still occur, leading to stressful and time-consuming investigations. That's why we developed Botkube – a tool that simplifies the process of Kubernetes troubleshooting for DevOps teams. + +Botkube provides the following features to streamline the troubleshooting process: + +Change Intelligence: Every error in Kubernetes is a result of a change. With Botkube, you can quickly identify who made what changes and when they made them. + +Effortless Notifications: Botkube integrates seamlessly with existing communication channels like Slack, providing real-time notifications so you can quickly resolve issues as they occur. + +Comprehensive Visibility: Botkube offers a complete timeline of all code and configuration changes, deployments, alerts, code diffs, pod logs, and more. All this information is presented in a single pane of glass, with simple drill-down options for further investigation. + +Insight into Service Dependencies: Botkube makes it easy to visualize cross-service changes and the ripple effects of such changes across your entire system. + +If you're interested in exploring Botkube and its features, sign up for a [free trial using this link](https://docs.botkube.io/installation/). With Botkube, you'll never have to waste precious time and resources looking for needles in haystacks again. diff --git a/hack/assistant-setup/content/botkube.io__learn__demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes.md b/hack/assistant-setup/content/botkube.io__learn__demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes.md index 9731acdf..cc8148d5 100644 --- a/hack/assistant-setup/content/botkube.io__learn__demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes.md +++ b/hack/assistant-setup/content/botkube.io__learn__demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes.md @@ -64,4 +64,4 @@ If you found our above article on kubectl drain, we invite you to check out our ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__failed-to-push-some-refs-to.md b/hack/assistant-setup/content/botkube.io__learn__failed-to-push-some-refs-to.md index 1eb1a68c..1cdd21b8 100644 --- a/hack/assistant-setup/content/botkube.io__learn__failed-to-push-some-refs-to.md +++ b/hack/assistant-setup/content/botkube.io__learn__failed-to-push-some-refs-to.md @@ -3,12 +3,12 @@ Title: Git Push Error: "Failed to Push Some Refs To" - Fix It Now URL Source: https://botkube.io/learn/failed-to-push-some-refs-to Markdown Content: -In the realm of Git, developers often encounter the enigmatic `Failed to Push Some Refs to error.` This error arises when an attempt is made to push committed code to a remote Git repository, but the local repository is out of sync with the remote's updated changes. +In the realm of Git, developers often encounter the enigmatic Failed to Push Some Refs to error. This error arises when an attempt is made to push committed code to a remote Git repository, but the local repository is out of sync with the remote's updated changes. Unveiling the Culprits ---------------------- -Several factors can trigger the `Failed to Push Some Refs to` error: +Several factors can trigger the Failed to Push Some Refs to error: * **Uncommitted Changes:** Pushing uncommitted changes can lead to this error. Ensure changes are committed before attempting to push. * **Git Pre-Push Hook Issues:** Problematic Git pre-push hooks can hinder the push operation. Verify that pre-push hooks are functioning correctly. @@ -20,33 +20,37 @@ Resolving the Error: A Step-by-Step Guide Updating the Local Repository: -`git pull origin` +git pull origin This command fetches the latest changes from the remote repository and integrates them into your local repository, ensuring synchronization. Rebasing: -`git push --rebase origin` +git push --rebase origin Rebasing rewrites your local branch's history to align with the remote repository, eliminating conflicts and allowing you to push your changes. Stashing Local Changes: -`git stash save git pull origin git stash pop` +git stash save + +git pull origin + +git stash pop Stashing saves your local changes temporarily, allowing you to update the local repository without losing your work. The Force Flag: A Double-Edged Sword ------------------------------------ -While the `--force` flag can override the error, it's generally discouraged due to potential inconsistencies. Instead, use --rebase to maintain repository integrity. +While the --force flag can override the error, it's generally discouraged due to potential inconsistencies. Instead, use --rebase to maintain repository integrity. Preventing the Error: Proactive Measures ---------------------------------------- * Feature Branches: Utilize feature branches for individual contributions, merging them into a master branch to prevent conflicts. * Updating Before Pushing: Before pushing, always update your local repository using git pull to stay in sync with the remote. -* Rebase for Error Resolution: When encountering the error, employ `--rebase` to resolve the issue without introducing conflicts. +* Rebase for Error Resolution: When encountering the error, employ --rebase to resolve the issue without introducing conflicts. By following these guidelines, you can effectively prevent and resolve the "Failed to Push Some Refs to" error, ensuring a smooth and harmonious Git experience. diff --git a/hack/assistant-setup/content/botkube.io__learn__fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes.md b/hack/assistant-setup/content/botkube.io__learn__fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes.md index f4b6991d..80394243 100644 --- a/hack/assistant-setup/content/botkube.io__learn__fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes.md +++ b/hack/assistant-setup/content/botkube.io__learn__fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes.md @@ -3,17 +3,34 @@ Title: Unable to Get Local Issuer Certificate Solved! URL Source: https://botkube.io/learn/fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes Markdown Content: +Fix "SSL Certificate Problem: Unable to Get Local Issuer Certificate" Error +--------------------------------------------------------------------------- + +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa18185ef2ff8b0ce59fce_LEARN_TN_Errors%20(4).png) + +![Image 2](https://assets-global.website-files.com/plugins/Basic/assets/placeholder.60f9b1840c.svg) + +Table of Contents +----------------- + +* [What is the "ssl certificate problem unable to get local issuer certificate" error?](#what-is-the-ssl-certificate-problem-unable-to-get-local-issuer-certificate-error--2) +* [What causes the "ssl certificate problem unable to get local issuer certificate" error?](#what-causes-the-ssl-certificate-problem-unable-to-get-local-issuer-certificate-error--2) +* [How can you fix the "ssl certificate problem unable to get local issuer certificate" errors?](#how-can-you-fix-the-ssl-certificate-problem-unable-to-get-local-issuer-certificate-errors--2) +* [How to prevent "ssl certificate problem unable to get local issuer certificate" errors?](#how-to-prevent-ssl-certificate-problem-unable-to-get-local-issuer-certificate-errors--2) + +#### Get started with Botkube Cloud + What is the "ssl certificate problem unable to get local issuer certificate" error? ----------------------------------------------------------------------------------- -The `ssl certificate problem unable to get local issuer certificate` error is a security error that occurs when a Kubernetes cluster is configured to use a self-signed certificate. A self-signed certificate is a certificate that is not signed by a trusted certificate authority. This means that the certificate cannot be verified by the client, which prevents the client from establishing a secure connection to the server. +The ssl certificate problem unable to get local issuer certificate error is a security error that occurs when a Kubernetes cluster is configured to use a self-signed certificate. A self-signed certificate is a certificate that is not signed by a trusted certificate authority. This means that the certificate cannot be verified by the client, which prevents the client from establishing a secure connection to the server. This error sometimes can be shortened to "ssl git error". It is the Git Error that plagues local clusters on setup. It is hard to get self service security certificates perfect, but hopefully this page can be a good starting point. While security certificates are not unique to K8s, it is a common error that DevOps engineers face when deploying Kubernetes. What causes the "ssl certificate problem unable to get local issuer certificate" error? --------------------------------------------------------------------------------------- -The `ssl certificate problem unable to get local issuer certificate` error is caused by the misconfiguration of the SSL certificate on the Kubernetes cluster. When a client attempts to connect to the cluster, the client will not be able to verify the certificate because it is not signed by a trusted certificate authority. This will result in the error message `ssl certificate problem unable to get local issuer certificate`. +The ssl certificate problem unable to get local issuer certificate error is caused by the misconfiguration of the SSL certificate on the Kubernetes cluster. When a client attempts to connect to the cluster, the client will not be able to verify the certificate because it is not signed by a trusted certificate authority. This will result in the error message ssl certificate problem unable to get local issuer certificate. **\*Quick Tip:** Sometimes detecting the error message is the hardest part, most of the time requiring sifting through cluster logs using the command line interface. We created Botkube to assist with this labor intensive process. Having Botkube in a cluster will give developers two advantages to troubleshooting this error: @@ -25,7 +42,7 @@ See what else [Botkube Cloud can do to help errors and alerts.](https://botkube. How can you fix the "ssl certificate problem unable to get local issuer certificate" errors? -------------------------------------------------------------------------------------------- -There are two ways to fix the `ssl certificate problem unable to get local issuer certificate` errors: +There are two ways to fix the ssl certificate problem unable to get local issuer certificate errors: 1. You can add the self-signed certificate to the trusted certificate store on the client. This will allow the client to verify the certificate and establish a secure connection to the cluster. 2. You can use a certificate signed by a trusted certificate authority. This will ensure that the certificate can be verified by the client and that the connection to the cluster is secure. @@ -33,11 +50,11 @@ There are two ways to fix the `ssl certificate problem unable to get local issue How to prevent "ssl certificate problem unable to get local issuer certificate" errors? --------------------------------------------------------------------------------------- -To prevent `ssl certificate problem unable to get local issuer certificate` errors, you should use a certificate signed by a trusted certificate authority. You can also add the self-signed certificate to the trusted certificate store on the client. +To prevent ssl certificate problem unable to get local issuer certificate errors, you should use a certificate signed by a trusted certificate authority. You can also add the self-signed certificate to the trusted certificate store on the client. Here are the steps on how to add a self-signed certificate to the trusted certificate store on a Linux machine: -1. Open the file `/etc/ssl/certs/ca-certificates.crt`. +1. Open the file /etc/ssl/certs/ca-certificates.crt. 2. Add the self-signed certificate to the file. 3. Save the file. 4. Restart the web browser. @@ -48,6 +65,10 @@ Here are the steps on how to install a certificate signed by a trusted certifica 2. Import the certificate into the trusted certificate store on the client. 3. Restart the web browser. -I hope this article helps you fix the `ssl certificate problem unable to get local issuer certificate` error in Kubernetes. Be sure to check out the other [K8s error articles](https://botkube.io/learn-main-topic/errors) that try to cover other common errors that developers run into while orchestrating Kubernetes. +I hope this article helps you fix the ssl certificate problem unable to get local issuer certificate error in Kubernetes. Be sure to check out the other [K8s error articles](https://botkube.io/learn-main-topic/errors) that try to cover other common errors that developers run into while orchestrating Kubernetes. + +One final tip, **do not be afraid to search for tooling that helps with troubleshooting of common errors**. Botkube's AI assistant is a great example of a tool that helps with K8s specific troubleshooting tasks. [Try out Botkube for free](https://app.botkube.io/) to get started with collaborative troubleshooting directly in your communications platform. + +### About Botkube -One final tip, **do not be afraid to search for tooling that helps with troubleshooting of common errors**. Botkube's AI assistant is a great example of a tool that helps with K8s specific troubleshooting tasks. [Try out Botkube for free](http://app.botkube.io/) to get started with collaborative troubleshooting directly in your communications platform. +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__future-of-kubernetes-management.md b/hack/assistant-setup/content/botkube.io__learn__future-of-kubernetes-management.md new file mode 100644 index 00000000..29e7255a --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__future-of-kubernetes-management.md @@ -0,0 +1,38 @@ +Title: Bots as Kubernetes Team Members: The Future of Collaboration + +URL Source: https://botkube.io/learn/future-of-kubernetes-management + +Markdown Content: +Kubernetes has revolutionized application deployment and management, but its complexity can introduce new operational challenges. Collaboration between developers and DevOps teams becomes paramount for rapid troubleshooting and maintaining the agility Kubernetes promises. The aim for many teams is a developer self-service model, where developers have controlled, secure access to basic cluster interactions, freeing up DevOps for more strategic work. + +**Why Collaboration is Key to Kubernetes Success** +-------------------------------------------------- + +* **Shared understanding:** Kubernetes involves many moving parts. Cross-team visibility into its state creates a common language, breaking down silos and reducing the "throw it over the wall" mentality. +* **Faster issue resolution:** When issues arise, having both developers (who understand the application intimately) and the DevOps team (who have infrastructure expertise) in the same collaborative space speeds up debugging. +* **Empowering developers:** Simple actions like restarting pods, checking logs, or tweaking configurations shouldn't bottleneck on DevOps. A self-service approach lets developers address basic issues while DevOps focuses on deeper analysis and infrastructure optimization. + +**Botkube: Collaboration at the Core of Kubernetes Management** +--------------------------------------------------------------- + +Botkube addresses this fundamental need for collaboration. It has evolved to deliver far more than simple event notifications: + +* **From Notifications to Conversations:** Botkube began by channeling [Kubernetes alerts](https://botkube.io/learn/turning-kubernetes-k8s-alerts-into-k8s-notifications) into team communication platforms like Slack or Discord. This centralized alerts, transforming a stream of technical information into a collaborative troubleshooting space. +* **Democratizing Diagnostics:** The ability to pull logs on demand with a single click gave developers the power to investigate without waiting on DevOps. Botkube's advanced filtering even helps surface the most relevant parts of lengthy logs, accelerating problem identification. +* **AI-Powered Assistance:** Botkube's AI troubleshooting bot goes further. Using natural language, team members can ask _what_ an alert means and get suggestions on where to start. The AI can even run commands to address common problems, reducing the need for terminal access. + +**Kubernetes Collaboration Tools: The Road Ahead** +-------------------------------------------------- + +Botkube's vision extends beyond in-chat troubleshooting. Here's what's coming: + +* **Ticketing Integrations:** For issues needing wider attention, Botkube will soon integrate with systems like PagerDuty or ServiceNow. This will allow seamless escalation of Kubernetes problems into your team's existing workflow, ensuring nothing falls through the cracks. +* **GitOps Enhanced:** Our existing Git integration will continue to evolve. This will aid in tracking changes, enforcing best practices, and seamlessly incorporating Kubernetes management into your overall development processes. + +By treating bots as team members, Botkube fosters a shared responsibility model for Kubernetes. This translates to faster problem resolution, greater developer autonomy, and a DevOps team freed to focus on proactive improvements instead of constant firefighting. + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__helm-charts.md b/hack/assistant-setup/content/botkube.io__learn__helm-charts.md index 1620a6c4..d2b023f0 100644 --- a/hack/assistant-setup/content/botkube.io__learn__helm-charts.md +++ b/hack/assistant-setup/content/botkube.io__learn__helm-charts.md @@ -9,14 +9,14 @@ Helm charts are a popular way to package and deploy applications on Kubernetes c Helm charts are a way of packaging and deploying applications on Kubernetes clusters. They are composed of a set of templates that define the Kubernetes manifest files for the application and its dependencies. Helm charts also include metadata, such as the chart name, version, description, and dependencies. -Helm charts can be installed on a Kubernetes cluster using the `helm install` command, which creates a helm release. A Helm release is an instance of a chart running on a cluster. Each release has a unique name and can be managed by Helm commands, such as helm list, helm upgrade, helm uninstall, etc. +Helm charts can be installed on a Kubernetes cluster using the \`helm install\` command, which creates a helm release. A Helm release is an instance of a chart running on a cluster. Each release has a unique name and can be managed by Helm commands, such as helm list, helm upgrade, helm uninstall, etc. Helm charts can simplify the deployment and management of complex applications on Kubernetes, but they can also introduce some challenges and errors. In this article, we will discuss some common troubleshooting issues when deploying Helm charts to Kubernetes clusters and how to resolve them. **Helm Chart Troubleshooting: Failed with Error Message** --------------------------------------------------------- -One of the most common issues when deploying helm charts is that the `helm install` command fails with an error message. This can happen for various reasons, such as: +One of the most common issues when deploying helm charts is that the \`helm install\` command fails with an error message. This can happen for various reasons, such as: ### **Helm Chart Not Found** @@ -34,11 +34,11 @@ If there is an error in your chart, Helm will not be able to create the Kubernet ### **Insufficient Permissions** -If you do not have sufficient permissions to create Kubernetes resources, Helm will not be able to create them. You can check your permissions by running `kubectl auth can-i create `. +If you do not have sufficient permissions to create Kubernetes resources, Helm will not be able to create them. You can check your permissions by running \`kubectl auth can-i create \`. To troubleshoot these issues, you should first check the error message and see if it provides any clues about the cause of the failure. -You can also use the `--debug` flag to get more detailed information about the helm install process. At this point, Helm will show you all of the Kubernetes resources that it is creating. If there is an error, it will be displayed in the output. +You can also use the \`--debug\` flag to get more detailed information about the helm install process. At this point, Helm will show you all of the Kubernetes resources that it is creating. If there is an error, it will be displayed in the output. **The Easy Way: Botkube, Your Kubernetes Troubleshooting Assistant** -------------------------------------------------------------------- diff --git a/hack/assistant-setup/content/botkube.io__learn__how-botkube-makes-monitoring-kubernetes-easy.md b/hack/assistant-setup/content/botkube.io__learn__how-botkube-makes-monitoring-kubernetes-easy.md index 41f2f967..dab0228a 100644 --- a/hack/assistant-setup/content/botkube.io__learn__how-botkube-makes-monitoring-kubernetes-easy.md +++ b/hack/assistant-setup/content/botkube.io__learn__how-botkube-makes-monitoring-kubernetes-easy.md @@ -52,13 +52,12 @@ Botkube stands out as the ultimate Kubernetes monitoring tool, offering a seamle 1. **Easy Integration with Other Monitoring Tools:** Botkube simplifies the integration of additional monitoring tools like Prometheus into the Kubernetes environment. Users can effortlessly set up Prometheus alerts to trigger notifications directly to their preferred communication platforms, such as Slack, Teams, or Mattermost. By leveraging the default Kubernetes error alerts, Botkube ensures that users receive immediate notifications about any critical issues happening within their cluster, enabling swift responses to potential problems. This integration is the easiest way how to monitor Kubernetes pods with Prometheus. -![Image 3: Prometheus alerts are some of the most powerful in Kubernetes. Botkube allow users to Automate Prometheus for ease of Monitoring and Troubleshooting Kubernetes](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c80964041699a929ce392f_N2bfxPNt233ldjIRgZ4Jcfkvp5PTU-HVC_uDLJse5nZa5Vh1JrmJhVutT9zLV2GWCHXS6QA_kik0XbJqyfK9_JnuNvQZjKFeOHvkUQPIIl7p6uTYjpTFUUn69cPIM6MCSlONqsmuGauMHcDpo1XnJuE.png) +![Image 3: Prometheus alerts are some of the most powerful in Kubernetes. Botkube allow users to Automate Prometheus for ease of Monitoring and Troubleshooting Kubernetes ](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c80964041699a929ce392f_N2bfxPNt233ldjIRgZ4Jcfkvp5PTU-HVC_uDLJse5nZa5Vh1JrmJhVutT9zLV2GWCHXS6QA_kik0XbJqyfK9_JnuNvQZjKFeOHvkUQPIIl7p6uTYjpTFUUn69cPIM6MCSlONqsmuGauMHcDpo1XnJuE.png) -2. **Real-time Error Tracking and Troubleshooting:** Botkube provides an intuitive interface for monitoring and troubleshooting Kubernetes errors, all within the comfort of Slack or other supported platforms. Users can instantly view and comprehend the errors occurring in their cluster, allowing them to take prompt corrective actions without leaving their preferred communication channel. This real-time monitoring and response capability enhance cluster health and ensure smooth operation of applications. +2\. **Real-time Error Tracking and Troubleshooting:** Botkube provides an intuitive interface for monitoring and troubleshooting Kubernetes errors, all within the comfort of Slack or other supported platforms. Users can instantly view and comprehend the errors occurring in their cluster, allowing them to take prompt corrective actions without leaving their preferred communication channel. This real-time monitoring and response capability enhance cluster health and ensure smooth operation of applications. -3. **Seamless Team Collaboration:** Sharing Kubernetes monitoring insights with the team becomes effortless through Botkube's integration with popular communication platforms. Collaboration is streamlined as team members can view and discuss cluster health, errors, and responses collectively, fostering a collaborative DevOps environment for efficient incident management. - -4. **Flexible and Mobile Cluster Management:** With Botkube's integration with Slack App, Kubernetes users can manage their clusters on the go. Whether on vacation, at the beach, or anywhere with an internet connection, users can execute Kubectl commands directly from Slack, enabling quick actions and decision-making remotely. This flexibility ensures uninterrupted cluster management, regardless of physical location. +3\. **Seamless Team Collaboration:** Sharing Kubernetes monitoring insights with the team becomes effortless through Botkube's integration with popular communication platforms. Collaboration is streamlined as team members can view and discuss cluster health, errors, and responses collectively, fostering a collaborative DevOps environment for efficient incident management. +4\. **Flexible and Mobile Cluster Management:** With Botkube's integration with Slack App, Kubernetes users can manage their clusters on the go. Whether on vacation, at the beach, or anywhere with an internet connection, users can execute Kubectl commands directly from Slack, enabling quick actions and decision-making remotely. This flexibility ensures uninterrupted cluster management, regardless of physical location. In conclusion, Botkube's ChatOps features provide Kubernetes users with a comprehensive and accessible monitoring solution. The tool's ability to integrate with other monitoring tools, coupled with real-time error tracking and team collaboration, empowers users to efficiently manage their Kubernetes clusters, troubleshoot incidents, and respond proactively – all from within their preferred communication platforms. Whether in the office or on the go, Botkube's presence in Slack and other platforms enables users to stay connected with their clusters at all times, making it the ultimate Kubernetes monitoring companion for streamlined and efficient cluster management. diff --git a/hack/assistant-setup/content/botkube.io__learn__how-to-debug-crashloopbackoff.md b/hack/assistant-setup/content/botkube.io__learn__how-to-debug-crashloopbackoff.md index e15faef7..29f90443 100644 --- a/hack/assistant-setup/content/botkube.io__learn__how-to-debug-crashloopbackoff.md +++ b/hack/assistant-setup/content/botkube.io__learn__how-to-debug-crashloopbackoff.md @@ -12,7 +12,7 @@ CrashLoopBackOff occurs when a pod fails to start for some reason. Kubernetes wi If you're seeing the CrashLoopBackOff error, there are a few things you can do to troubleshoot the problem. First, check the pod's logs to see if there are any errors that might be causing the pod to fail. You can also use the command kubectl get pods to get more information about the pod, including its status and resources. -![Image 1: CrashLoopBackOff Pod error displayed in the terminal](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/648b4b0e5495d47e6f22704c_gDm4R9_hU-uv1PUi3Xy60rBEJTpyY3c74aMfdtOzxlZfPUj-r8zcknnwL4W7q3P-8yuS2OervhgjCV4-rsSvRm2YGOVW8syS0bv7ECu9xhNPEEhR0dA_TCdgXaoooPHvxYG1evWNKep-yVjvGO1_PEQ.png) +![Image 1: CrashLoopBackOff Pod error displayed in the terminal](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/648b4b0e5495d47e6f22704c_gDm4R9_hU-uv1PUi3Xy60rBEJTpyY3c74aMfdtOzxlZfPUj-r8zcknnwL4W7q3P-8yuS2OervhgjCV4-rsSvRm2YGOVW8syS0bv7ECu9xhNPEEhR0dA_TCdgXaoooPHvxYG1evWNKep-yVjvGO1_PEQ.png) _Image mentioned in a_ [_help forum on Microsoft's site_](https://learn.microsoft.com/en-us/answers/questions/328469/understanding-aks-crashloopbackoff) _about users switching to Kubernetes._ @@ -27,13 +27,13 @@ One common reason for the CrashLoopBackOff error is using an outdated version of To check your Docker version, run the following command: -`docker -v` +docker -v If your Docker version is outdated, you can update it by running the following command: -`sudo apt update` +sudo apt update -`sudo apt install docker-ce` +sudo apt install docker-ce \*It is a best practice to use the latest version of Docker to prevent deprecated commands and inconsistencies that can cause containers to start and fail repeatedly. @@ -47,7 +47,7 @@ K8s repeatedly starting and running out of memory would trigger the CrashLoopBac If you go to start a pod and receive the caused by post error, then it is most likely a third-party issue. Here is what the error what that would look like: -`send request failure caused by: Post` +send request failure caused by: Post This mostly has to do with how users set up their DNS for any third party services. This will also effect other environment variables as well. It is recommended you troubleshoot this issue with a shell, and check kube-dns config for issues. @@ -55,7 +55,7 @@ This mostly has to do with how users set up their DNS for any third party servic Another possible cause of the CrashLoopBackOff error is a port conflict. This can happen when two containers are trying to use the same port. To check for a port conflict, you can run the following command: -`netstat -an | grep LISTEN` +netstat -an | grep LISTEN This will show you a list of all ports that are currently in use. If you see a port that is in use by two different containers, this could be causing the CrashLoopBackOff error. @@ -66,9 +66,9 @@ This will show you a list of all ports that are currently in use. If you see a p So if you truly intend on troubleshooting these pods instead of having them stuck in a restart loop, Botkube would speed the process up. Installing Botkube Cloud into your cluster allows for 3 timesaving K8s troubleshooting benifits: -1. The Kubernetes alert of Crashloopbackoff error happening would come directly into Slack or your preferred chat platform. -2. Between Botkube's own troubleshooting suggestions and prompting our new [ChatGPT plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor), you receive suggestions of the best solution based on the error messages received. -3. Install executors, like our [Kubectl commands](https://docs.botkube.io/usage/executor/kubectl), to one click run troubleshooting commands solving CrashLoopBackOff error without leaving Slack or Teams. +1\. The Kubernetes alert of Crashloopbackoff error happening would come directly into Slack or your preferred chat platform. +2\. Between Botkube's own troubleshooting suggestions and prompting our new [ChatGPT plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor), you receive suggestions of the best solution based on the error messages received. +3\. Install executors, like our [Kubectl commands](https://docs.botkube.io/usage/executor/kubectl), to one click run troubleshooting commands solving CrashLoopBackOff error without leaving Slack or Teams. ![Image 2: Executing commands, like Kubectl logs, from within Slack using Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/648b4b0fb5c403880b1a8a41_1udAXWvJx61eJFClbpPH4tnHH0IZUa-Y3YmL8M-_EBh0V1HVAaUzBuk2-9Y7XCzSG1jJwPauQRaHFNg2yfLeEFZzVjxui4z1-lJkbuQdHSPZF7pa5CMsW6x4wWuWddxSoQr2DXbsFmOvhoKC3EhBxuE.png) @@ -76,7 +76,7 @@ So if you truly intend on troubleshooting these pods instead of having them stuc Without our K8s AI assistant to help with Kubernetes audits, everything gets a little more manual. We will provide some troubleshooting tips to help here, but our team highly recommends using our troubleshooting tool! It just speeds up the troubleshooting process and provides more capabilities for feature K8s use cases. -**See if running** `kubectl describe pod [name]` **displays one of the following error messages:** +**See if running** kubectl describe pod \[name\] **displays one of the following error messages:** 1. Liveness probe failed 2. Back-off restarting failed container @@ -85,13 +85,13 @@ These messages indicate that you are experiencing a temporary resource overload. **If the error messages do not or no longer appear, you will need to check the pod logs.** -To check a pods logs simply run the `kubectl logs --previous --tail 20`command and download the output. Now is where the true investigating work comes into Kubernetes. If it is not immediately obvious with the first 20 lines of logs, the command will have to be adjusted until an error log of value is found. +To check a pods logs simply run the kubectl logs --previous --tail 20command and download the output. Now is where the true investigating work comes into Kubernetes. If it is not immediately obvious with the first 20 lines of logs, the command will have to be adjusted until an error log of value is found. You are looking for OOMKilled logs or disconnect logs, something that would have caused the pod to fail/require restart. Our team would like to mention our cloud product here again as it takes the manual searching out of Kubernetes error logging. **One last log check, this time from the pod deployment.** -At this point you have checked the last 20 lines, and tried to find a back-off restarting failed error. If neither of those show a solution, you will have to pull deployment logs. These can be easily pulled into a file with the `kubectl logs -f deploy/ -n` command. +At this point you have checked the last 20 lines, and tried to find a back-off restarting failed error. If neither of those show a solution, you will have to pull deployment logs. These can be easily pulled into a file with the kubectl logs -f deploy/ -n command. These deployment logs may show other issues from within the cluster as well. Log for the file paths of your pod and everything that is being deployed there. Look for any error with deploying messages for numbers or names. Now search that code or name of the issue and try to fix the deployment issues. diff --git a/hack/assistant-setup/content/botkube.io__learn__how-to-fix-fatal-remote-origin-already-exists-git-error.md b/hack/assistant-setup/content/botkube.io__learn__how-to-fix-fatal-remote-origin-already-exists-git-error.md index 64f881f0..ed3afe8e 100644 --- a/hack/assistant-setup/content/botkube.io__learn__how-to-fix-fatal-remote-origin-already-exists-git-error.md +++ b/hack/assistant-setup/content/botkube.io__learn__how-to-fix-fatal-remote-origin-already-exists-git-error.md @@ -12,11 +12,11 @@ Why does the "**Remote Origin Already Exists" Error Happen?** Imagine you're following an online Git tutorial, and everything has been going smoothly. However, at a certain point, you encounter a command that resembles the following: -`git remote add origin /.git` +git remote add origin /.git To your dismay, executing this command leads to the dreaded error message: -`fatal: remote origin already exists.` +fatal: remote origin already exists. This error message may appear perplexing, but it's relatively straightforward to comprehend. Unlike centralized version control systems (VCSs), Git operates without a central server. Instead, Git employs what we refer to as "remote repositories" or simply "remotes." These remotes represent repositories with which you may have read and/or write access. They are typically located on machines other than your own and are accessible via SSH or HTTP. Interestingly, even though they are named "remotes," they can exist on your local machine, which might sound counterintuitive. @@ -24,17 +24,17 @@ Every remote has a unique name to distinguish it, and within a single repository To verify whether a remote called "origin" already exists in your repository, you can simply execute the following command: -`git remote` +git remote This will prompt Git to display a list of all existing remotes for the current repository. If you desire more comprehensive information, you can use the verbose parameter with the remote command like this: -`git remote -v` +git remote -v This will provide not only the names of each remote but also their associated URLs. Worth noting, the error message might not always contain the term "origin." For instance, if you attempt to add a remote named "remote1," and a remote with that name already exists, the error message would be: -`fatal: remote remote1 already exists.` +fatal: remote remote1 already exists. Similarly, just as the default branch in Git is traditionally called "controller" (although this could change in the future), the default remote is named "origin." However, you can freely choose any name for your remotes, provided it complies with the legal naming conventions in Git. So, feel free to explore and experiment with remotes to enhance your Git experience! @@ -56,7 +56,7 @@ Suppose you encounter the error due to an existing remote named "origin" that no * Create a new repository online using GitHub, GitLab, or your preferred platform. * In your local repository, remove the existing "origin" remote: -`git remote remove origin` + git remote remove origin * Add the new online repository as the correct "origin" remote. * Push your code to the new "origin." @@ -65,7 +65,7 @@ Suppose you encounter the error due to an existing remote named "origin" that no A faster alternative to removing and re-adding the remote is updating the URL of the existing "origin" remote: -`git remote set-url origin ` +git remote set-url origin Remember, "origin" is just a name for the remote, and you can use any suitable name. @@ -73,11 +73,11 @@ Remember, "origin" is just a name for the remote, and you can use any suitable n When you need to keep the old "origin" remote while adding a new one, follow this simple approach: -git remote rename origin +git remote rename origin For example, to rename your "origin" remote to "backup," execute: -`git remote rename origin backup` +git remote rename origin backup After renaming, you can proceed to add the new "origin" without encountering the error. @@ -85,7 +85,7 @@ After renaming, you can proceed to add the new "origin" without encountering the Sometimes, the error may arise if you unknowingly executed the "add remote" command in a previous step. To confirm if this is the case, use the Git remote command with the verbose option: -`git remote -v` +git remote -v This will display a list of existing remotes along with their associated URLs. If the "origin" remote already points to the URL provided in the tutorial, your repository is ready to go, and no further action is required. diff --git a/hack/assistant-setup/content/botkube.io__learn__kubectl-cheat-sheet.md b/hack/assistant-setup/content/botkube.io__learn__kubectl-cheat-sheet.md index 8beff70c..6151b686 100644 --- a/hack/assistant-setup/content/botkube.io__learn__kubectl-cheat-sheet.md +++ b/hack/assistant-setup/content/botkube.io__learn__kubectl-cheat-sheet.md @@ -134,7 +134,7 @@ Firstly, Botkube enables users to run `kubectl` commands directly from Slack or 2. **Get Kubectl help (Even Chatgpt Kubectl Help)** -As seen in the image below, Botkube even gives an option to get kubectl help directly from Slack. Our AI assistant will bring up helpful Kubectl commands and describe a little what they do. This ability combined with the new [Kubernetes Doctor Plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor), that allows users to further query ChatGPT about the correct Kubectl command to run, should make anyone a Kubectl expert quick! +As seen in the image below, Botkube even gives an option to get kubectl help directly from Slack. Our AI assistant will bring up helpful Kubectl commands and describe a little what they do. The help button in Slack combined with the new [Botkube AI Assistant](https://botkube.io/blog/ai-for-kubernetes-operations) , that allows users to further query AI about the correct Kubectl command to run, should make anyone a Kubectl expert quick! ![Image 4: Kubectl commands running in a slack channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d154cb0b2e6541c7bf6681_tJUUtb_nGsLwC-FoHmfUBedMJRKPEdswkO5vIxsKpimjVmU-FGIIoL3vVw29Qf2WXtC6524Js6Id8RWfMkg_rkdUcmCjbQnLgfoZIlJcOroO24iy6sCWlCyYKl3kVhcDP9LvDK6Pm_ZasxgaTU2K5K0.png) diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-errors.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-errors.md index 023a0c4e..c82d3079 100644 --- a/hack/assistant-setup/content/botkube.io__learn__kubernetes-errors.md +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-errors.md @@ -5,7 +5,7 @@ URL Source: https://botkube.io/learn/kubernetes-errors Markdown Content: Navigating the intricacies of Kubernetes often involves grappling with errors that can impede deployment and performance. Botkube presents a cutting-edge solution by offering an AI-powered ChatOps tool for Kubernetes troubleshooting. With real-time insights and proactive alerts, Botkube assists in identifying and resolving errors swiftly. -![Image 1: debugging - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/66052475a9b6c818366145a1_Botkube-is-the-Kubernetes-Debugging-%26-Troubleshooting-Champ.png) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/66052475a9b6c818366145a1_Botkube-is-the-Kubernetes-Debugging-%26-Troubleshooting-Champ.png) Botkube is the Kubernetes Debugging & Troubleshooting Champ! @@ -20,4 +20,4 @@ In a nutshell, Botkube not only acts as an invaluable AI companion for troublesh ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-rollbacks-a-guide.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-rollbacks-a-guide.md index e27b5939..640d81d4 100644 --- a/hack/assistant-setup/content/botkube.io__learn__kubernetes-rollbacks-a-guide.md +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-rollbacks-a-guide.md @@ -29,9 +29,9 @@ Performing Helm Chart Rollbacks To perform a Helm chart rollback, you typically follow these steps: 1. List the available Helm releases to identify the release you want to rollback to using the helm list command. -2. `helm list` +2. helm list 3. Use the \`helm rollback\` command to perform the rollback, specifying the release name and the revision to which you want to revert. -4. `helm rollback` +4. helm rollback Maintaining a proper history of Helm releases is essential for successful rollbacks. Helm automatically records every release, allowing you to easily identify the desired revision. @@ -82,15 +82,15 @@ While Helm and Flux are powerful tools for managing rollbacks, there might be si The kubectl rollback process is a manual manual approach compared to Helm and Flux, but it provides fine-grained control over the rollback of individual Kubernetes resources. Here's a general overview of how a kubectl rollback works: 1. Inspect Resource History: First, use kubectl to inspect the history of the specific Kubernetes resource you want to rollback. You can do this by running a command like: -2. `kubectl rollout history deployment/` +2. kubectl rollout history deployment/ 3. This command shows you the revisions and changes made to the resource over time. 4. Perform Rollback: Once you identify the desired revision to which you want to roll back, you can use kubectl to execute the rollback: -5. `kubectl rollout undo deployment/ --to-revision=` +5. kubectl rollout undo deployment/ --to-revision= 6. This command effectively rolls back the deployment to the specified revision. Kubectl rollbacks are particularly useful when you need to roll back specific resources within a deployment or make precise adjustments to your cluster. -![Image 2: a screen shot of a web page showing a number of options](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/653aaa45a423d53622d283b7_kubectl_rollback.gif) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/653aaa45a423d53622d283b7_kubectl_rollback.gif) Kubectl Rollback Command being run from Shared Slack Channel diff --git a/hack/assistant-setup/content/botkube.io__learn__making-slack-talk-kubernetes-slack-powered-chatops-for-k8s.md b/hack/assistant-setup/content/botkube.io__learn__making-slack-talk-kubernetes-slack-powered-chatops-for-k8s.md index 38a2f861..93834e57 100644 --- a/hack/assistant-setup/content/botkube.io__learn__making-slack-talk-kubernetes-slack-powered-chatops-for-k8s.md +++ b/hack/assistant-setup/content/botkube.io__learn__making-slack-talk-kubernetes-slack-powered-chatops-for-k8s.md @@ -13,6 +13,9 @@ That's where ChatOps comes in. ChatOps is a collaboration model that brings toge In this article, we'll explore how Botkube makes Slack talk Kubernetes through ChatOps. We will also explore how it can benefit your team's Kubernetes deployment and monitoring processes. The ultimate goal should be a developer self service portal for Slack ChatOps. +**Why Use Slack ChatOps for Kubernetes?** +----------------------------------------- + ### **Streamlined Communication and Collaboration** One of the main benefits of using ChatOps for K8s is the streamlined communication and collaboration it offers. With ChatOps, all team members can access and interact with Kubernetes through a single chat interface, eliminating the need for multiple tools and platforms. diff --git a/hack/assistant-setup/content/botkube.io__learn__real-time-event-log-in-slack.md b/hack/assistant-setup/content/botkube.io__learn__real-time-event-log-in-slack.md index 6b28046e..8278d7cc 100644 --- a/hack/assistant-setup/content/botkube.io__learn__real-time-event-log-in-slack.md +++ b/hack/assistant-setup/content/botkube.io__learn__real-time-event-log-in-slack.md @@ -3,35 +3,6 @@ Title: Streamline Kubernetes Monitoring: Create Event Logs in Slack URL Source: https://botkube.io/learn/real-time-event-log-in-slack Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) - -Revolutionize Kubernetes Monitoring: Create a Real-Time Event Log in Slack with Botkube ---------------------------------------------------------------------------------------- - -![Image 2: botkube monitoring kss - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa098d77182cff46cde451_LEARN_TN_Monitoring%20(1).png) - -Last updated - -April 22, 2024 - -![Image 3: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) - -Evan Witmer - -Growth Lead - -Botkube - -Table of Contents ------------------ - -* [Why a Slack Event Log?](#why-a-slack-event-log-) -* [Setting Up Your Slack Kubernetes Log with Botkube](#setting-up-your-slack-kubernetes-log-with-botkube) -* [Example: Catching a CrashLoopBackOff Error](#example-catching-a-crashloopbackoff-error) -* [Transform Your Kubernetes Workflow](#transform-your-kubernetes-workflow) - -#### Get started with Botkube Cloud - Kubernetes environments are dynamic, and keeping track of every change and potential issue can be overwhelming. Botkube offers an elegant solution: a detailed, real-time Kubernetes event log streamed directly into your team's Slack channel, eliminating the need to constantly [switch between tools](https://botkube.io/learn/kubernetes-monitoring-tools). Why a Slack Event Log? @@ -72,4 +43,4 @@ Botkube's Slack integration supercharges your Kubernetes operations. Experience ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__slackops.md b/hack/assistant-setup/content/botkube.io__learn__slackops.md index 072640ed..35d19294 100644 --- a/hack/assistant-setup/content/botkube.io__learn__slackops.md +++ b/hack/assistant-setup/content/botkube.io__learn__slackops.md @@ -37,4 +37,4 @@ And this is just the beginning. We're actively exploring integrating even more p ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__spring-boot.md b/hack/assistant-setup/content/botkube.io__learn__spring-boot.md index ac82903c..9832e627 100644 --- a/hack/assistant-setup/content/botkube.io__learn__spring-boot.md +++ b/hack/assistant-setup/content/botkube.io__learn__spring-boot.md @@ -10,14 +10,13 @@ What is Spring Boot? Spring Boot is a framework that simplifies the creation of stand-alone, production-grade Spring-based applications that can run on Kubernetes. Spring Boot provides features such as: -* Auto-configuration: Spring Boot automatically configures your application based on the dependencies you have added to your project. +\- Auto-configuration: Spring Boot automatically configures your application based on the dependencies you have added to your project. -* Embedded servers: Spring Boot embeds Tomcat, Jetty, or Undertow directly into your executable jar or war file, so you don't need to deploy your application to an external server. +\- Embedded servers: Spring Boot embeds Tomcat, Jetty, or Undertow directly into your executable jar or war file, so you don't need to deploy your application to an external server. -* Starter dependencies: Spring Boot provides a set of starter dependencies that let you quickly add common functionality to your application, such as web, data access, security, testing, etc. - -* Actuator: Spring Boot provides a set of endpoints that let you monitor and manage your application, such as health, metrics, beans, env, etc. +\- Starter dependencies: Spring Boot provides a set of starter dependencies that let you quickly add common functionality to your application, such as web, data access, security, testing, etc. +\- Actuator: Spring Boot provides a set of endpoints that let you monitor and manage your application, such as health, metrics, beans, env, etc. With Springboot, you can create a fully functional Java application that can be packaged as a container image and deployed on Kubernetes with minimal configuration. @@ -26,14 +25,13 @@ What is Botkube? Botkube is an app that helps you monitor your Kubernetes cluster, debug critical deployments, and get recommendations for standard practices by running checks on Kubernetes resources. Botkube can be integrated with multiple messaging platforms like Slack, Microsoft Teams, Discord, or Mattermost to help you communicate with your cluster from your chat tool. Botkube has the following features: -* Monitoring: Botkube monitors your cluster events and sends notifications to your chat tool when something changes. You can also filter the events based on namespaces, resources, or actions. - -* ChatOps: Botkube lets you execute kubectl commands on your cluster from your chat tool. You can also use helm commands to install or upgrade charts. Botkube supports interactive command creation for some platforms, making it easier for non-experts to work with Kubernetes. +\- Monitoring: Botkube monitors your cluster events and sends notifications to your chat tool when something changes. You can also filter the events based on namespaces, resources, or actions. -* Automation: Botkube allows you to automatically run commands based on specific events and see the results in the event message. You can use this feature to gather logs and other details on errors, get descriptions of newly created resources, or even auto-rollback failed deployments and upgrades with simple configuration steps. +\- ChatOps: Botkube lets you execute kubectl commands on your cluster from your chat tool. You can also use helm commands to install or upgrade charts. Botkube supports interactive command creation for some platforms, making it easier for non-experts to work with Kubernetes. -* Extensibility: Botkube supports plugins that let you add new sources and executors for any tools. You can use plugins to enable any tool for ChatOps and automation with easy-to-use APIs and Botkube as the engine. +\- Automation: Botkube allows you to automatically run commands based on specific events and see the results in the event message. You can use this feature to gather logs and other details on errors, get descriptions of newly created resources, or even auto-rollback failed deployments and upgrades with simple configuration steps. +\- Extensibility: Botkube supports plugins that let you add new sources and executors for any tools. You can use plugins to enable any tool for ChatOps and automation with easy-to-use APIs and Botkube as the engine. With Botkube, you can monitor and manage your Spring Boot applications on Kubernetes from your chat tool without switching contexts. @@ -42,16 +40,15 @@ How to Use Botkube with Springboot Kubernetes? To use Botkube with Spring Boot, you need to do the following steps: -1. Create a Spring Boot application using [Spring Initializr](https://start.spring.io/). Choose the dependencies you need for your application, such as web, data access, security, etc. Download and unzip the project folder. - -2. Build a container image for your application using [Jib](https://github.com/GoogleContainerTools/jib). Jib is a tool that builds optimized Docker and OCI images for Java applications without a Docker daemon. Add the Jib plugin to your pom.xml file and run `mvn compile jib:build` to build and push the image to a registry of your choice. +1\. Create a Spring Boot application using [Spring Initializr](https://start.spring.io/). Choose the dependencies you need for your application, such as web, data access, security, etc. Download and unzip the project folder. -3. Deploy your application on Kubernetes using [Skaffold](https://skaffold.dev/). Skaffold is a tool that automates the workflow for building, pushing, and deploying applications on Kubernetes. Create a skaffold.yaml file that defines how to build and deploy your application using Jib and kubectl or helm. Run `skaffold dev` to start a continuous development mode that watches for changes in your source code or configuration files and updates your application on the cluster. +2\. Build a container image for your application using [Jib](https://github.com/GoogleContainerTools/jib). Jib is a tool that builds optimized Docker and OCI images for Java applications without a Docker daemon. Add the Jib plugin to your pom.xml file and run \`mvn compile jib:build\` to build and push the image to a registry of your choice. -4. Install Botkube on your cluster using [Helm](https://helm.sh/). Helm is a package manager for Kubernetes that lets you install and manage applications using charts. Add the Botkube chart repository and install the botkube chart with the configuration options for your chat platform. Get started with Botkube for free with our new [cloud app](https://botkube.io/blog/introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting). +3\. Deploy your application on Kubernetes using [Skaffold](https://skaffold.dev/). Skaffold is a tool that automates the workflow for building, pushing, and deploying applications on Kubernetes. Create a skaffold.yaml file that defines how to build and deploy your application using Jib and kubectl or helm. Run \`skaffold dev\` to start a continuous development mode that watches for changes in your source code or configuration files and updates your application on the cluster. -5. Configure Botkube to monitor and manage your application from the Cloud Based Web GUI. At this point Botkube should be connected to your instance and a channel in your messaging platform. Simply select the notifications you want to receive from the services and invite all the needed DevOps & SRE team members. +4\. Install Botkube on your cluster using [Helm](https://helm.sh/). Helm is a package manager for Kubernetes that lets you install and manage applications using charts. Add the Botkube chart repository and install the botkube chart with the configuration options for your chat platform. Get started with Botkube for free with our new [cloud app](https://botkube.io/blog/introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting). +5\. Configure Botkube to monitor and manage your application from the Cloud Based Web GUI. At this point Botkube should be connected to your instance and a channel in your messaging platform. Simply select the notifications you want to receive from the services and invite all the needed DevOps & SRE team members. **Conclusion** -------------- diff --git a/hack/assistant-setup/content/botkube.io__learn__turning-kubernetes-k8s-alerts-into-k8s-notifications.md b/hack/assistant-setup/content/botkube.io__learn__turning-kubernetes-k8s-alerts-into-k8s-notifications.md index 65e81dfd..f76c9fab 100644 --- a/hack/assistant-setup/content/botkube.io__learn__turning-kubernetes-k8s-alerts-into-k8s-notifications.md +++ b/hack/assistant-setup/content/botkube.io__learn__turning-kubernetes-k8s-alerts-into-k8s-notifications.md @@ -60,4 +60,8 @@ If the developer has followed the best practices up until this point, they shoul Botkube also allows for operations to be run to fix any K8s alert that comes in based on its AI suggested fix. Simply click the button prompts Botkube gives with its troubleshooting suggestions and our software will run the commands directly in your cluster. No more switching back to Command Line Interfaces! Just run everything in your chat group! -‍ +### Solving Kubernetes Alerts with AI + +Botkube simplifies Kubernetes troubleshooting by letting you interact with error notifications using everyday language. Spot an OOMKilled error in Slack? Simply ask Botkube AI for a definition and solutions, all through natural conversation. + +To see this in action, check out the video where our developer advocate, Maria, demonstrates the power of the Botkube AI Assistant. diff --git a/hack/assistant-setup/content/botkube.io__learn__understanding-kubernetes-executors.md b/hack/assistant-setup/content/botkube.io__learn__understanding-kubernetes-executors.md index cbde57b5..4408af87 100644 --- a/hack/assistant-setup/content/botkube.io__learn__understanding-kubernetes-executors.md +++ b/hack/assistant-setup/content/botkube.io__learn__understanding-kubernetes-executors.md @@ -3,6 +3,32 @@ Title: Kubernetes Executors Explained - A Guide for Platform Engineers URL Source: https://botkube.io/learn/understanding-kubernetes-executors Markdown Content: +Understanding Kubernetes Executors: A Guide for Platform, DevOps, and SRE Teams +------------------------------------------------------------------------------- + +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fdbe5e2b0c291bb5ec0536_Botkube%20BLOG%20Thumbnail%20(6).png) + +Last updated + +March 25, 2024 + +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Table of Contents +----------------- + +* [What is a Kubernetes Executor?](#what-is-a-kubernetes-executor--2) +* [Key Kubernetes Executors](#key-kubernetes-executors-2) +* [Conclusion](#conclusion-2) + +#### Get started with Botkube Cloud + If you're a Platform Engineer, DevOps Engineer, or SRE responsible for managing infrastructure within Kubernetes, then Kubernetes executors are essential tools for your workflow. Let's dive into what they are and how they can streamline your Kubernetes operations. **What is a Kubernetes Executor?** @@ -16,6 +42,9 @@ At its core, a Kubernetes executor is a mechanism that facilitates the execution * **Improved Reliability:** They offer fault tolerance by automatically restarting failed tasks or pods, minimizing downtime. * **Streamlined Workflows:** Executors automate repetitive tasks and provide a structured approach to managing your Kubernetes deployments. +**Key Kubernetes Executors** +---------------------------- + Let's explore some of the most important executors you should be familiar with: * **Kubectl:** The cornerstone of Kubernetes control, Kubectl grants you direct command-line access to your cluster. Botkube's AIOps features take this one step further, allowing you to automate Kubectl commands based on intelligent suggestions from its AI DevOps Assistant. @@ -30,4 +59,6 @@ By strategically choosing and integrating Kubernetes executors, Platform, DevOps ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) + +### Dig deeper: diff --git a/hack/assistant-setup/content/botkube.io__learn__understanding-yaml-commenting.md b/hack/assistant-setup/content/botkube.io__learn__understanding-yaml-commenting.md index 7109324d..a7df24b5 100644 --- a/hack/assistant-setup/content/botkube.io__learn__understanding-yaml-commenting.md +++ b/hack/assistant-setup/content/botkube.io__learn__understanding-yaml-commenting.md @@ -3,18 +3,16 @@ Title: Understanding YAML Comments in Kubernetes: Improve Collaboration URL Source: https://botkube.io/learn/understanding-yaml-commenting Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) - Understanding YAML Commenting for Better Kubernetes Management -------------------------------------------------------------- -![Image 2: an image of a cloud with the words'botkube definitions'](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa0b549adc75e0bdbbd27b_LEARN_TN_Definitions%20(9).png) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa0b549adc75e0bdbbd27b_LEARN_TN_Definitions%20(9).png) Last updated March 19, 2024 -![Image 3: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) Evan Witmer @@ -25,10 +23,10 @@ Botkube Table of Contents ----------------- -* [What Does YAML Commenting Look Like?](#what-does-yaml-commenting-look-like-) -* [Why Use Comments in YAML?](#why-use-comments-in-yaml-) -* [Beyond Notes: Botkube for Team-Based Kubernetes Management](#beyond-notes-botkube-for-team-based-kubernetes-management) -* [Final Thoughts](#final-thoughts) +* [What Does YAML Commenting Look Like?](#what-does-yaml-commenting-look-like--2) +* [Why Use Comments in YAML?](#why-use-comments-in-yaml--2) +* [Beyond Notes: Botkube for Team-Based Kubernetes Management](#beyond-notes-botkube-for-team-based-kubernetes-management-2) +* [Final Thoughts](#final-thoughts-2) #### Get started with Botkube Cloud @@ -43,30 +41,8 @@ There are two primary types of YAML comments: * **Single-line comments:** Used for brief notes or for temporarily deactivating a line of YAML code. - -
-view raw - -blog-comment-1.yaml - -hosted with ❤ by GitHub -
- - - * **Inline comments:** Can be added at the end of a line of code. This lets you insert short explanations alongside the code itself. - -
-view raw - -gistfile1.yaml - -hosted with ❤ by GitHub -
- - - **Why Use Comments in YAML?** ----------------------------- @@ -96,4 +72,4 @@ Comments may seem like simple additions, but in the world of Kubernetes configur ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__use-cases-for-aiops-platform.md b/hack/assistant-setup/content/botkube.io__learn__use-cases-for-aiops-platform.md index 6d3728ca..62e24bc9 100644 --- a/hack/assistant-setup/content/botkube.io__learn__use-cases-for-aiops-platform.md +++ b/hack/assistant-setup/content/botkube.io__learn__use-cases-for-aiops-platform.md @@ -3,18 +3,18 @@ Title: Demystifying AIOps Platforms: Powerful Use Cases URL Source: https://botkube.io/learn/use-cases-for-aiops-platform Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) +[![Image 1: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) Top Use Cases for AIOps Platform: Empowered DevOps with Chat-Based AI --------------------------------------------------------------------- -![Image 2: botkube definitions - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa0ba7997da02f4543c915_LEARN_TN_Definitions%20(8).png) +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa0ba7997da02f4543c915_LEARN_TN_Definitions%20(8).png) Last updated March 19, 2024 -![Image 3: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) +![Image 3](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) Evan Witmer @@ -51,4 +51,61 @@ In conclusion, the rise of AIOps platforms, with Botkube leading the charge in t ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) + +### Dig deeper: + +[![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +Top Use Cases for AIOps Platform: Empowered DevOps with Chat-Based AI +--------------------------------------------------------------------- + +![Image 5](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa0ba7997da02f4543c915_LEARN_TN_Definitions%20(8).png) + +Last updated + +March 19, 2024 + +![Image 6](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Table of Contents +----------------- + +* [AIOps Use Cases](#aiops-use-cases-2) +* [Concluding Thoughts](#concluding-thoughts-2) + +#### Get started with Botkube Cloud + +The landscape of DevOps is evolving at breakneck speed. With the booming popularity of chatbots and large language models (LLMs), a revolutionary trend is emerging: MLOps, or the application of AI and machine learning to streamline and automate IT operations. This translates to DevOps engineers increasingly leveraging "AIOps tools" and "AIOps solutions" to navigate the complexities of their Kubernetes environments. + +Botkube stands at the forefront of this exciting development, offering a unique AIOps platform specifically designed for Kubernetes. While several robust competitors exist, Botkube sets itself apart by seamlessly integrating AI-powered troubleshooting directly into familiar chat platforms like Teams and Slack. This innovative approach simplifies AI query control for common issues and fosters smoother collaboration between DevOps and developers. + +**AIOps Use Cases** +------------------- + +But what exactly are the key use cases that make AIOps platforms like Botkube so valuable? Let's explore some of the most impactful scenarios: + +1. Intelligent Alerting and Notification: Say goodbye to information overload! AIOps platforms can intelligently filter and prioritize alerts, sending relevant notifications via your preferred chat platform. This eliminates noise and empowers timely action on critical issues. Botkube, for instance, leverages AI to understand the context of alerts and deliver them directly within your chat environment, streamlining communication and response. +2. Knowledge Management and Collaboration: Capturing and sharing knowledge within DevOps teams is crucial. AIOps platforms can store and analyze past incidents, providing valuable insights and fostering knowledge sharing. Chat-based interfaces like Botkube's further enhance this collaboration by providing a central platform for discussing and resolving issues collaboratively. +3. Continuous Improvement: The power of AIOps lies not just in solving problems but in learning from them. By analyzing historical data and identifying recurring issues, AIOps platforms can suggest improvements to infrastructure and processes, leading to a more optimized and resilient environment. Botkube empowers this continuous improvement by capturing feedback and suggestions directly within the chat platform, ensuring continuous learning and evolution. +4. Automated Root Cause Analysis (RCA): No more chasing elusive gremlins! AIOps platforms leverage machine learning to analyze vast amounts of data and automatically pinpoint the root cause of issues. This saves DevOps teams precious time and effort, allowing them to focus on strategic tasks. Botkube goes a step further by allowing filtering of relevant code sections contributing to the issue, further accelerating resolution. +5. Predictive Maintenance: Proactive problem-solving is the key to operational excellence. AIOps platforms can analyze trends and predict potential issues before they occur, enabling preventative measures and minimizing downtime. By integrating into chat platforms, Botkube ensures real-time visibility into potential problems, fostering proactive collaboration between teams. + +**Concluding Thoughts** +----------------------- + +In conclusion, the rise of AIOps platforms, with Botkube leading the charge in the Kubernetes space, signifies a paradigm shift in DevOps. By leveraging AI and integrating seamlessly into communication tools like chat platforms, these solutions are empowering DevOps teams to gain deeper insights, automate tasks, and collaborate effectively. As the adoption of AIOps continues to accelerate, one thing is certain: the future of DevOps is intelligent, collaborative, and chat-driven. + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) + +### Dig deeper: diff --git a/hack/assistant-setup/content/botkube.io__learn__what-is-oomkilled.md b/hack/assistant-setup/content/botkube.io__learn__what-is-oomkilled.md index b9c114fb..1b1b9b86 100644 --- a/hack/assistant-setup/content/botkube.io__learn__what-is-oomkilled.md +++ b/hack/assistant-setup/content/botkube.io__learn__what-is-oomkilled.md @@ -3,6 +3,30 @@ Title: OOMKilled Explained: Unraveling Kubernetes Memory Limit Errors URL Source: https://botkube.io/learn/what-is-oomkilled Markdown Content: +What is OOMKilled? +------------------ + +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa187ca7f5437925b47992_LEARN_TN_Errors%20(2).png) + +![Image 2](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Table of Contents +----------------- + +* [How to View the Error Message](#how-to-view-the-error-message-2) +* [What is Error Code 137?](#what-is-error-code-137--2) +* [How to Prevent OOMKilled](#how-to-prevent-oomkilled-2) +* [How to Troubleshoot OOMKilled](#how-to-troubleshoot-oomkilled-2) +* [Conclusion](#conclusion-2) + +#### Get started with Botkube Cloud + OOMKilled is an error that occurs when a container or pod in Kubernetes uses more memory than it is allowed. This can happen for a variety of reasons, such as a memory leak, a bug in the application, or a spike in traffic. When a container or pod is terminated due to OOMKilled, it will not be able to recover and will need to be restarted. **How to View the Error Message** @@ -10,7 +34,7 @@ OOMKilled is an error that occurs when a container or pod in Kubernetes uses mor If you see an OOMKilled error, you can view the error message by running the following command: -`kubectl logs ` +\`kubectl logs \` The error message will show you the name of the container that was terminated and the reason for the termination. @@ -19,7 +43,7 @@ The error message will show you the name of the container that was terminated an Error Code 137 is the exit code that is returned when a container or pod is terminated due to OOMKilled. You can see the error code by running the following command: -`kubectl get pod -o yaml` +\`kubectl get pod -o yaml\` The error code will be listed in the "Status" section of the pod's YAML definition. @@ -51,6 +75,10 @@ Here are some additional tips for troubleshooting OOMKilled errors: * Use a tool like Prometheus to collect metrics about your Kubernetes cluster. * Use a tool like Botkube to see the error messages directly in Slack or Teams and use AI to suggest a troubleshooting action directly from the Slack channel. +### Solving OOMKilled with AI for Kubernetes Pods + +Botkube's new AI assistant revolutionizes how you handle OOMKilled errors in your Kubernetes pods. This intelligent feature proactively scans your cluster to pinpoint the exact pod responsible for the error.  It then offers actionable solutions: either tailored guidance on optimizing your workload to reduce memory consumption or the ability to use Botkube's integrated Kubectl commands to increase memory allocation directly.  With this AI-powered tool, you can swiftly resolve OOMKilled errors, saving valuable time and ensuring your Kubernetes applications run smoothly. + ### About Botkube -Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](https://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__lp__5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate.md b/hack/assistant-setup/content/botkube.io__lp__5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate.md index cc168c43..ccf25eae 100644 --- a/hack/assistant-setup/content/botkube.io__lp__5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate.md +++ b/hack/assistant-setup/content/botkube.io__lp__5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate.md @@ -7,19 +7,19 @@ Botkube helps teams monitor and respond to Kubernetes issues by sending intellig Join us for an office hours session where we'll explore five ways for DevOps teams to automate common Kubernetes tasks to save time each week. This session is useful and informative for those new to Kubernetes or those with years of K8s experience under their belt. We'll talk through: - **- Monitoring and Alerting Kubernetes Clusters** +**- Monitoring and Alerting Kubernetes Clusters** Botkube can automate your monitoring setup, transforming how you manage incoming queries and requests. It intelligently categorizes and responds to various types of queries based on their specific channel and frequency. - **- Resource Scaling** +**- Resource Scaling** Manually adjusting resources can be time-consuming and error-prone, leading to inefficiencies. Botkube offers a valuable solution for automating resource scaling by simplifying access to Kubernetes clusters by providing actionable notifications and the ability to execute kubectl, helm, and GitOps commands directly from a shared team channel. - **- Kubernetes Log Management** +**- Kubernetes Log Management** By automating the collection and analysis of logs, Botkube centralizes these critical data points, making them easily accessible for quick analysis. This centralization offers a comprehensive view of all events and errors within the Kubernetes environment, significantly easing the troubleshooting process for both Ops and Dev teams. - **- GitOps Workflows** +**- GitOps Workflows** Botkube's GitOps plugins bridge the gap between GitOps tools and communication platforms, offering an efficient, interactive, and user-friendly approach to managing Kubernetes deployments. We'll show the[**Botkube Flux plugin**](https://botkube.io/blog/introducing-botkubes-integration-with-flux), which streamlines the integration of Kubernetes clusters, GitHub repositories, and the Flux CLI. @@ -27,7 +27,7 @@ Botkube's GitOps plugins bridge the gap between GitOps tools and communication p ‍ -![Image 1: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) +![Image 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) ‍ diff --git a/hack/assistant-setup/content/botkube.io__lp__zapier-for-kubernetes.md b/hack/assistant-setup/content/botkube.io__lp__zapier-for-kubernetes.md index 60eb8ea7..3c93a4d7 100644 --- a/hack/assistant-setup/content/botkube.io__lp__zapier-for-kubernetes.md +++ b/hack/assistant-setup/content/botkube.io__lp__zapier-for-kubernetes.md @@ -14,7 +14,7 @@ Join us for an exciting session about Botkube's plugin system and how it improve \- Collaborative troubleshooting techniques -**Special Interview** +**Special Interview** In this session, I will be interviewing Botkube's Product Lead, Blair Rampling, about Botkube's product vision and roadmap. diff --git a/hack/assistant-setup/content/botkube.io__news.md b/hack/assistant-setup/content/botkube.io__news.md index 420ce31b..bc4e2031 100644 --- a/hack/assistant-setup/content/botkube.io__news.md +++ b/hack/assistant-setup/content/botkube.io__news.md @@ -43,6 +43,8 @@ Kubeshop acquires Botkube, InfraCloud's popular ChatOps platform for K8s trouble InfraCloud Technologies and Kubeshop.io have signed a definitive agreement whereby Kubeshop.io has acquired a majority stake in BotKube. +< +> Stay in the Loop Join the Botkube Community in one of these channels diff --git a/hack/assistant-setup/content/botkube.io__pricing.md b/hack/assistant-setup/content/botkube.io__pricing.md index b4d10b3f..87c63cf4 100644 --- a/hack/assistant-setup/content/botkube.io__pricing.md +++ b/hack/assistant-setup/content/botkube.io__pricing.md @@ -14,7 +14,7 @@ Up to 5 nodes in one cluster GUI-based Centralized Configuration Management -![Image 1: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 1](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) AI Insights: AI-based troubleshooting and operations @@ -22,15 +22,15 @@ AI Insights: AI-based troubleshooting and operations Event and Audit Logging -![Image 2: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 2](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) Advanced Slack Bot for Multi-cluster Access -![Image 3: a blue cross icon on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a388c9b10d4675fb225e7_pricing-no.svg) +![Image 3](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a388c9b10d4675fb225e7_pricing-no.svg) Advanced Microsoft Teams Multi-cluster Access -![Image 4: a blue cross icon on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a388c9b10d4675fb225e7_pricing-no.svg) +![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a388c9b10d4675fb225e7_pricing-no.svg) Node count @@ -38,11 +38,11 @@ $10 / node / month GUI-based Centralized Configuration Management -![Image 5: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) Event and Audit Logging -![Image 6: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) AI Insights: AI-based troubleshooting and operations @@ -50,15 +50,15 @@ AI Insights: AI-based troubleshooting and operations Advanced Slack Bot for Multi-cluster Access -![Image 7: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 7](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) Advanced Microsoft Teams Multi-cluster Access -![Image 8: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 8](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) GUI-based Centralized Configuration Management -![Image 9: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 9](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) AI Insights: AI-based troubleshooting and operations @@ -66,15 +66,15 @@ Per contract Event and Audit Logging -![Image 10: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 10](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) Advanced Slack Bot for Multi-cluster Access -![Image 11: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 11](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) Advanced Microsoft Teams Multi-cluster Access -![Image 12: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) +![Image 12](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) Data retention diff --git a/hack/assistant-setup/content/botkube.io__professional-services-partner.md b/hack/assistant-setup/content/botkube.io__professional-services-partner.md index da439b6f..f4844303 100644 --- a/hack/assistant-setup/content/botkube.io__professional-services-partner.md +++ b/hack/assistant-setup/content/botkube.io__professional-services-partner.md @@ -3,14 +3,14 @@ Title: Professional Services for Botkube URL Source: https://botkube.io/professional-services-partner Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) +[![Image 1: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) ### Botkube Recommends InfraCloud as our Preferred Professional Services Partner --------------------------------------------------------- -![Image 2: a blue cube on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/63381eaca918c27a5f1fe111_botkube-wg-pers.png)![Image 3: a speech bubble with the words need help?](https://assets-global.website-files.com/633705de6adaa38599d8e258/633819299841f90bb49b7ba5_kusk-person-bubble.svg) +![Image 2](https://assets-global.website-files.com/633705de6adaa38599d8e258/63381eaca918c27a5f1fe111_botkube-wg-pers.png)![Image 3](https://assets-global.website-files.com/633705de6adaa38599d8e258/633819299841f90bb49b7ba5_kusk-person-bubble.svg) Debug and monitor your clusters using Botkube in an interactive way. Want to use it with your own messaging tool? Or want some customizations? Reach out to our experts to get started. @@ -25,7 +25,7 @@ We understand that each deployment is different and hence our experts can help y Get in touch for Professional Services Support ---------------------------------------------- -![Image 4: the logo for infracacloud](https://assets-global.website-files.com/633705de6adaa38599d8e258/63484ada6acf164e4c5ac930_infracloud-logo.svg) +![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/63484ada6acf164e4c5ac930_infracloud-logo.svg) InfraCloud unleashes growth by helping companies adopt cloud-native technologies with their products and services. diff --git a/hack/assistant-setup/content/botkube.io__slack-app.md b/hack/assistant-setup/content/botkube.io__slack-app.md index 23e099db..e901262b 100644 --- a/hack/assistant-setup/content/botkube.io__slack-app.md +++ b/hack/assistant-setup/content/botkube.io__slack-app.md @@ -3,11 +3,11 @@ Title: Cloud Slack App URL Source: https://botkube.io/slack-app Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) +[![Image 1: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) -![Image 2: a blue bird is flying over a mountain in a video game](https://assets-global.website-files.com/633705de6adaa38599d8e258/64e8e512edbae7755379b2fe_bk-slack-logo-hero-bg.webp) +![Image 2](https://assets-global.website-files.com/633705de6adaa38599d8e258/64e8e512edbae7755379b2fe_bk-slack-logo-hero-bg.webp) -![Image 3: slack logo on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500bcab958c3be57a5523a5_slack-logo-color.svg) +![Image 3](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500bcab958c3be57a5523a5_slack-logo-color.svg) #### Cloud App for Slack @@ -18,57 +18,57 @@ Installing Botkube in Slack 1. -[![Image 4: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c008d898dab566f70d85_install-1.svg)![Image5:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c008d898dab566f70d85_install-1.svg)![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) -Go to Botkube Cloud
[Web App](https://app.botkube.io/) +Go to Botkube Cloud
 [Web App](https://app.botkube.io/) and click
on New Instance button. 2. -[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c1702080a8b5a26efb6d_install-2.svg)![Image7:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c1702080a8b5a26efb6d_install-2.svg)![Image 7](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Fill in the Instance Display Name and click Next button. 3. -[![Image 8: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c17b5527fae1a4c5bc57_install-3.svg)![Image9:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 8](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c17b5527fae1a4c5bc57_install-3.svg)![Image 9](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Click Add platform dropdown, and select Slack option. 4. -[![Image 10: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c191387a00b2b474e1b3_install-5.svg)![Image11:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 10](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c191387a00b2b474e1b3_install-5.svg)![Image 11](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Click Add to Slack button to add Cloud Slack integration to your Slack workspace. 5. -[![Image 12: a white square on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c4fab232b58125653577_install-6.svg)![Image13:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 12](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c4fab232b58125653577_install-6.svg)![Image 13](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Click Allow to grant permission for Botkube Cloud App for Slack to access your Slack workspace. 6. -[![Image 14: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c505324fd1b24eeb1ab6_install-7.svg)![Image15:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 14](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c505324fd1b24eeb1ab6_install-7.svg)![Image 15](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Provide the details as described follows and click Next button. 7. -[![Image 16: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c510d21725cf9c03a0c9_install-8.svg)![Image17:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 16](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c510d21725cf9c03a0c9_install-8.svg)![Image 17](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Add plugins you want 
to enable in your Botkube instance and click Next button. 8. -[![Image 18: a white square on a white background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c51cd898dab566fcb743_install-9.svg)![Image19:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 18](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c51cd898dab566fcb743_install-9.svg)![Image 19](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Include optional default aliases and default actions and click Create button to create Botkube Cloud instance. 9. -[![Image 20: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c528a593ecc0b3dcfa98_install-10.svg)![Image21:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 20](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c528a593ecc0b3dcfa98_install-10.svg)![Image 21](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Follow the instructions 
in the summary page to deploy Botkube into your environment. @@ -87,13 +87,13 @@ Steps to get started with Botkube You can start using Botkube Cloud App for Slack by typing @Botkube cloud help in the Slack channel you configured in one of the previous steps. -[![Image 22: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b312e6823f3bf4930026a_step1-cloud-help_pr.svg)![Image23:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 22](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b312e6823f3bf4930026a_step1-cloud-help_pr.svg)![Image 23](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) 2. You can list all the Botkube Cloud instances by typing @Botkube cloud list instances in the Slack channel or click the button List connected instances in the help command response. Besides the instance name, ID, and status in the list response, you can also click the Get details button to go to instance details on Botkube Cloud Dashboard. -[![Image 24: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b321b09f2a16899841a41_step2-cloud-instance_pr.svg)![Image25:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 24](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b321b09f2a16899841a41_step2-cloud-instance_pr.svg)![Image 25](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) 3. @@ -101,16 +101,16 @@ Once a Botkube command is executed, it will be handled on target Kubernetes clus After this point, all of your commands will be executed on the default instance. Moreover, if you want to execute a command on all the target clusters, you can use \--all-clusters flag. -[![Image 26: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b3312250c2fba277c8242_step3-cloud-set-default_pr.svg)![Image27:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)[![Image 28: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b338d0d105309da63525e_step3-5-cloud-command-all-clusters_pr.svg)![Image29:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 26](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b3312250c2fba277c8242_step3-cloud-set-default_pr.svg)![Image 27](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)[![Image 28](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b338d0d105309da63525e_step3-5-cloud-command-all-clusters_pr.svg)![Image 29](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) 4. 1\. Go to Botkube Cloud instances page and click Manage button of the instance you want to remove. -[![Image 30: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b3581864c2eaa967f7417_step4-cloud_list_manage_pr.svg)![Image31:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 30](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b3581864c2eaa967f7417_step4-cloud_list_manage_pr.svg)![Image 31](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) 5. 2\. Click Delete instance button, type instance name in the popup and click Delete instance. -[![Image 32: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b35df6390bea044f2eb3b_step5-cloud_delete_pr.svg)![Image33:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 32](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b35df6390bea044f2eb3b_step5-cloud_delete_pr.svg)![Image 33](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) diff --git a/hack/assistant-setup/content/botkube.io__solutions__enabling-developers.md b/hack/assistant-setup/content/botkube.io__solutions__enabling-developers.md index 76a38467..86fa9e23 100644 --- a/hack/assistant-setup/content/botkube.io__solutions__enabling-developers.md +++ b/hack/assistant-setup/content/botkube.io__solutions__enabling-developers.md @@ -3,9 +3,9 @@ Title: Enabling Developers | Botkube URL Source: https://botkube.io/solutions/enabling-developers Markdown Content: -[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) +[![Image 1: Kusk Kubernetes ](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) -![Image 2: a blue parrot with a square on its head](https://assets-global.website-files.com/633705de6adaa38599d8e258/659eb8b9715d644cd037118c_Bird-with-fire-Botkube.png) +![Image 2](https://assets-global.website-files.com/633705de6adaa38599d8e258/659eb8b9715d644cd037118c_Bird-with-fire-Botkube.png) ![Image 3: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif) @@ -27,25 +27,23 @@ Botkube's capabilities alleviate the burden on operations teams by empowering de Rather than responding to requests for logs and other help, DevOps teams can use that extra time to ensure the overall reliability and performance of the infrastructure. Ops teams can focus on strategic tasks and proactively manage the health of the IT environment, while Devs can self-service their requests and get the information they need. -![Image 4: a blue bird is flying over a fire](https://assets-global.website-files.com/633705de6adaa38599d8e258/659eb989e788cf2f162b2c5f_Solutions-Botkube.webp) +![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/659eb989e788cf2f162b2c5f_Solutions-Botkube.webp) User Quotes ----------- ![Image 5: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) -“Perfect! When i have the repo i will write here, thank you very much for the support! I really like this project!” - -Slide 2 of 2. +The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options ![Image 6: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options -![Image 7: three blue circles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) +![Image 7](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) ![Image 8: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) For me, monitoring health and performance of the infrastructure in realtime was done with the help of Botkube. Botkube provided me security features such as unauthorized access attempts. -![Image 9: three blue circles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) +![Image 9](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) diff --git a/hack/assistant-setup/content/botkube.io__support.md b/hack/assistant-setup/content/botkube.io__support.md index d4f55af9..9c895bb3 100644 --- a/hack/assistant-setup/content/botkube.io__support.md +++ b/hack/assistant-setup/content/botkube.io__support.md @@ -3,7 +3,7 @@ Title: Support URL Source: https://botkube.io/support Markdown Content: -![Image 1: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e74ffd2f747033e1de81d8_bk_support-hero-img_web.svg) +![Image 1](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e74ffd2f747033e1de81d8_bk_support-hero-img_web.svg) ![Image 2: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif) @@ -15,7 +15,7 @@ The quickest way to receive help regarding onboarding, configuration issues,  o , click on the chat icon in the lower right side of the screen. Our support team will be on the way to help![‍](https://join.botkube.io/) -![Image 3: a green, orange, and yellow striped background](https://assets-global.website-files.com/633705de6adaa38599d8e258/64de5389c7d816d1f6530501_botkube-status-icon.svg) +![Image 3](https://assets-global.website-files.com/633705de6adaa38599d8e258/64de5389c7d816d1f6530501_botkube-status-icon.svg) Check the status of Botkube [here.](https://status.botkube.io/) @@ -24,30 +24,30 @@ FAQ Can I integrate Botkube with other tools I use? -![Image 4: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +![Image 4](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) Yes! Botkube's plugin system allows for seamless integration with cloud-native, GitOps, DevOps, and even LLM tools like ChatGPT. Popular integrations include Flux CD, Helm, and more. Can I customize the notifications I receive from Botkube? -![Image 5: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +![Image 5](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) Absolutely! You can create custom notification scripts, filter alerts by severity, and choose which channels receive specific notifications. What messaging platforms does Botkube work with? -![Image 6: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) Botkube works with Slack, Microsoft Teams, Discord, and Mattermost! It also supports custom setups using Elasticsearch or Webhooks. How do I install Botkube? (Link to installation guide) -![Image 7: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +![Image 7](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) 1\. Choose your messaging platform. 2. Install the Botkube CLI and follow the prompts to connect it to your cluster. 3. Check the installation guide: link to docs to get started What is Botkube and what does it do? -![Image 8: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +![Image 8](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) Botkube is a Kubernetes monitoring and management tool that lives in your messaging platform (Slack, Teams, etc.). It helps you troubleshoot issues, understand cluster health, and apply Kubernetes best practices. diff --git a/hack/assistant-setup/content/botkube.io__tags__ai.md b/hack/assistant-setup/content/botkube.io__tags__ai.md index f1f62472..68a3ce22 100644 --- a/hack/assistant-setup/content/botkube.io__tags__ai.md +++ b/hack/assistant-setup/content/botkube.io__tags__ai.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__aiops.md b/hack/assistant-setup/content/botkube.io__tags__aiops.md index 8c900e95..403fc361 100644 --- a/hack/assistant-setup/content/botkube.io__tags__aiops.md +++ b/hack/assistant-setup/content/botkube.io__tags__aiops.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__argo-cd.md b/hack/assistant-setup/content/botkube.io__tags__argo-cd.md index 6b907056..37b48dd4 100644 --- a/hack/assistant-setup/content/botkube.io__tags__argo-cd.md +++ b/hack/assistant-setup/content/botkube.io__tags__argo-cd.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md b/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md index 46b65356..d7e19876 100644 --- a/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md +++ b/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__chatops.md b/hack/assistant-setup/content/botkube.io__tags__chatops.md index 8098c3f6..a51d0d73 100644 --- a/hack/assistant-setup/content/botkube.io__tags__chatops.md +++ b/hack/assistant-setup/content/botkube.io__tags__chatops.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__development.md b/hack/assistant-setup/content/botkube.io__tags__development.md index 3223f594..7ae9989c 100644 --- a/hack/assistant-setup/content/botkube.io__tags__development.md +++ b/hack/assistant-setup/content/botkube.io__tags__development.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__gitops.md b/hack/assistant-setup/content/botkube.io__tags__gitops.md index dd8c24e3..48ad0a51 100644 --- a/hack/assistant-setup/content/botkube.io__tags__gitops.md +++ b/hack/assistant-setup/content/botkube.io__tags__gitops.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__helm.md b/hack/assistant-setup/content/botkube.io__tags__helm.md deleted file mode 100644 index d16c3f40..00000000 --- a/hack/assistant-setup/content/botkube.io__tags__helm.md +++ /dev/null @@ -1,8 +0,0 @@ -Title: Helm | Botkube tags - -URL Source: https://botkube.io/tags/helm - -Markdown Content: -### Open-source tools to help you with Kubernetes-native development & testing - -Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. diff --git a/hack/assistant-setup/content/botkube.io__tags__kubecon.md b/hack/assistant-setup/content/botkube.io__tags__kubecon.md index dbb5e5b5..c11290b8 100644 --- a/hack/assistant-setup/content/botkube.io__tags__kubecon.md +++ b/hack/assistant-setup/content/botkube.io__tags__kubecon.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__kubernetes.md b/hack/assistant-setup/content/botkube.io__tags__kubernetes.md index e75d7d7b..b1194bd8 100644 --- a/hack/assistant-setup/content/botkube.io__tags__kubernetes.md +++ b/hack/assistant-setup/content/botkube.io__tags__kubernetes.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md b/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md index b7b23b60..09a79559 100644 --- a/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md +++ b/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__monitoring.md b/hack/assistant-setup/content/botkube.io__tags__monitoring.md index 83ebb99d..ad431aa3 100644 --- a/hack/assistant-setup/content/botkube.io__tags__monitoring.md +++ b/hack/assistant-setup/content/botkube.io__tags__monitoring.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__newsletter.md b/hack/assistant-setup/content/botkube.io__tags__newsletter.md deleted file mode 100644 index 57ee6e08..00000000 --- a/hack/assistant-setup/content/botkube.io__tags__newsletter.md +++ /dev/null @@ -1,8 +0,0 @@ -Title: Newsletter | Botkube tags - -URL Source: https://botkube.io/tags/newsletter - -Markdown Content: -### Open-source tools to help you with Kubernetes-native development & testing - -Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. diff --git a/hack/assistant-setup/content/botkube.io__tags__release.md b/hack/assistant-setup/content/botkube.io__tags__release.md index dc8271a1..3fe5532b 100644 --- a/hack/assistant-setup/content/botkube.io__tags__release.md +++ b/hack/assistant-setup/content/botkube.io__tags__release.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__slack.md b/hack/assistant-setup/content/botkube.io__tags__slack.md index ed3e8518..6eb7416c 100644 --- a/hack/assistant-setup/content/botkube.io__tags__slack.md +++ b/hack/assistant-setup/content/botkube.io__tags__slack.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/botkube.io__tags__tutorial.md b/hack/assistant-setup/content/botkube.io__tags__tutorial.md index 93af997d..c59676be 100644 --- a/hack/assistant-setup/content/botkube.io__tags__tutorial.md +++ b/hack/assistant-setup/content/botkube.io__tags__tutorial.md @@ -24,14 +24,14 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) +[![Image 1](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) Botkube is made by Kubeshop — a first of its kind open source accelerator focused on the cloud native ecosystem At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. -[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) +[![Image 2](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) #### Get to Know Kubeshop diff --git a/hack/assistant-setup/content/docs.botkube.io.md b/hack/assistant-setup/content/docs.botkube.io.md index ac38f870..6dc30609 100644 --- a/hack/assistant-setup/content/docs.botkube.io.md +++ b/hack/assistant-setup/content/docs.botkube.io.md @@ -3,12 +3,22 @@ Title: Installation | Botkube URL Source: https://docs.botkube.io/ Markdown Content: -* [](https://docs.botkube.io/) * Installation Version: 1.10 Botkube has two components that need to be installed. 1. Botkube App Integration in your Slack/Mattermost/Microsoft Teams/Discord 2. Botkube agent in your Kubernetes cluster Feature map[​](#feature-map"DirectlinktoFeaturemap") +* [](https://docs.botkube.io/) +* Installation + +Version: 1.10 + +Botkube has two components that need to be installed. + +1. Botkube App Integration in your Slack/Mattermost/Microsoft Teams/Discord +2. Botkube agent in your Kubernetes cluster + +Feature map[​](#feature-map "Direct link to Feature map") --------------------------------------------------------- Learn about Botkube features and their availability in different integrations. -### Bots[​](#bots"DirectlinktoBots") +### Bots[​](#bots "Direct link to Bots") Compare our bidirectional integrations: @@ -22,7 +32,7 @@ Compare our bidirectional integrations: | Actionable notifications | ✔️ | ✔️ | ✔️ | ❌ | ❌ | | Emoji reactions | ✔️ | ❌ | ❌ | ❌ | ❌ | -### Sinks[​](#sinks"DirectlinktoSinks") +### Sinks[​](#sinks "Direct link to Sinks") Compare our unidirectional integrations: @@ -31,7 +41,7 @@ Compare our unidirectional integrations: | Source plugins support (e.g. `kubernetes`, `prometheus`, etc.) | ✔️ | ✔️ | | Multi-cluster support | ✔️ | ✔️ | -Integrations[​](#integrations"DirectlinktoIntegrations") +Integrations[​](#integrations "Direct link to Integrations") ------------------------------------------------------------ tip diff --git a/hack/assistant-setup/content/docs.botkube.io__architecture.md b/hack/assistant-setup/content/docs.botkube.io__architecture.md index 1bb0104d..68e7fe54 100644 --- a/hack/assistant-setup/content/docs.botkube.io__architecture.md +++ b/hack/assistant-setup/content/docs.botkube.io__architecture.md @@ -10,43 +10,43 @@ Botkube is split into two main parts: * Botkube agent: Botkube binary that serves as a bridge between communication platforms (e.g. Slack, Discord) and Botkube plugins (sources and executors). * [Botkube plugins](https://docs.botkube.io/plugin/): The executable binaries that communicate with Botkube agent over an RPC interface. Botkube supports two types of plugins, respectively called Source plugins and Executor plugins. -Components[​](#components"DirectlinktoComponents") +Components[​](#components "Direct link to Components") ------------------------------------------------------ The following diagram visualizes all main components in the system. ![Image 1: Architecture](https://docs.botkube.io/assets/images/arch-light-5dd32e39675b8833f7bcf6cfe2340542.svg#gh-light-mode-only)![Image 2: Architecture](https://docs.botkube.io/assets/images/arch-dark-d40e372bd6c7930979ab40b08b32ebfb.svg#gh-dark-mode-only) -### Plugin repository[​](#plugin-repository"DirectlinktoPluginrepository") +### Plugin repository[​](#plugin-repository "Direct link to Plugin repository") A plugin repository is a place where plugin binaries and index file are stored. This repository must be publicly available and supports downloading assets via HTTP(s). Any static file server can be used, for instance: GitHub Pages, `s3`, `gcs`, etc. -### Plugin manager[​](#plugin-manager"DirectlinktoPluginmanager") +### Plugin manager[​](#plugin-manager "Direct link to Plugin manager") Plugin manager takes care of downloading enabled and bound plugins, running a given plugin binary and maintaining the gRPC connection. Under the hood, the [`go-plugin`](https://github.com/hashicorp/go-plugin/) library is used. Plugin manager is responsible both for the executor and source plugins. -### Plugin executor bridge[​](#plugin-executor-bridge"DirectlinktoPluginexecutorbridge") +### Plugin executor bridge[​](#plugin-executor-bridge "Direct link to Plugin executor bridge") Plugin executor bridge is resolving the received Botkube command, calling the respective plugin, and sending back the response to a given communication platform. -### Executor[​](#executor"DirectlinktoExecutor") +### Executor[​](#executor "Direct link to Executor") Executor is a binary that implements the [executor](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) Protocol Buffers contract. Executor runs a given command, such as `kubectl` one, and returns the response in a synchronous way. Streaming command response is not supported. As a result, commands which take a lot of time doesn't work well, as the response won't be sent until the command is finished. -### Plugin source bridge[​](#plugin-source-bridge"DirectlinktoPluginsourcebridge") +### Plugin source bridge[​](#plugin-source-bridge "Direct link to Plugin source bridge") Plugin source bridge is dispatching received source events to all configured communication channels. -### Source[​](#source"DirectlinktoSource") +### Source[​](#source "Direct link to Source") Source is a binary that implements the [source](https://github.com/kubeshop/botkube/blob/main/proto/source.proto) Protocol Buffers contract. Source starts asynchronous streaming of domain-specific events. For example, streaming Kubernetes events. -### Bot[​](#bot"DirectlinktoBot") +### Bot[​](#bot "Direct link to Bot") Bot represents a bidirectional communication platform. Each bot is responsible for authenticating, managing connections, and providing an interface for receiving and sending messages for a given platform like Slack, Discord, etc. Connection is mostly done via WebSocket. -### Sink[​](#sink"DirectlinktoSink") +### Sink[​](#sink "Direct link to Sink") Sink represents a unidirectional communication platform. Each sink is responsible for authenticating, managing connections, and providing an interface for sending messages for a given platform like Elasticsearch, outgoing webhook, etc. diff --git a/hack/assistant-setup/content/docs.botkube.io__architecture__cloud-teams.md b/hack/assistant-setup/content/docs.botkube.io__architecture__cloud-teams.md index dd30c6f5..b82ca629 100644 --- a/hack/assistant-setup/content/docs.botkube.io__architecture__cloud-teams.md +++ b/hack/assistant-setup/content/docs.botkube.io__architecture__cloud-teams.md @@ -7,45 +7,45 @@ This document describes the communication between the Botkube Cloud control-plan ![Image 1: teams-cloud.svg](https://docs.botkube.io/assets/images/teams-cloud-72519574ff0699035683647bd64f9254.png) -### Agent outbound connections[​](#agent-outbound-connections"DirectlinktoAgentoutboundconnections") +### Agent outbound connections[​](#agent-outbound-connections "Direct link to Agent outbound connections") * HTTPS: `https://api.segment.io/*` * HTTPS: `https://api.botkube.io/*` * HTTPS: `https://github.com/kubeshop/botkube/releases/download/*` * HTTP/2: `teams.botkube.io:50054` * Docker images: [https://ghcr.io](https://ghcr.io/) more about required ports you can on [About GitHub's IP addresses](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-githubs-ip-addresses): -* `*.github.com` -* `*.pkg.github.com` -* `*.ghcr.io` -* `*.githubusercontent.com` + * `*.github.com` + * `*.pkg.github.com` + * `*.ghcr.io` + * `*.githubusercontent.com` -### Agent inbound[​](#agent-inbound"DirectlinktoAgentinbound") +### Agent inbound[​](#agent-inbound "Direct link to Agent inbound") The Botkube Agent doesn't export any endpoints. Components details ------------------ -Agent[​](#agent"DirectlinktoAgent") +Agent[​](#agent "Direct link to Agent") --------------------------------------- The Botkube Agent Docker image is hosted on the GitHub Container registry, which uses the package namespace [https://ghcr.io.](https://ghcr.io./) The image format link: * [`ghcr.io/kubeshop/botkube:{botkube_version}`](https://github.com/kubeshop/botkube/pkgs/container/botkube), e.g., `ghcr.io/kubeshop/botkube:v1.8.0` -### Plugin manager[​](#plugin-manager"DirectlinktoPluginmanager") +### Plugin manager[​](#plugin-manager "Direct link to Plugin manager") The index and archives for open source plugins are stored under a given Botkube GitHub release as [its assets](https://github.com/kubeshop/botkube/releases/tag/v1.8.0): * Plugin index: `https://github.com/kubeshop/botkube/releases/download/{botkube_version}/plugins-index.yaml`, e.g., [https://github.com/kubeshop/botkube/releases/download/v1.8.0/plugins-index.yaml](https://github.com/kubeshop/botkube/releases/download/v1.8.0/plugins-index.yaml) * Plugin archive: `https://github.com/kubeshop/botkube/releases/download/{botkube_version}/{plugin_name_and_arch}.tar.gz` e.g., [https://github.com/kubeshop/botkube/releases/download/v1.8.0/executor\_kubectl\_linux\_amd64.tar.gz](https://github.com/kubeshop/botkube/releases/download/v1.8.0/executor_kubectl_linux_amd64.tar.gz) -* Plugin links can also be found in the `plugins-index.yaml` file. + * Plugin links can also be found in the `plugins-index.yaml` file. For the Botkube Cloud exclusive plugins, we serve plugin index via the Botkube Cloud API (`api.botkube.io`). As we use Google Cloud Storage as the storage provider, all the plugins are fetched from the `https://storage.googleapis.com` origin. During startup, the Botkube Agent downloads plugins index and all enabled plugins. They are stored under the `/tmp` folder mounted as the [`emptyDir`](https://github.com/kubeshop/botkube/blob/release-1.9/helm/botkube/templates/deployment.yaml#L146-L147). There is no Persistent Volume (PV), meaning that when the Agent Pod is, for example, rescheduled to another node, it downloads all dependencies again. To ensure that the [plugin manager](https://docs.botkube.io/architecture/#plugin-manager) does not make external calls, all required plugins must be present. You can achieve this by mounting a Persistent Volume Claim (PVC) at this path. Later, you can mount your Persistent Volume (PV) with cached plugins. -### Plugin dependencies[​](#plugin-dependencies"DirectlinktoPlugindependencies") +### Plugin dependencies[​](#plugin-dependencies "Direct link to Plugin dependencies") Each plugin may define required external dependencies that are downloaded by the [Plugin manager](#plugin-manager) at Agent startup. For now, those dependencies are taken from the official sources and are not mirrored to the Botkube Cloud registry. Here are the links that describe external dependencies for each officially supported plugin: @@ -54,35 +54,35 @@ Each plugin may define required external dependencies that are downloaded by the `helm` plugin: * `helm` dependency: -* [https://get.helm.sh/helm-v3.6.3-darwin-amd64.tar.gz//darwin-amd64](https://get.helm.sh/helm-v3.6.3-darwin-amd64.tar.gz//darwin-amd64) -* [https://get.helm.sh/helm-v3.6.3-darwin-arm64.tar.gz//darwin-arm64](https://get.helm.sh/helm-v3.6.3-darwin-arm64.tar.gz//darwin-arm64) -* [https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz//linux-amd64](https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz//linux-amd64) -* [https://get.helm.sh/helm-v3.6.3-linux-arm64.tar.gz//linux-arm64](https://get.helm.sh/helm-v3.6.3-linux-arm64.tar.gz//linux-arm64) + * [https://get.helm.sh/helm-v3.6.3-darwin-amd64.tar.gz//darwin-amd64](https://get.helm.sh/helm-v3.6.3-darwin-amd64.tar.gz//darwin-amd64) + * [https://get.helm.sh/helm-v3.6.3-darwin-arm64.tar.gz//darwin-arm64](https://get.helm.sh/helm-v3.6.3-darwin-arm64.tar.gz//darwin-arm64) + * [https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz//linux-amd64](https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz//linux-amd64) + * [https://get.helm.sh/helm-v3.6.3-linux-arm64.tar.gz//linux-arm64](https://get.helm.sh/helm-v3.6.3-linux-arm64.tar.gz//linux-arm64) * `exec` plugin: -* `eget` dependency: -* [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin\_amd64.tar.gz//eget-1.3.3-darwin\_amd64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin_amd64.tar.gz//eget-1.3.3-darwin_amd64) -* [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin\_arm64.tar.gz//eget-1.3.3-darwin\_arm64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin_arm64.tar.gz//eget-1.3.3-darwin_arm64) -* [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux\_amd64.tar.gz//eget-1.3.3-linux\_amd64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux_amd64.tar.gz//eget-1.3.3-linux_amd64) -* [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux\_arm64.tar.gz//eget-1.3.3-linux\_arm64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux_arm64.tar.gz//eget-1.3.3-linux_arm64) + * `eget` dependency: + * [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin\_amd64.tar.gz//eget-1.3.3-darwin\_amd64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin_amd64.tar.gz//eget-1.3.3-darwin_amd64) + * [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin\_arm64.tar.gz//eget-1.3.3-darwin\_arm64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin_arm64.tar.gz//eget-1.3.3-darwin_arm64) + * [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux\_amd64.tar.gz//eget-1.3.3-linux\_amd64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux_amd64.tar.gz//eget-1.3.3-linux_amd64) + * [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux\_arm64.tar.gz//eget-1.3.3-linux\_arm64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux_arm64.tar.gz//eget-1.3.3-linux_arm64) * `flux` plugin: -* `flux` dependency: -* [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_darwin\_amd64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_darwin_amd64.tar.gz) -* [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_darwin\_arm64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_darwin_arm64.tar.gz) -* [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_linux\_amd64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_linux_amd64.tar.gz) -* [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_linux\_arm64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_linux_arm64.tar.gz) -* `gh` dependency: -* [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_macOS\_amd64.zip//gh\_2.32.1\_macOS\_amd64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_amd64.zip//gh_2.32.1_macOS_amd64/bin) -* [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_macOS\_arm64.zip//gh\_2.32.1\_macOS\_arm64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_arm64.zip//gh_2.32.1_macOS_arm64/bin) -* [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_linux\_amd64.tar.gz//gh\_2.32.1\_linux\_amd64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_amd64.tar.gz//gh_2.32.1_linux_amd64/bin) -* [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_linux\_arm64.tar.gz//gh\_2.32.1\_linux\_arm64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_arm64.tar.gz//gh_2.32.1_linux_arm64/bin) + * `flux` dependency: + * [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_darwin\_amd64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_darwin_amd64.tar.gz) + * [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_darwin\_arm64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_darwin_arm64.tar.gz) + * [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_linux\_amd64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_linux_amd64.tar.gz) + * [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_linux\_arm64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_linux_arm64.tar.gz) + * `gh` dependency: + * [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_macOS\_amd64.zip//gh\_2.32.1\_macOS\_amd64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_amd64.zip//gh_2.32.1_macOS_amd64/bin) + * [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_macOS\_arm64.zip//gh\_2.32.1\_macOS\_arm64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_arm64.zip//gh_2.32.1_macOS_arm64/bin) + * [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_linux\_amd64.tar.gz//gh\_2.32.1\_linux\_amd64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_amd64.tar.gz//gh_2.32.1_linux_amd64/bin) + * [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_linux\_arm64.tar.gz//gh\_2.32.1\_linux\_arm64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_arm64.tar.gz//gh_2.32.1_linux_arm64/bin) If a plugin is not listed here, then it doesn't have any external dependencies. -### Analytics[​](#analytics"DirectlinktoAnalytics") +### Analytics[​](#analytics "Direct link to Analytics") The Agent uses the official [Go SDK](https://github.com/segmentio/analytics-go) to send anonymous analytics to [https://segment.io.](https://segment.io./) This library is sending a POST request on the `https://api.segment.io` endpoint. -### Control-plane connection[​](#control-plane-connection"DirectlinktoControl-planeconnection") +### Control-plane connection[​](#control-plane-connection "Direct link to Control-plane connection") The Agent communicates with the Cloud control-plane using GraphQL. All requests are executed as a `POST` request on the `https://api.botkube.io/graphql` endpoint. We use that connection to: @@ -90,31 +90,31 @@ The Agent communicates with the Cloud control-plane using GraphQL. All requests * Send audit logs * Periodically send Agent heartbeat * Watch configuration changes -* all changes e.g., changing plugin configuration done on the Cloud UI Dashboard triggers Agent restart with 1 min (polling is used) + * all changes e.g., changing plugin configuration done on the Cloud UI Dashboard triggers Agent restart with 1 min (polling is used) -#### Security[​](#security"DirectlinktoSecurity") +#### Security[​](#security "Direct link to Security") The `https://api.botkube.io/graphql` endpoint is protected by JWT tokens. For the Agent, we use machine API tokens that are issued separately for each [Botkube Instance](#botkube-instance). This token allows you to work only in the context of a given Instance. -### Cloud Teams connection[​](#cloud-teams-connection"DirectlinktoCloudTeamsconnection") +### Cloud Teams connection[​](#cloud-teams-connection "Direct link to Cloud Teams connection") The Cloud Teams platform communicates only with the Botkube control-plane using gRPC (HTTP/2 connection). For gRPC, TLS is enabled. We use [bidirectional streaming RPC](https://grpc.io/docs/what-is-grpc/core-concepts/#bidirectional-streaming-rpc%7D) to send the user `@Botkube` commands to the Agent and send Agent responses back to the Cloud control-plane. -#### Security[​](#security-1"DirectlinktoSecurity") +#### Security[​](#security-1 "Direct link to Security") The `teams.botkube.io:50054` connection is protected by machine API tokens that are issued separately for each [Botkube Instance](#botkube-instance). This token allows you to work only in the context of a given Instance. -Concurrency Limits[​](#concurrency-limits"DirectlinktoConcurrencyLimits") +Concurrency Limits[​](#concurrency-limits "Direct link to Concurrency Limits") ------------------------------------------------------------------------------ Concurrency limits restrict the number of simultaneous connections to our Cloud Teams router. You are allowed a maximum of 2 concurrent connections to support rollback updates. -Rate Limiting[​](#rate-limiting"DirectlinktoRateLimiting") +Rate Limiting[​](#rate-limiting "Direct link to Rate Limiting") --------------------------------------------------------------- Rate limiting controls the frequency of requests that a component can send or receive. Rate limiting protects the Cloud Teams Router from misconfigured installations that may overload the system. Rate limiting is based on the Agent’s Instance ID. **We drop any messages that exceed the limit and do not push them into Pub/Sub.** You are allowed a maximum of 20 requests per second. -Cloud Dashboard[​](#cloud-dashboard"DirectlinktoCloudDashboard") +Cloud Dashboard[​](#cloud-dashboard "Direct link to Cloud Dashboard") --------------------------------------------------------------------- Such constrains applies in the context of the Cloud organization: @@ -126,15 +126,15 @@ Such constrains applies in the context of the Cloud organization: 5. A user can be a member of multiple organizations. 6. Instances are always scoped to a given organization. -Useful links[​](#useful-links"DirectlinktoUsefullinks") +Useful links[​](#useful-links "Direct link to Useful links") ------------------------------------------------------------ * [Botkube Agent architecture](https://docs.botkube.io/architecture/) * [Cloud Teams installation tutorial](https://docs.botkube.io/installation/teams/) -Terminology[​](#terminology"DirectlinktoTerminology") +Terminology[​](#terminology "Direct link to Terminology") --------------------------------------------------------- -### Botkube Instance[​](#botkube-instance"DirectlinktoBotkubeInstance") +### Botkube Instance[​](#botkube-instance "Direct link to Botkube Instance") A Botkube Instance is created on the Botkube Cloud side and holds the Botkube Agent configuration. diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube.md index 5b6c8a7d..bbe5b06a 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube.md @@ -5,4 +5,4 @@ URL Source: https://docs.botkube.io/cli/commands/botkube Markdown Content: A utility that simplifies working with Botkube. --h, --help help for botkube -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + -h, --help help for botkube -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config.md index 48099b5c..027e6dcc 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config.md @@ -3,18 +3,20 @@ Title: botkube config | Botkube URL Source: https://docs.botkube.io/cli/commands/botkube_config Markdown Content: -botkube config[​](#botkube-config"Directlinktobotkubeconfig") +botkube config[​](#botkube-config "Direct link to botkube config") ------------------------------------------------------------------ This command consists of multiple subcommands for working with Botkube configuration -### Options[​](#options"DirectlinktoOptions") +### Options[​](#options "Direct link to Options") --h, --help help for config + -h, --help help for config -### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") +### Options inherited from parent commands[​](#options-inherited-from-parent-commands "Direct link to Options inherited from parent commands") --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + +### SEE ALSO[​](#see-also "Direct link to SEE ALSO") * [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI * [botkube config get](https://docs.botkube.io/cli/commands/botkube_config_get) - Displays Botkube configuration diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config_get.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config_get.md index 677f2c57..eb0ebdb2 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config_get.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config_get.md @@ -5,21 +5,25 @@ URL Source: https://docs.botkube.io/cli/commands/botkube_config_get Markdown Content: Version: 1.10 -botkube config get[​](#botkube-config-get"Directlinktobotkubeconfigget") +botkube config get[​](#botkube-config-get "Direct link to botkube config get") ------------------------------------------------------------------------------ Displays Botkube configuration -botkube config get [flags] ### Examples[​](#examples"DirectlinktoExamples") + botkube config get [flags] -# Show configuration for currently installed Botkubebotkube config get# Show configuration in JSON formatbotkube config get -ojson# Save configuration in filebotkube config get > config.yaml +### Examples[​](#examples "Direct link to Examples") -### Options[​](#options"DirectlinktoOptions") + # Show configuration for currently installed Botkubebotkube config get# Show configuration in JSON formatbotkube config get -ojson# Save configuration in filebotkube config get > config.yaml ---cfg-exporter-image-registry string Registry for the Config Exporter job image (default "ghcr.io") --cfg-exporter-image-repo string Repository for the Config Exporter job image (default "kubeshop/botkube-config-exporter") --cfg-exporter-image-tag string Tag of the Config Exporter job image (default "v9.99.9-dev") --cfg-exporter-poll-period duration Interval used to check if Config Exporter job was finished (default 1s) --cfg-exporter-timeout duration Maximum execution time for the Config Exporter job (default 1m0s) --cloud-env-api-key string API key environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_API_KEY") --cloud-env-endpoint string Endpoint environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_ENDPOINT") --cloud-env-id string Identifier environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_IDENTIFIER") -h, --help help for get -l, --label string Label used for identifying the Botkube pod (default "app=botkube") -n, --namespace string Namespace of Botkube pod (default "botkube") --omit-empty-values Omits empty keys from printed configuration (default true) -o, --output string Output format. One of: json | yaml (default "yaml") +### Options[​](#options "Direct link to Options") -### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + --cfg-exporter-image-registry string Registry for the Config Exporter job image (default "ghcr.io") --cfg-exporter-image-repo string Repository for the Config Exporter job image (default "kubeshop/botkube-config-exporter") --cfg-exporter-image-tag string Tag of the Config Exporter job image (default "v9.99.9-dev") --cfg-exporter-poll-period duration Interval used to check if Config Exporter job was finished (default 1s) --cfg-exporter-timeout duration Maximum execution time for the Config Exporter job (default 1m0s) --cloud-env-api-key string API key environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_API_KEY") --cloud-env-endpoint string Endpoint environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_ENDPOINT") --cloud-env-id string Identifier environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_IDENTIFIER") -h, --help help for get -l, --label string Label used for identifying the Botkube pod (default "app=botkube") -n, --namespace string Namespace of Botkube pod (default "botkube") --omit-empty-values Omits empty keys from printed configuration (default true) -o, --output string Output format. One of: json | yaml (default "yaml") --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") +### Options inherited from parent commands[​](#options-inherited-from-parent-commands "Direct link to Options inherited from parent commands") + + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + +### SEE ALSO[​](#see-also "Direct link to SEE ALSO") * [botkube config](https://docs.botkube.io/cli/commands/botkube_config) - This command consists of multiple subcommands for working with Botkube configuration diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_install.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_install.md index 13b0e2c8..8569aaa9 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_install.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_install.md @@ -5,8 +5,8 @@ URL Source: https://docs.botkube.io/cli/commands/botkube_install Markdown Content: Use this command to install or upgrade the Botkube agent. -# Install latest stable Botkube versionbotkube install# Install Botkube 0.1.0 versionbotkube install --version 0.1.0# Install Botkube from local git repository. Needs to be run from the main directory.botkube install --repo @local + # Install latest stable Botkube versionbotkube install# Install Botkube 0.1.0 versionbotkube install --version 0.1.0# Install Botkube from local git repository. Needs to be run from the main directory.botkube install --repo @local ---atomic If set, process rolls back changes made in case of failed install/upgrade. The --wait flag will be set automatically if --atomic is used -y, --auto-approve Skips interactive approval when upgrade is required. --chart-name string Botkube Helm chart name. (default "botkube") --dependency-update Update dependencies if they are missing before installing the chart --description string add a custom description --disable-openapi-validation If set, it will not validate rendered templates against the Kubernetes OpenAPI Schema --dry-run Simulate an installation --force Force resource updates through a replacement strategy -h, --help help for install --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. --namespace string Botkube installation namespace. (default "botkube") --no-hooks Disable pre/post install/upgrade hooks --release-name string Botkube Helm chart release name. (default "botkube") --render-subchart-notes If set, render subchart notes along with the parent --repo string Botkube Helm chart repository location. It can be relative path to current working directory or URL. Use @stable tag to select repository which holds the stable Helm chart versions. (default "https://charts.botkube.io/") --reset-values When upgrading, reset the values to the ones built into the chart --reuse-values When upgrading, reuse the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' is specified, this is ignored --set stringArray Set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --set-file stringArray Set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2) --set-json stringArray Set JSON values on the command line (can specify multiple or separate values with commas: key1=jsonval1,key2=jsonval2) --set-literal stringArray Set a literal STRING value on the command line --set-string stringArray Set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --skip-crds If set, no CRDs will be installed. --timeout duration Maximum time during which the Botkube installation is being watched, where "0" means "infinite". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". (default 10m0s) -f, --values strings Specify values in a YAML file or a URL (can specify multiple) --version string Botkube version. Possible values @latest, 1.2.0, ... (default "@latest") -w, --watch --timeout Watches the status of the Botkube installation until it finish or the defined --timeout occurs. (default true) + --atomic If set, process rolls back changes made in case of failed install/upgrade. The --wait flag will be set automatically if --atomic is used -y, --auto-approve Skips interactive approval when upgrade is required. --chart-name string Botkube Helm chart name. (default "botkube") --dependency-update Update dependencies if they are missing before installing the chart --description string add a custom description --disable-openapi-validation If set, it will not validate rendered templates against the Kubernetes OpenAPI Schema --dry-run Simulate an installation --force Force resource updates through a replacement strategy -h, --help help for install --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. --namespace string Botkube installation namespace. (default "botkube") --no-hooks Disable pre/post install/upgrade hooks --release-name string Botkube Helm chart release name. (default "botkube") --render-subchart-notes If set, render subchart notes along with the parent --repo string Botkube Helm chart repository location. It can be relative path to current working directory or URL. Use @stable tag to select repository which holds the stable Helm chart versions. (default "https://charts.botkube.io/") --reset-values When upgrading, reset the values to the ones built into the chart --reuse-values When upgrading, reuse the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' is specified, this is ignored --set stringArray Set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --set-file stringArray Set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2) --set-json stringArray Set JSON values on the command line (can specify multiple or separate values with commas: key1=jsonval1,key2=jsonval2) --set-literal stringArray Set a literal STRING value on the command line --set-string stringArray Set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --skip-crds If set, no CRDs will be installed. --timeout duration Maximum time during which the Botkube installation is being watched, where "0" means "infinite". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". (default 10m0s) -f, --values strings Specify values in a YAML file or a URL (can specify multiple) --version string Botkube version. Possible values @latest, 1.2.0, ... (default "@latest") -w, --watch --timeout Watches the status of the Botkube installation until it finish or the defined --timeout occurs. (default true) --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_login.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_login.md index 030ef726..be224b7e 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_login.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_login.md @@ -3,21 +3,25 @@ Title: botkube login | Botkube URL Source: https://docs.botkube.io/cli/commands/botkube_login Markdown Content: -botkube login[​](#botkube-login"Directlinktobotkubelogin") +botkube login[​](#botkube-login "Direct link to botkube login") --------------------------------------------------------------- Login to a Botkube Cloud -botkube login [OPTIONS] [flags] ### Examples[​](#examples"DirectlinktoExamples") + botkube login [OPTIONS] [flags] -# start interactive setupbotkube login +### Examples[​](#examples "Direct link to Examples") -### Options[​](#options"DirectlinktoOptions") + # start interactive setupbotkube login ---cloud-dashboard-url string Botkube Cloud URL (default "https://app.botkube.io") -h, --help help for login --local-server-addr string Address of a local server which is used for the login flow (default "localhost:8085") +### Options[​](#options "Direct link to Options") -### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + --cloud-dashboard-url string Botkube Cloud URL (default "https://app.botkube.io") -h, --help help for login --local-server-addr string Address of a local server which is used for the login flow (default "localhost:8085") --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") +### Options inherited from parent commands[​](#options-inherited-from-parent-commands "Direct link to Options inherited from parent commands") + + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + +### SEE ALSO[​](#see-also "Direct link to SEE ALSO") * [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_migrate.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_migrate.md index 7b1b7126..94cdb7cc 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_migrate.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_migrate.md @@ -7,6 +7,6 @@ Automatically migrates Botkube installation to Botkube Cloud. This command will Use label selector to choose which Botkube pod you want to migrate. By default it's set to app=botkube. --y, --auto-approve Skips interactive approval for upgrading Botkube installation. --cfg-exporter-image-registry string Registry for the Config Exporter job image (default "ghcr.io") --cfg-exporter-image-repo string Repository for the Config Exporter job image (default "kubeshop/botkube-config-exporter") --cfg-exporter-image-tag string Tag of the Config Exporter job image (default "v9.99.9-dev") --cfg-exporter-poll-period duration Interval used to check if Config Exporter job was finished (default 1s) --cfg-exporter-timeout duration Maximum execution time for the Config Exporter job (default 1m0s) --cloud-api-url string Botkube Cloud API URL (default "https://api.botkube.io/graphql") --cloud-dashboard-url string Botkube Cloud URL (default "https://app.botkube.io") --cloud-env-api-key string API key environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_API_KEY") --cloud-env-endpoint string Endpoint environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_ENDPOINT") --cloud-env-id string Identifier environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_IDENTIFIER") -h, --help help for migrate --image-tag string Botkube image tag, e.g. "latest" or "v1.7.0" --instance-name string Botkube Cloud Instance name that will be created --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. -l, --label string Label used for identifying the Botkube pod (default "app=botkube") -n, --namespace string Namespace of Botkube pod (default "botkube") -q, --skip-connect Skips connecting to Botkube Cloud after migration --skip-open-browser Skips opening web browser after migration --timeout duration Maximum time during which the Botkube installation is being watched, where "0" means "infinite". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". (default 10m0s) --token string Botkube Cloud authentication token -w, --watch --timeout Watches the status of the Botkube installation until it finish or the defined --timeout occurs. (default true) + -y, --auto-approve Skips interactive approval for upgrading Botkube installation. --cfg-exporter-image-registry string Registry for the Config Exporter job image (default "ghcr.io") --cfg-exporter-image-repo string Repository for the Config Exporter job image (default "kubeshop/botkube-config-exporter") --cfg-exporter-image-tag string Tag of the Config Exporter job image (default "v9.99.9-dev") --cfg-exporter-poll-period duration Interval used to check if Config Exporter job was finished (default 1s) --cfg-exporter-timeout duration Maximum execution time for the Config Exporter job (default 1m0s) --cloud-api-url string Botkube Cloud API URL (default "https://api.botkube.io/graphql") --cloud-dashboard-url string Botkube Cloud URL (default "https://app.botkube.io") --cloud-env-api-key string API key environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_API_KEY") --cloud-env-endpoint string Endpoint environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_ENDPOINT") --cloud-env-id string Identifier environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_IDENTIFIER") -h, --help help for migrate --image-tag string Botkube image tag, e.g. "latest" or "v1.7.0" --instance-name string Botkube Cloud Instance name that will be created --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. -l, --label string Label used for identifying the Botkube pod (default "app=botkube") -n, --namespace string Namespace of Botkube pod (default "botkube") -q, --skip-connect Skips connecting to Botkube Cloud after migration --skip-open-browser Skips opening web browser after migration --timeout duration Maximum time during which the Botkube installation is being watched, where "0" means "infinite". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". (default 10m0s) --token string Botkube Cloud authentication token -w, --watch --timeout Watches the status of the Botkube installation until it finish or the defined --timeout occurs. (default true) --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry.md index 9150b3c2..622b51da 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry.md @@ -3,18 +3,20 @@ Title: botkube telemetry | Botkube URL Source: https://docs.botkube.io/cli/commands/botkube_telemetry Markdown Content: -botkube telemetry[​](#botkube-telemetry"Directlinktobotkubetelemetry") +botkube telemetry[​](#botkube-telemetry "Direct link to botkube telemetry") --------------------------------------------------------------------------- Configure collection of anonymous analytics -### Options[​](#options"DirectlinktoOptions") +### Options[​](#options "Direct link to Options") --h, --help help for telemetry + -h, --help help for telemetry -### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") +### Options inherited from parent commands[​](#options-inherited-from-parent-commands "Direct link to Options inherited from parent commands") --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + +### SEE ALSO[​](#see-also "Direct link to SEE ALSO") * [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI * [botkube telemetry disable](https://docs.botkube.io/cli/commands/botkube_telemetry_disable) - Disable Botkube telemetry diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_disable.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_disable.md index 5cc8fa1f..5be87d32 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_disable.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_disable.md @@ -5,21 +5,25 @@ URL Source: https://docs.botkube.io/cli/commands/botkube_telemetry_disable Markdown Content: Version: 1.10 -botkube telemetry disable[​](#botkube-telemetry-disable"Directlinktobotkubetelemetrydisable") +botkube telemetry disable[​](#botkube-telemetry-disable "Direct link to botkube telemetry disable") --------------------------------------------------------------------------------------------------- Disable Botkube telemetry -botkube telemetry disable [flags] ### Examples[​](#examples"DirectlinktoExamples") + botkube telemetry disable [flags] -# To improve the user experience, Botkube collects anonymized data.# It does not collect any identifying information, and all analytics# are used only as aggregated collection of data to improve Botkube# and adjust its roadmap.# Read our privacy policy at https://docs.botkube.io/privacy# The Botkube CLI tool collects anonymous usage analytics.# This data is only available to the Botkube authors and helps us improve the tool.# Disable Botkube telemetrybotkube telemetry disable +### Examples[​](#examples "Direct link to Examples") -### Options[​](#options"DirectlinktoOptions") + # To improve the user experience, Botkube collects anonymized data.# It does not collect any identifying information, and all analytics# are used only as aggregated collection of data to improve Botkube# and adjust its roadmap.# Read our privacy policy at https://docs.botkube.io/privacy# The Botkube CLI tool collects anonymous usage analytics.# This data is only available to the Botkube authors and helps us improve the tool.# Disable Botkube telemetrybotkube telemetry disable --h, --help help for disable +### Options[​](#options "Direct link to Options") -### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + -h, --help help for disable --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") +### Options inherited from parent commands[​](#options-inherited-from-parent-commands "Direct link to Options inherited from parent commands") + + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + +### SEE ALSO[​](#see-also "Direct link to SEE ALSO") * [botkube telemetry](https://docs.botkube.io/cli/commands/botkube_telemetry) - Configure collection of anonymous analytics diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_enable.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_enable.md index f2024d5e..fa5c6916 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_enable.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_enable.md @@ -5,21 +5,25 @@ URL Source: https://docs.botkube.io/cli/commands/botkube_telemetry_enable Markdown Content: Version: 1.10 -botkube telemetry enable[​](#botkube-telemetry-enable"Directlinktobotkubetelemetryenable") +botkube telemetry enable[​](#botkube-telemetry-enable "Direct link to botkube telemetry enable") ------------------------------------------------------------------------------------------------ Enable Botkube telemetry -botkube telemetry enable [flags] ### Examples[​](#examples"DirectlinktoExamples") + botkube telemetry enable [flags] -# To improve the user experience, Botkube collects anonymized data.# It does not collect any identifying information, and all analytics# are used only as aggregated collection of data to improve Botkube# and adjust its roadmap.# Read our privacy policy at https://docs.botkube.io/privacy# Enable Botkube telemetrybotkube telemetry enable +### Examples[​](#examples "Direct link to Examples") -### Options[​](#options"DirectlinktoOptions") + # To improve the user experience, Botkube collects anonymized data.# It does not collect any identifying information, and all analytics# are used only as aggregated collection of data to improve Botkube# and adjust its roadmap.# Read our privacy policy at https://docs.botkube.io/privacy# Enable Botkube telemetrybotkube telemetry enable --h, --help help for enable +### Options[​](#options "Direct link to Options") -### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + -h, --help help for enable --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") +### Options inherited from parent commands[​](#options-inherited-from-parent-commands "Direct link to Options inherited from parent commands") + + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + +### SEE ALSO[​](#see-also "Direct link to SEE ALSO") * [botkube telemetry](https://docs.botkube.io/cli/commands/botkube_telemetry) - Configure collection of anonymous analytics diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_uninstall.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_uninstall.md index a1f4e84c..94485b79 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_uninstall.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_uninstall.md @@ -5,25 +5,29 @@ URL Source: https://docs.botkube.io/cli/commands/botkube_uninstall Markdown Content: Version: 1.10 -botkube uninstall[​](#botkube-uninstall"Directlinktobotkubeuninstall") +botkube uninstall[​](#botkube-uninstall "Direct link to botkube uninstall") --------------------------------------------------------------------------- uninstall Botkube from cluster -### Synopsis[​](#synopsis"DirectlinktoSynopsis") +### Synopsis[​](#synopsis "Direct link to Synopsis") Use this command to uninstall the Botkube agent. -botkube uninstall [OPTIONS] [flags] ### Examples[​](#examples"DirectlinktoExamples") + botkube uninstall [OPTIONS] [flags] -# Uninstall default Botkube Helm releasebotkube uninstall# Uninstall specific Botkube Helm releasebotkube uninstall --release-name botkube-dev +### Examples[​](#examples "Direct link to Examples") -### Options[​](#options"DirectlinktoOptions") + # Uninstall default Botkube Helm releasebotkube uninstall# Uninstall specific Botkube Helm releasebotkube uninstall --release-name botkube-dev --y, --auto-approve Skips interactive approval for deletion. --cascade string Must be "background", "orphan", or "foreground". Selects the deletion cascading strategy for the dependents. Defaults to background. (default "background") --description string add a custom description --dry-run Simulate an uninstallation -h, --help help for uninstall --keep-history remove all associated resources and mark the release as deleted, but retain the release history --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. --namespace string Botkube namespace. (default "botkube") --no-hooks prevent hooks from running during uninstallation --release-name string Botkube Helm release name. (default "botkube") --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) --wait if set, will wait until all the resources are deleted before returning. It will wait for as long as --timeout (default true) +### Options[​](#options "Direct link to Options") -### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + -y, --auto-approve Skips interactive approval for deletion. --cascade string Must be "background", "orphan", or "foreground". Selects the deletion cascading strategy for the dependents. Defaults to background. (default "background") --description string add a custom description --dry-run Simulate an uninstallation -h, --help help for uninstall --keep-history remove all associated resources and mark the release as deleted, but retain the release history --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. --namespace string Botkube namespace. (default "botkube") --no-hooks prevent hooks from running during uninstallation --release-name string Botkube Helm release name. (default "botkube") --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) --wait if set, will wait until all the resources are deleted before returning. It will wait for as long as --timeout (default true) --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") +### Options inherited from parent commands[​](#options-inherited-from-parent-commands "Direct link to Options inherited from parent commands") + + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + +### SEE ALSO[​](#see-also "Direct link to SEE ALSO") * [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_version.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_version.md index f7b88b68..356b9178 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_version.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_version.md @@ -3,21 +3,25 @@ Title: botkube version | Botkube URL Source: https://docs.botkube.io/cli/commands/botkube_version Markdown Content: -botkube version[​](#botkube-version"Directlinktobotkubeversion") +botkube version[​](#botkube-version "Direct link to botkube version") --------------------------------------------------------------------- Print the CLI version -botkube version [flags] ### Examples[​](#examples"DirectlinktoExamples") + botkube version [flags] -botkube versionbotkube version -o=jsonbotkube version -o=yamlbotkube version -o=short +### Examples[​](#examples "Direct link to Examples") -### Options[​](#options"DirectlinktoOptions") + botkube versionbotkube version -o=jsonbotkube version -o=yamlbotkube version -o=short --h, --help help for version -o, --output string Output format. One of: json | pretty | short | yaml (default "pretty") +### Options[​](#options "Direct link to Options") -### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + -h, --help help for version -o, --output string Output format. One of: json | pretty | short | yaml (default "pretty") --v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") +### Options inherited from parent commands[​](#options-inherited-from-parent-commands "Direct link to Options inherited from parent commands") + + -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) + +### SEE ALSO[​](#see-also "Direct link to SEE ALSO") * [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__getting-started.md b/hack/assistant-setup/content/docs.botkube.io__cli__getting-started.md index 28b3e7fb..364335c6 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__getting-started.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__getting-started.md @@ -7,7 +7,7 @@ Version: 1.10 Botkube includes a command-line interface (CLI) that you can use to interact with Botkube and Botkube Cloud from your terminal, or from a script. -Installation[​](#installation"DirectlinktoInstallation") +Installation[​](#installation "Direct link to Installation") ------------------------------------------------------------ Select tab depending on the system you use: @@ -20,15 +20,15 @@ Select tab depending on the system you use: Use [Homebrew](https://brew.sh/) to install the latest Botkube CLI: -brew install kubeshop/botkube/botkube + brew install kubeshop/botkube/botkube * * * Alternatively, download the Botkube CLI binary and move it to a directory under your `$PATH`: -curl -Lo botkube https://github.com/kubeshop/botkube/releases/download/v1.10.0/botkube-darwin-arm64chmod +x botkube && mv botkube /usr/local/bin/botkube + curl -Lo botkube https://github.com/kubeshop/botkube/releases/download/v1.10.0/botkube-darwin-arm64chmod +x botkube && mv botkube /usr/local/bin/botkube -First use[​](#first-use"DirectlinktoFirstuse") +First use[​](#first-use "Direct link to First use") --------------------------------------------------- For the commands that are nested under `cloud` command you first need to authenticate with Botkube cloud by running: @@ -37,12 +37,12 @@ If credentials are valid, the output is: All available commands you can simply discover by running `botkube --help` or `botkube -h` to see the help output which corresponds to a given command. -Autocompletion[​](#autocompletion"DirectlinktoAutocompletion") +Autocompletion[​](#autocompletion "Direct link to Autocompletion") ------------------------------------------------------------------ To learn how to enable autocompletion for your shell, run: -botkube completion --help + botkube completion --help > **NOTE:** Be sure to **restart your shell** after installing autocompletion. diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__migrating-installation-to-botkube-cloud.md b/hack/assistant-setup/content/docs.botkube.io__cli__migrating-installation-to-botkube-cloud.md index 94d017ce..746ba4da 100644 --- a/hack/assistant-setup/content/docs.botkube.io__cli__migrating-installation-to-botkube-cloud.md +++ b/hack/assistant-setup/content/docs.botkube.io__cli__migrating-installation-to-botkube-cloud.md @@ -3,7 +3,7 @@ Title: Migrating installation to Botkube Cloud | Botkube URL Source: https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud Markdown Content: -Migrating installation to Botkube Cloud[​](#migrating-installation-to-botkube-cloud"DirectlinktoMigratinginstallationtoBotkubeCloud") +Migrating installation to Botkube Cloud[​](#migrating-installation-to-botkube-cloud "Direct link to Migrating installation to Botkube Cloud") --------------------------------------------------------------------------------------------------------------------------------------------- If you have started using Botkube with the Open Source installation, you have the option to migrate this instance to be managed using [Botkube Cloud](https://app.botkube.io/). @@ -16,17 +16,17 @@ Supported Botkube platforms: * Discord * Mattermost -Steps[​](#steps"DirectlinktoSteps") +Steps[​](#steps "Direct link to Steps") --------------------------------------- 1. [Install Botkube CLI](https://docs.botkube.io/cli/getting-started#installation) - + 2. [Login into Botkube Cloud](https://docs.botkube.io/cli/getting-started#first-use) - + 3. Run Botkube migrate: + - -Limitations[​](#limitations"DirectlinktoLimitations") +Limitations[​](#limitations "Direct link to Limitations") --------------------------------------------------------- The following list contains current limitations that we will address in the near future: @@ -36,7 +36,7 @@ The following list contains current limitations that we will address in the near * All 3rd-party plugins are ignored. * Minimal supported Botkube version is v1.0.0. -See more[​](#see-more"DirectlinktoSeemore") +See more[​](#see-more "Direct link to See more") ------------------------------------------------ To learn more about `botkube cloud migrate` and all supported settings, visit the [Botkube migrate](https://docs.botkube.io/cli/commands/botkube_migrate) document. diff --git a/hack/assistant-setup/content/docs.botkube.io__community__contribute.md b/hack/assistant-setup/content/docs.botkube.io__community__contribute.md index edde91af..9a9301f4 100644 --- a/hack/assistant-setup/content/docs.botkube.io__community__contribute.md +++ b/hack/assistant-setup/content/docs.botkube.io__community__contribute.md @@ -3,104 +3,112 @@ Title: Contribute | Botkube URL Source: https://docs.botkube.io/community/contribute/ Markdown Content: -* [](https://docs.botkube.io/) * Contribute How to Contribute to Botkube ---------------------------- We'd love your help! Botkube is [MIT Licensed](https://github.com/kubeshop/botkube/blob/main/LICENSE) and accepts contributions via GitHub pull requests. This document outlines conventions on development workflow, commit message formatting, contact points and other resources to make it easier to get your contributions accepted. +* [](https://docs.botkube.io/) +* Contribute -We gratefully welcome improvements to [documentation](https://docs.botkube.io/"Gotodocumentationsite") as well as to code. +How to Contribute to Botkube +---------------------------- -Contributing to documentation[​](#contributing-to-documentation"DirectlinktoContributingtodocumentation") +We'd love your help! + +Botkube is [MIT Licensed](https://github.com/kubeshop/botkube/blob/main/LICENSE) and accepts contributions via GitHub pull requests. This document outlines conventions on development workflow, commit message formatting, contact points and other resources to make it easier to get your contributions accepted. + +We gratefully welcome improvements to [documentation](https://docs.botkube.io/ "Go to documentation site") as well as to code. + +Contributing to documentation[​](#contributing-to-documentation "Direct link to Contributing to documentation") --------------------------------------------------------------------------------------------------------------- Follow the [botkube-docs/CONTRIBUTING.md](https://github.com/kubeshop/botkube-docs/blob/main/CONTRIBUTING.md) file to learn how to contribute to documentation. -Build and run Botkube from source code[​](#build-and-run-botkube-from-source-code"DirectlinktoBuildandrunBotkubefromsourcecode") +Build and run Botkube from source code[​](#build-and-run-botkube-from-source-code "Direct link to Build and run Botkube from source code") ------------------------------------------------------------------------------------------------------------------------------------------ This section describes how to build and run Botkube from source code. -### Prerequisite[​](#prerequisite"DirectlinktoPrerequisite") +### Prerequisite[​](#prerequisite "Direct link to Prerequisite") * [Go](https://go.dev/), at least 1.18 - + * `make` - + * [Docker](https://docs.docker.com/install/) - + * Kubernetes cluster, at least 1.21 - + * Cloned Botkube repository + + Use the following command to clone it: + + git clone https://github.com/kubeshop/botkube.git + -Use the following command to clone it: - -git clone https://github.com/kubeshop/botkube.git - - -### Build and install on Kubernetes[​](#build-and-install-on-kubernetes"DirectlinktoBuildandinstallonKubernetes") +### Build and install on Kubernetes[​](#build-and-install-on-kubernetes "Direct link to Build and install on Kubernetes") 1. Build Botkube and create a new container image tagged as `ghcr.io/kubeshop/botkube:v9.99.9-dev`. Choose one option: - -* **Single target build for your local K8s cluster** - -This is ideal for running Botkube on a local cluster, e.g. using [kind](https://kind.sigs.k8s.io/) or [`minikube`](https://minikube.sigs.k8s.io/docs/). - -Remember to set the `IMAGE_PLATFORM` env var to your target architecture. By default, the build targets `linux/amd64`. - -For example, the command below builds the `linux/arm64` target: - -IMAGE_PLATFORM=linux/arm64 make container-image-singledocker tag ghcr.io/kubeshop/botkube:v9.99.9-dev {your_account}/botkube:v9.99.9-devdocker push {your_account}/botkube:v9.99.9-dev - -Where `{your_account}` is Docker hub or any other registry provider account to which you can push the image. - -* **Multi-arch target builds for any K8s cluster** - -This is ideal for running Botkube on remote clusters. - -When tagging your dev image take care to add your target image architecture as a suffix. For example, in the command below we added `-amd64` as our target architecture. - -This ensures the image will run correctly on the target K8s cluster. - -> **Note** This command takes some time to run as it builds the images for multiple architectures. - -make container-imagedocker tag ghcr.io/kubeshop/botkube:v9.99.9-dev-amd64 {your_account}/botkube:v9.99.9-devdocker push {your_account}/botkube:v9.99.9-dev - -Where `{your_account}` is Docker hub or any other registry provider account to which you can push the image. - + + * **Single target build for your local K8s cluster** + + This is ideal for running Botkube on a local cluster, e.g. using [kind](https://kind.sigs.k8s.io/) or [`minikube`](https://minikube.sigs.k8s.io/docs/). + + Remember to set the `IMAGE_PLATFORM` env var to your target architecture. By default, the build targets `linux/amd64`. + + For example, the command below builds the `linux/arm64` target: + + IMAGE_PLATFORM=linux/arm64 make container-image-singledocker tag ghcr.io/kubeshop/botkube:v9.99.9-dev {your_account}/botkube:v9.99.9-devdocker push {your_account}/botkube:v9.99.9-dev + + Where `{your_account}` is Docker hub or any other registry provider account to which you can push the image. + + * **Multi-arch target builds for any K8s cluster** + + This is ideal for running Botkube on remote clusters. + + When tagging your dev image take care to add your target image architecture as a suffix. For example, in the command below we added `-amd64` as our target architecture. + + This ensures the image will run correctly on the target K8s cluster. + + > **Note** This command takes some time to run as it builds the images for multiple architectures. + + make container-imagedocker tag ghcr.io/kubeshop/botkube:v9.99.9-dev-amd64 {your_account}/botkube:v9.99.9-devdocker push {your_account}/botkube:v9.99.9-dev + + Where `{your_account}` is Docker hub or any other registry provider account to which you can push the image. + 2. Install Botkube with any of communication platform configured, according to [the installation instructions](https://docs.botkube.io/installation/). During the Helm chart installation step, set the following flags: + + export IMAGE_REGISTRY="{imageRegistry}" # e.g. docker.ioexport IMAGE_PULL_POLICY="{pullPolicy}" # e.g. Always or IfNotPresent--set image.registry=${IMAGE_REGISTRY} \--set image.repository={your_account}/botkube \--set image.tag=v9.99.9-dev \--set image.pullPolicy=${IMAGE_PULL_POLICY} + + Check [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) for default options. + -export IMAGE_REGISTRY="{imageRegistry}" # e.g. docker.ioexport IMAGE_PULL_POLICY="{pullPolicy}" # e.g. Always or IfNotPresent--set image.registry=${IMAGE_REGISTRY} \--set image.repository={your_account}/botkube \--set image.tag=v9.99.9-dev \--set image.pullPolicy=${IMAGE_PULL_POLICY} - -Check [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) for default options. - - -### Build and run locally[​](#build-and-run-locally"DirectlinktoBuildandrunlocally") +### Build and run locally[​](#build-and-run-locally "Direct link to Build and run locally") For faster development, you can also build and run Botkube outside K8s cluster. 1. Build Botkube local binary: - -# Fetch the dependenciesgo mod download# Build the binarygo build -o botkube-agent ./cmd/botkube-agent/ - + + # Fetch the dependenciesgo mod download# Build the binarygo build -o botkube-agent ./cmd/botkube-agent/ + 2. Create a local configuration file to override default values. For example, set communication credentials, specify cluster name, and disable analytics: - -cat < local_config.yamlcommunications: default-group: socketSlack: enabled: true channels: default: name: random appToken: "xapp-xxxx" botToken: "xoxb-xxxx"configWatcher: enabled: falsesettings: clusterName: "labs"analytics: # -- If true, sending anonymous analytics is disabled. To learn what date we collect, # see [Privacy Policy](https://botkube.io/privacy#privacy-policy). disable: trueEOF - -To learn more about configuration, visit [https://docs.botkube.io/configuration/](https://docs.botkube.io/configuration/). - + + cat < local_config.yamlcommunications: default-group: socketSlack: enabled: true channels: default: name: random appToken: "xapp-xxxx" botToken: "xoxb-xxxx"configWatcher: enabled: falsesettings: clusterName: "labs"analytics: # -- If true, sending anonymous analytics is disabled. To learn what date we collect, # see [Privacy Policy](https://botkube.io/privacy#privacy-policy). disable: trueEOF + + To learn more about configuration, visit [https://docs.botkube.io/configuration/](https://docs.botkube.io/configuration/). + 3. Export paths to configuration files. The priority will be given to the last (right-most) file specified. - -export BOTKUBE_CONFIG_PATHS="$(pwd)/helm/botkube/values.yaml,$(pwd)/local_config.yaml" - + + export BOTKUBE_CONFIG_PATHS="$(pwd)/helm/botkube/values.yaml,$(pwd)/local_config.yaml" + 4. Export the path to Kubeconfig: - -export BOTKUBE_SETTINGS_KUBECONFIG=/Users/$USER/.kube/config # set custom path if necessary - + + export BOTKUBE_SETTINGS_KUBECONFIG=/Users/$USER/.kube/config # set custom path if necessary + 5. Make sure you are able to access your Kubernetes cluster: - -Kubernetes master is running at https://192.168.39.233:8443CoreDNS is running at https://192.168.39.233:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy... - + + Kubernetes master is running at https://192.168.39.233:8443CoreDNS is running at https://192.168.39.233:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy... + 6. Run Botkube agent binary: + - -#### Develop Botkube plugins[​](#develop-botkube-plugins"DirectlinktoDevelopBotkubeplugins") +#### Develop Botkube plugins[​](#develop-botkube-plugins "Direct link to Develop Botkube plugins") **Prerequisite** @@ -110,59 +118,59 @@ Kubernetes master is running at https://192.168.39.233:8443CoreDNS is running at **Steps** 1. Start fake plugins server to serve binaries from `dist` folder: - -go run test/helpers/plugin_server.go - -> **Note** If Botkube runs inside the k3d cluster, export the `PLUGIN_SERVER_HOST=http://host.k3d.internal` environment variable. - + + go run test/helpers/plugin_server.go + + > **Note** If Botkube runs inside the k3d cluster, export the `PLUGIN_SERVER_HOST=http://host.k3d.internal` environment variable. + 2. Export Botkube plugins cache directory: - -export BOTKUBE_PLUGINS_CACHE__DIR="/tmp/plugins" - + + export BOTKUBE_PLUGINS_CACHE__DIR="/tmp/plugins" + 3. In other terminal window, run: - -# rebuild plugins only for current GOOS and GOARCHmake build-plugins-single &&# remove cached pluginsrm -rf $BOTKUBE_PLUGINS_CACHE__DIR &&# start botkube to download fresh plugins./botkube-agent - -> **Note** Each time you make a change to the [source](https://github.com/kubeshop/botkube/blob/main/cmd/source) or [executors](https://github.com/kubeshop/botkube/blob/main/cmd/executor) plugins re-run the above command. - -> **Note** To build specific plugin binaries, use `PLUGIN_TARGETS`. For example `PLUGIN_TARGETS="x, kubectl" make build-plugins-single`. - - -Making A Change[​](#making-a-change"DirectlinktoMakingAChange") + + # rebuild plugins only for current GOOS and GOARCHmake build-plugins-single &&# remove cached pluginsrm -rf $BOTKUBE_PLUGINS_CACHE__DIR &&# start botkube to download fresh plugins./botkube-agent + + > **Note** Each time you make a change to the [source](https://github.com/kubeshop/botkube/blob/main/cmd/source) or [executors](https://github.com/kubeshop/botkube/blob/main/cmd/executor) plugins re-run the above command. + + > **Note** To build specific plugin binaries, use `PLUGIN_TARGETS`. For example `PLUGIN_TARGETS="x, kubectl" make build-plugins-single`. + + +Making A Change[​](#making-a-change "Direct link to Making A Change") --------------------------------------------------------------------- * Before making any significant changes, please [open an issue](https://github.com/kubeshop/botkube/issues). Discussing your proposed changes ahead of time will make the contribution process smooth for everyone. - + * Once we've discussed your changes, and you've got your code ready, make sure that the build steps mentioned above pass. Open your pull request against the [`main`](https://github.com/kubeshop/botkube/tree/main) branch. - -To learn how to do it, follow the **Contribute** section in the [Git workflow guide](https://github.com/kubeshop/botkube/blob/main/git-workflow.md). - + + To learn how to do it, follow the **Contribute** section in the [Git workflow guide](https://github.com/kubeshop/botkube/blob/main/git-workflow.md). + * To avoid build failures in CI, install [`golangci-lint`](https://golangci-lint.run/welcome/install/) and run: + + # From project root directorymake lint-fix + + This will run the `golangci-lint` tool to lint the Go code. + -# From project root directorymake lint-fix - -This will run the `golangci-lint` tool to lint the Go code. - - -### Run the e2e tests[​](#run-the-e2e-tests"DirectlinktoRunthee2etests") +### Run the e2e tests[​](#run-the-e2e-tests "Direct link to Run the e2e tests") Here [are the details you need](https://github.com/kubeshop/botkube/blob/main/test/README.md) to set up and run the e2e tests. -### Create a Pull Request[​](#create-a-pull-request"DirectlinktoCreateaPullRequest") +### Create a Pull Request[​](#create-a-pull-request "Direct link to Create a Pull Request") * Make sure your pull request has [good commit messages](https://chris.beams.io/posts/git-commit/): - -* Separate subject from body with a blank line -* Limit the subject line to 50 characters -* Capitalize the subject line -* Do not end the subject line with a period -* Use the imperative mood in the subject line -* Wrap the body at 72 characters -* Use the body to explain _what_ and _why_ instead of _how_ + + * Separate subject from body with a blank line + * Limit the subject line to 50 characters + * Capitalize the subject line + * Do not end the subject line with a period + * Use the imperative mood in the subject line + * Wrap the body at 72 characters + * Use the body to explain _what_ and _why_ instead of _how_ * Try to squash unimportant commits and rebase your changes on to the `main` branch, this will make sure we have clean log of changes. + - -Support Channels[​](#support-channels"DirectlinktoSupportChannels") +Support Channels[​](#support-channels "Direct link to Support Channels") ------------------------------------------------------------------------ Join the Botkube-related discussion on Slack! @@ -171,12 +179,14 @@ Create your Slack account on [Botkube](https://join.botkube.io/) workspace. To report bug or feature, use [GitHub issues](https://github.com/kubeshop/botkube/issues/new/choose). -[](https://docs.botkube.io/community/contribute/release) * [Contributing to documentation](#contributing-to-documentation) +[](https://docs.botkube.io/community/contribute/release) + +* [Contributing to documentation](#contributing-to-documentation) * [Build and run Botkube from source code](#build-and-run-botkube-from-source-code) -* [Prerequisite](#prerequisite) -* [Build and install on Kubernetes](#build-and-install-on-kubernetes) -* [Build and run locally](#build-and-run-locally) + * [Prerequisite](#prerequisite) + * [Build and install on Kubernetes](#build-and-install-on-kubernetes) + * [Build and run locally](#build-and-run-locally) * [Making A Change](#making-a-change) -* [Run the e2e tests](#run-the-e2e-tests) -* [Create a Pull Request](#create-a-pull-request) + * [Run the e2e tests](#run-the-e2e-tests) + * [Create a Pull Request](#create-a-pull-request) * [Support Channels](#support-channels) diff --git a/hack/assistant-setup/content/docs.botkube.io__community__contribute__elasticsearch-develop.md b/hack/assistant-setup/content/docs.botkube.io__community__contribute__elasticsearch-develop.md index f96c4952..c1444b73 100644 --- a/hack/assistant-setup/content/docs.botkube.io__community__contribute__elasticsearch-develop.md +++ b/hack/assistant-setup/content/docs.botkube.io__community__contribute__elasticsearch-develop.md @@ -3,7 +3,8 @@ Title: Elasticsearch notifier development | Botkube URL Source: https://docs.botkube.io/community/contribute/elasticsearch-develop Markdown Content: -* [](https://docs.botkube.io/) * [Contribute](https://docs.botkube.io/community/contribute/) +* [](https://docs.botkube.io/) +* [Contribute](https://docs.botkube.io/community/contribute/) * Elasticsearch notifier development Elasticsearch notifier development @@ -11,101 +12,101 @@ Elasticsearch notifier development Botkube has stable support for Elasticsearch `v8` and it is backward compatible to Elasticsearch `v7`. If you are using Elasticsearch `v7`, please follow the [Elasticsearch v7 setup](#elasticsearch-v7-setup) section. -Elasticsearch v8 setup[​](#elasticsearch-v8-setup"DirectlinktoElasticsearchv8setup") +Elasticsearch v8 setup[​](#elasticsearch-v8-setup "Direct link to Elasticsearch v8 setup") ------------------------------------------------------------------------------------------ The easiest way to develop Botkube with Elasticsearch notifier enabled is to install Elasticsearch on your local Kubernetes cluster via [ECK](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-eck.html). -### Steps[​](#steps"DirectlinktoSteps") +### Steps[​](#steps "Direct link to Steps") 1. Install Elasticsearch: - -1. Install ECK custom resource definitions: - -kubectl create -f https://download.elastic.co/downloads/eck/2.9.0/crds.yaml - -2. Install ECK operator: - -kubectl apply -f https://download.elastic.co/downloads/eck/2.9.0/operator.yaml - -3. Deploy Elasticsearch: - -cat < /tmp/values.yaml << ENDOFFILEextraObjects: - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: vault-database spec: provider: vault parameters: roleName: "database" vaultAddress: "http://vault.default:8200" objects: | - objectName: "slack-app-token" secretPath: "secret/data/slack-app-token" secretKey: "token" - objectName: "slack-bot-token" secretPath: "secret/data/slack-bot-token" secretKey: "token" secretObjects: - secretName: communication-slack type: Opaque data: - objectName: "slack-app-token" key: "slack-app-token" - objectName: "slack-bot-token" key: "slack-bot-token"communications: 'default-group': # Settings for SocketSlack socketSlack: enabled: true channels: {} # configure your channels # botToken - specified via env variable # appToken - specified via env variableextraEnv: - name: BOTKUBE_COMMUNICATIONS_DEFAULT-GROUP_SOCKET__SLACK_APP__TOKEN valueFrom: secretKeyRef: name: communication-slack key: slack-app-token - name: BOTKUBE_COMMUNICATIONS_DEFAULT-GROUP_SOCKET__SLACK_BOT__TOKEN valueFrom: secretKeyRef: name: communication-slack key: slack-bot-tokenextraVolumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: trueextraVolumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "vault-database"ENDOFFILE - + + cat > /tmp/values.yaml << ENDOFFILEextraObjects: - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: vault-database spec: provider: vault parameters: roleName: "database" vaultAddress: "http://vault.default:8200" objects: | - objectName: "slack-app-token" secretPath: "secret/data/slack-app-token" secretKey: "token" - objectName: "slack-bot-token" secretPath: "secret/data/slack-bot-token" secretKey: "token" secretObjects: - secretName: communication-slack type: Opaque data: - objectName: "slack-app-token" key: "slack-app-token" - objectName: "slack-bot-token" key: "slack-bot-token"communications: 'default-group': # Settings for SocketSlack socketSlack: enabled: true channels: {} # configure your channels # botToken - specified via env variable # appToken - specified via env variableextraEnv: - name: BOTKUBE_COMMUNICATIONS_DEFAULT-GROUP_SOCKET__SLACK_APP__TOKEN valueFrom: secretKeyRef: name: communication-slack key: slack-app-token - name: BOTKUBE_COMMUNICATIONS_DEFAULT-GROUP_SOCKET__SLACK_BOT__TOKEN valueFrom: secretKeyRef: name: communication-slack key: slack-bot-tokenextraVolumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: trueextraVolumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "vault-database"ENDOFFILE + 6. Install Botkube: - -helm install botkube --namespace default \-f /tmp/values.yaml \./helm/botkube + + helm install botkube --namespace default \-f /tmp/values.yaml \./helm/botkube diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor.md index fe210d2b..fa4f017e 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__executor.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor.md @@ -5,21 +5,23 @@ URL Source: https://docs.botkube.io/configuration/executor/ Markdown Content: The executor configuration allows you to define multiple executor configurations that can be later referred in [communication](https://docs.botkube.io/configuration/communication) bindings. For example, take a look at such executor definition: -executors: "kubectl-global": # This is an executor configuration name, which is referred in communication bindings. botkube/kubectl: # ... trimmed ... "echo": # This is an executor configuration name, which is referred in communication bindings. botkube/echo: # ... trimmed ... + executors: "kubectl-global": # This is an executor configuration name, which is referred in communication bindings. botkube/kubectl: # ... trimmed ... "echo": # This is an executor configuration name, which is referred in communication bindings. botkube/echo: # ... trimmed ... This can be later used by the communication platforms: -communications: "default-group": socketSlack: channels: "default": bindings: executors: # The order is important for merging strategy. - kubectl-global # The executor configuration name - echo # The executor configuration name # ... trimmed ... + communications: "default-group": socketSlack: channels: "default": bindings: executors: # The order is important for merging strategy. - kubectl-global # The executor configuration name - echo # The executor configuration name # ... trimmed ... To use the Botkube executor plugins, first you need to define the plugins repository under the `plugins` property: -plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml + plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml Next, you can configure executor from a given repository: -executors: "plugins": repo-name/executor-name@v1.0.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} For all executor configuration properties, see the [**syntax**](#syntax) section. + executors: "plugins": repo-name/executor-name@v1.0.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} -#### Restart Policy and Health Check Interval[​](#restart-policy-and-health-check-interval"DirectlinktoRestartPolicyandHealthCheckInterval") +For all executor configuration properties, see the [**syntax**](#syntax) section. + +#### Restart Policy and Health Check Interval[​](#restart-policy-and-health-check-interval "Direct link to Restart Policy and Health Check Interval") This section of the configuration allows you to configure the restart policy for the Botkube executor plugins. The restart policy is used when the executor plugin fails to start. The default restart policy is `DeactivatePlugin`, which means that the plugin is deactivated after a given number of restarts. The restart policy can be configured with the following properties: @@ -35,9 +37,11 @@ The health check interval is used to check the health of the executor plugins. T * `healthCheckInterval` - health check interval. -# Botkube Restart Policy on plugin failure.restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10healthCheckInterval: 10s + # Botkube Restart Policy on plugin failure.restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10healthCheckInterval: 10s -Syntax[​](#syntax"DirectlinktoSyntax") +Syntax[​](#syntax "Direct link to Syntax") ------------------------------------------ -# Map of executors. The `executors` property name is an alias for a given configuration.# Key name is used as a binding reference.## Format: executors.{alias}executors: "tools": botkube/echo@v1.10.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true # If not enabled, plugin is not downloaded and started. config: # Plugin's specific configuration. changeResponseToUpperCase: true botkube/kubectl: # If version is not provided, the latest version from repository is used. enabled: true # If not enabled, plugin is not downloaded and started.# Configuration for Botkube executors and sources plugins.plugins: # Directory, where downloaded plugins are cached. cacheDir: "/tmp" # List of plugins repositories. repositories: # This repository serves officially supported Botkube plugins. botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml # Other 3rd party repositories. repo-name: url: https://example.com/plugins-index.yaml # Configure Incoming webhook for source plugins. incomingWebhook: enabled: true port: 2115 targetPort: 2115 # Botkube Restart Policy on plugin failure. restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10 healthCheckInterval: 10s The default configuration for the Botkube Helm chart can be found in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. + # Map of executors. The `executors` property name is an alias for a given configuration.# Key name is used as a binding reference.## Format: executors.{alias}executors: "tools": botkube/echo@v1.10.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true # If not enabled, plugin is not downloaded and started. config: # Plugin's specific configuration. changeResponseToUpperCase: true botkube/kubectl: # If version is not provided, the latest version from repository is used. enabled: true # If not enabled, plugin is not downloaded and started.# Configuration for Botkube executors and sources plugins.plugins: # Directory, where downloaded plugins are cached. cacheDir: "/tmp" # List of plugins repositories. repositories: # This repository serves officially supported Botkube plugins. botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml # Other 3rd party repositories. repo-name: url: https://example.com/plugins-index.yaml # Configure Incoming webhook for source plugins. incomingWebhook: enabled: true port: 2115 targetPort: 2115 # Botkube Restart Policy on plugin failure. restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10 healthCheckInterval: 10s + +The default configuration for the Botkube Helm chart can be found in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__exec.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__exec.md index 6e6ccba4..e6c9cde8 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__exec.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__exec.md @@ -19,4 +19,4 @@ By default, the read-only `KUBECONFIG` is assigned. For enabling commands that r You can enable the plugin as a part of Botkube instance configuration. -# An array of templates that define how to convert the command output into an interactive message.templates: # Link to templates source # It uses the go-getter library, which supports multiple URL formats (such as HTTP, Git repositories, or S3) and is able to unpack archives. # For more details, see the documentation at https://github.com/hashicorp/go-getter. - ref: github.com/kubeshop/botkube//cmd/executor/exec/templates?ref=release-1.8 + # An array of templates that define how to convert the command output into an interactive message.templates: # Link to templates source # It uses the go-getter library, which supports multiple URL formats (such as HTTP, Git repositories, or S3) and is able to unpack archives. # For more details, see the documentation at https://github.com/hashicorp/go-getter. - ref: github.com/kubeshop/botkube//cmd/executor/exec/templates?ref=release-1.8 diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__flux.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__flux.md index 30e0e7bc..eab29af8 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__flux.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__flux.md @@ -17,16 +17,20 @@ The Botkube Flux executor plugin allows you to run the [`flux`](https://fluxcd.i The Flux plugin is hosted by the Botkube Cloud plugin repository and requires active Botkube Cloud account. -Prerequisite elevated RBAC permissions[​](#prerequisite-elevated-rbac-permissions"DirectlinktoPrerequisiteelevatedRBACpermissions") +Prerequisite elevated RBAC permissions[​](#prerequisite-elevated-rbac-permissions "Direct link to Prerequisite elevated RBAC permissions") ------------------------------------------------------------------------------------------------------------------------------------------ One of the plugin capabilities is the `flux diff` command. To use it, you need to update the Flux plugin RBAC configuration. This is necessary because the command performs a server-side dry run that requires patch permissions, as specified in the [Kubernetes documentation](https://kubernetes.io/docs/reference/using-api/api-concepts/#dry-run-authorization). First, create RBAC resources on your cluster: -cat > /tmp/flux-rbac.yaml << ENDOFFILE---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: fluxrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list", "patch"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: fluxroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: fluxsubjects:- kind: Group name: flux apiGroup: rbac.authorization.k8s.ioENDOFFILEkubectl apply -f /tmp/flux-rbac.yaml Next, use the `flux` group in the plugin RBAC configuration: ![Image 1: Flux RBAC](https://docs.botkube.io/assets/images/flux-rbac-bfe6d7c972bcfd611669afd75a3bab20.png) + cat > /tmp/flux-rbac.yaml << ENDOFFILE---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: fluxrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list", "patch"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: fluxroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: fluxsubjects:- kind: Group name: flux apiGroup: rbac.authorization.k8s.ioENDOFFILEkubectl apply -f /tmp/flux-rbac.yaml -Enabling plugin[​](#enabling-plugin"DirectlinktoEnablingplugin") +Next, use the `flux` group in the plugin RBAC configuration: + +![Image 1: Flux RBAC](https://docs.botkube.io/assets/images/flux-rbac-bfe6d7c972bcfd611669afd75a3bab20.png) + +Enabling plugin[​](#enabling-plugin "Direct link to Enabling plugin") --------------------------------------------------------------------- You can enable the plugin as a part of Botkube instance configuration. @@ -41,15 +45,15 @@ You can enable the plugin as a part of Botkube instance configuration. The Flux plugin comes with integrated GitHub support. To enable it, you'll need a valid [GitHub token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token). Set the token with the following configuration: -github: auth: accessToken: "" # your GitHub access token + github: auth: accessToken: "" # your GitHub access token 6. Click **Save** button. By default, the Flux plugin has read-only access. To perform actions like creating or deleting Flux-related sources, you'll need to customize the [RBAC](https://docs.botkube.io/configuration/rbac#configuration). -Configuration Syntax[​](#configuration-syntax"DirectlinktoConfigurationSyntax") +Configuration Syntax[​](#configuration-syntax "Direct link to Configuration Syntax") ------------------------------------------------------------------------------------ The plugin supports the following configuration: -github: auth: # GitHub access token. # Instructions for token creation: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token. # Lack of token may limit functionality, e.g., adding comments to pull requests or approving them. accessToken: ""log: level: "info" + github: auth: # GitHub access token. # Instructions for token creation: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token. # Lack of token may limit functionality, e.g., adding comments to pull requests or approving them. accessToken: ""log: level: "info" diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__kubectl.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__kubectl.md index c369a912..7260e54a 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__kubectl.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__kubectl.md @@ -11,8 +11,8 @@ The Kubectl plugin is hosted by the official Botkube plugin repository. First, m To enable Kubectl executor, add \``--set 'executors.k8s-default-tools.botkube/kubectl.enabled=true'` to a given Botkube [`install` command](https://docs.botkube.io/cli/commands/botkube_install). -# Configures the default Namespace for executing Botkube `kubectl` commands. If not set, uses the 'default'.defaultNamespace: "default"# Configures the interactive kubectl command builder.interactiveBuilder: allowed: # Configures which K8s namespace are displayed in namespace dropdown. # If not specified, plugin needs to have access to fetch all Namespaces, otherwise Namespace dropdown won't be visible at all. namespaces: ["default"] # Configures which `kubectl` methods are displayed in commands dropdown. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configures which K8s resource are displayed in resources dropdown. resources: ["deployments", "pods", "namespaces"] + # Configures the default Namespace for executing Botkube `kubectl` commands. If not set, uses the 'default'.defaultNamespace: "default"# Configures the interactive kubectl command builder.interactiveBuilder: allowed: # Configures which K8s namespace are displayed in namespace dropdown. # If not specified, plugin needs to have access to fetch all Namespaces, otherwise Namespace dropdown won't be visible at all. namespaces: ["default"] # Configures which `kubectl` methods are displayed in commands dropdown. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configures which K8s resource are displayed in resources dropdown. resources: ["deployments", "pods", "namespaces"] For all collected `kubectl` executors bindings, configuration properties are overridden based on the order of the binding list for a given channel. The priority is given to the last binding specified on the list. Empty properties are omitted. -communications: "default-group": socketSlack: channels: "default": name: "random" bindings: executors: - kubectl-one - kubectl-two - kubectl-threeexecutors: "kubectl-one": kubectl: enabled: true config: defaultNamespace: "default" interactiveBuilder: allowed: verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] resources: ["deployments", "pods", "namespaces"] "kubectl-two": kubectl: enabled: true config: interactiveBuilder: allowed: namespaces: ["default"] verbs: ["api-resources", "top"] "kubectl-three": kubectl: enabled: false config: interactiveBuilder: allowed: namespaces: ["kube-system"] + communications: "default-group": socketSlack: channels: "default": name: "random" bindings: executors: - kubectl-one - kubectl-two - kubectl-threeexecutors: "kubectl-one": kubectl: enabled: true config: defaultNamespace: "default" interactiveBuilder: allowed: verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] resources: ["deployments", "pods", "namespaces"] "kubectl-two": kubectl: enabled: true config: interactiveBuilder: allowed: namespaces: ["default"] verbs: ["api-resources", "top"] "kubectl-three": kubectl: enabled: false config: interactiveBuilder: allowed: namespaces: ["kube-system"] diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__general.md b/hack/assistant-setup/content/docs.botkube.io__configuration__general.md index 4ae7981e..d88819d3 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__general.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__general.md @@ -5,4 +5,4 @@ URL Source: https://docs.botkube.io/configuration/general Markdown Content: The general settings holds a general configuration for the Botkube backend. For example, log level, disabling config watcher and similar. -# General Botkube configuration.settings: # Cluster name to differentiate incoming messages. clusterName: not-configured # If true, notifies about new Botkube releases. upgradeNotifier: true # Botkube logging settings. log: # Sets one of the log levels. Allowed values: `info`, `warn`, `debug`, `error`, `fatal`, `panic`. level: info # Configures log format. Allowed values: `text`, `json`. formatter: json # If true, disable ANSI colors in logging. Ignored when `json` formatter is used. disableColors: false# Parameters for the Config Watcher component which reloads Botkube on ConfigMap changes.# It restarts Botkube when configuration data change is detected. It watches ConfigMaps and/or Secrets with the `botkube.io/config-watch: "true"` label from the namespace where Botkube is installed.configWatcher: # If true, restarts the Botkube Pod on config changes. enabled: true # In-cluster Config Watcher configuration. It is used when remote configuration is not provided. inCluster: # Resync period for the Config Watcher informers. informerResyncPeriod: 10m + # General Botkube configuration.settings: # Cluster name to differentiate incoming messages. clusterName: not-configured # If true, notifies about new Botkube releases. upgradeNotifier: true # Botkube logging settings. log: # Sets one of the log levels. Allowed values: `info`, `warn`, `debug`, `error`, `fatal`, `panic`. level: info # Configures log format. Allowed values: `text`, `json`. formatter: json # If true, disable ANSI colors in logging. Ignored when `json` formatter is used. disableColors: false# Parameters for the Config Watcher component which reloads Botkube on ConfigMap changes.# It restarts Botkube when configuration data change is detected. It watches ConfigMaps and/or Secrets with the `botkube.io/config-watch: "true"` label from the namespace where Botkube is installed.configWatcher: # If true, restarts the Botkube Pod on config changes. enabled: true # In-cluster Config Watcher configuration. It is used when remote configuration is not provided. inCluster: # Resync period for the Config Watcher informers. informerResyncPeriod: 10m diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__rbac.md b/hack/assistant-setup/content/docs.botkube.io__configuration__rbac.md index c598999d..2ee32ec8 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__rbac.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__rbac.md @@ -7,7 +7,7 @@ Botkube allows plugins to access Kubernetes API by defining [RBAC](https://en.wi Based on this configuration Botkube generates a temporary [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) with user and/or group impersonation. This kubeconfig is available to plugins in the `Execute` and `Stream` contexts. -Architecture[​](#architecture"DirectlinktoArchitecture") +Architecture[​](#architecture "Direct link to Architecture") ------------------------------------------------------------ Botkube uses its own cluster credentials to generate a temporary kubeconfig, and the kubeconfig uses [user/group impersonation](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation). @@ -16,55 +16,57 @@ For source plugins, the kubeconfig is generated once - during plugin startup. Fo ![Image 1: diagram](https://docs.botkube.io/assets/images/botkube-read-only-717ed01cf9fa5e6621f2a09c7b29a32d.svg) -Configuration[​](#configuration"DirectlinktoConfiguration") +Configuration[​](#configuration "Direct link to Configuration") --------------------------------------------------------------- For each executor and source plugin, you can define a `context.rbac` configuration. This config is used to generate a dedicated kubeconfig. -executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: user: type: Static # Static or ChannelName static: # applicable only for "Static" user mapping type value: botkube-internal-static-user prefix: "" # optional prefix for user name; useful especially for channel name mapping group: type: Static # Static or ChannelName static: # applicable only for "Static" group mapping type values: - "my-group1" - "my-group2" prefix: "" # optional prefix for all group names; useful especially for channel name mapping + executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: user: type: Static # Static or ChannelName static: # applicable only for "Static" user mapping type value: botkube-internal-static-user prefix: "" # optional prefix for user name; useful especially for channel name mapping group: type: Static # Static or ChannelName static: # applicable only for "Static" group mapping type values: - "my-group1" - "my-group2" prefix: "" # optional prefix for all group names; useful especially for channel name mapping -### Mapping types[​](#mapping-types"DirectlinktoMappingtypes") +### Mapping types[​](#mapping-types "Direct link to Mapping types") For both user and group, the following mapping types are supported: * `Static` - -For user, it uses a single static value. For group, it uses a list of static values. The value is prepended with an optional prefix. - + + For user, it uses a single static value. For group, it uses a list of static values. The value is prepended with an optional prefix. + * `ChannelName` + + Channel name is used as subject for user or group impersonation. The channel name is prepended with an optional prefix. This mapping is only available for executor plugins. + -Channel name is used as subject for user or group impersonation. The channel name is prepended with an optional prefix. This mapping is only available for executor plugins. - - -### Default configuration[​](#default-configuration"DirectlinktoDefaultconfiguration") +### Default configuration[​](#default-configuration "Direct link to Default configuration") When a given plugin have `context.rbac` property undefined, Botkube doesn't generate a kubeconfig for this plugin. To request kubeconfig generation, define `context.rbac` property with empty value: -executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: {} # enable kubeconfig generation + executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: {} # enable kubeconfig generation However, such configuration will generate a kubeconfig with empty impersonation config, which effectively means an anonymous access to the Kubernetes API. During Botkube installation, Botkube generates Kubernetes ClusterRole and ClusterRoleBinding resources with read-only access for the default group `botkube-plugins-default`. This group is used by default across the `values.yaml` for all default plugins. -rbac: # ... groups: "botkube-plugins-default": create: true rules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"] See the [`values.yaml`](https://github.com/kubeshop/botkube/blob/v1.10.0/helm/botkube/values.yaml) for more details. + rbac: # ... groups: "botkube-plugins-default": create: true rules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"] -#### Defaults for user mapping when group mapping is used[​](#defaults-for-user-mapping-when-group-mapping-is-used"DirectlinktoDefaultsforusermappingwhengroupmappingisused") +See the [`values.yaml`](https://github.com/kubeshop/botkube/blob/v1.10.0/helm/botkube/values.yaml) for more details. + +#### Defaults for user mapping when group mapping is used[​](#defaults-for-user-mapping-when-group-mapping-is-used "Direct link to Defaults for user mapping when group mapping is used") Kubernetes requires user for group impersonation. That's why when a group mapping is user without `context.rbac.user` mapping defined, Botkube uses `botkube-internal-static-user` user name for impersonation. For example, when the following configuration is used: -executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: # no user mapping defined group: type: Static static: value: botkube-plugins-default + executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: # no user mapping defined group: type: Static static: value: botkube-plugins-default It is equivalent to: -executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: user: type: Static static: value: botkube-internal-static-user group: type: Static static: value: botkube-plugins-default + executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: user: type: Static static: value: botkube-internal-static-user group: type: Static static: value: botkube-plugins-default -#### Defaults for Botkube Cloud[​](#defaults-for-botkube-cloud"DirectlinktoDefaultsforBotkubeCloud") +#### Defaults for Botkube Cloud[​](#defaults-for-botkube-cloud "Direct link to Defaults for Botkube Cloud") When configuring plugin on Botkube Cloud, the "Default" permissions mean that the `botkube-plugins-default` group will be used, which have read-only access to Kubernetes API and is configured during Botkube installation. See the [Default configuration](#default-configuration) section. ![Image 2: Cloud RBAC defaults](https://docs.botkube.io/assets/images/cloud-rbac-default-9ffb455fa5b9f7e43b81da8a4b91f868.png) -Examples[​](#examples"DirectlinktoExamples") +Examples[​](#examples "Direct link to Examples") ------------------------------------------------ This paragraph contains examples of RBAC configuration for different use cases. @@ -73,92 +75,114 @@ tip You can use `rbac.groups` or `extraObjects` overrides during Botkube installation to create custom RBAC resources. See the [`values.yaml`](https://github.com/kubeshop/botkube/blob/v1.10.0/helm/botkube/values.yaml) for more details. -### Kubectl executor with read-only Pod access based on static group mapping[​](#kubectl-executor-with-read-only-pod-access-based-on-static-group-mapping"DirectlinktoKubectlexecutorwithread-onlyPodaccessbasedonstaticgroupmapping") +### Kubectl executor with read-only Pod access based on static group mapping[​](#kubectl-executor-with-read-only-pod-access-based-on-static-group-mapping "Direct link to Kubectl executor with read-only Pod access based on static group mapping") In this example an executor plugin is defined with static RBAC that maps to group `read-pods`. 1. Consider the following Botkube config: + + # ...executors: "kubectl-read-only": botkube/kubectl@v1: enabled: true # ... context: rbac: group: type: Static static: values: [read-pods] + -# ...executors: "kubectl-read-only": botkube/kubectl@v1: enabled: true # ... context: rbac: group: type: Static static: values: [read-pods] Let's assume this plugin is bound to at least one channel. 1. Consider the following Kubernetes RBAC configuration: apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: kubectl-read-podsrules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: kubectl-read-podsroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kubectl-read-podssubjects: - kind: Group name: read-pods # <-- this is the group name used in Botkube config apiGroup: rbac.authorization.k8s.io In a result, when this executor plugin is invoked, Botkube generates a kubeconfig impersonating group `read-pods` and passes it to the plugin. The plugin then can authenticate with the API server with identity of group `read-pods`. In that way, the plugin can use read-only operations on Pods. ### Kubernetes source plugin with read-only access based on static user mapping[​](#kubernetes-source-plugin-with-read-only-access-based-on-static-user-mapping"DirectlinktoKubernetessourcepluginwithread-onlyaccessbasedonstaticusermapping") +Let's assume this plugin is bound to at least one channel. -In this example a single source plugin is defined with static RBAC that maps to user `kubernetes-read-only`. +1. Consider the following Kubernetes RBAC configuration: + + apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: kubectl-read-podsrules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: kubectl-read-podsroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kubectl-read-podssubjects: - kind: Group name: read-pods # <-- this is the group name used in Botkube config apiGroup: rbac.authorization.k8s.io + -1. Consider the following Botkube config: +In a result, when this executor plugin is invoked, Botkube generates a kubeconfig impersonating group `read-pods` and passes it to the plugin. The plugin then can authenticate with the API server with identity of group `read-pods`. In that way, the plugin can use read-only operations on Pods. -sources: "kubernetes": botkube/kubernetes@v1: enabled: true # ... context: rbac: user: type: Static static: value: kubernetes-read-only +### Kubernetes source plugin with read-only access based on static user mapping[​](#kubernetes-source-plugin-with-read-only-access-based-on-static-user-mapping "Direct link to Kubernetes source plugin with read-only access based on static user mapping") +In this example a single source plugin is defined with static RBAC that maps to user `kubernetes-read-only`. + +1. Consider the following Botkube config: + + sources: "kubernetes": botkube/kubernetes@v1: enabled: true # ... context: rbac: user: type: Static static: value: kubernetes-read-only + 2. Consider the following Kubernetes RBAC configuration: + + apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: readerrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: readerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: readersubjects: - kind: User name: kubernetes-read-only # <-- this is the username used in Botkube config apiGroup: rbac.authorization.k8s.io + + +In a result, the source plugin can access all Kubernetes resources with read-only permissions. -apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: readerrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: readerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: readersubjects: - kind: User name: kubernetes-read-only # <-- this is the username used in Botkube config apiGroup: rbac.authorization.k8s.io In a result, the source plugin can access all Kubernetes resources with read-only permissions. ### Kubectl executor plugin with different permissions based on channel name mapping[​](#kubectl-executor-plugin-with-different-permissions-based-on-channel-name-mapping"DirectlinktoKubectlexecutorpluginwithdifferentpermissionsbasedonchannelnamemapping") +### Kubectl executor plugin with different permissions based on channel name mapping[​](#kubectl-executor-plugin-with-different-permissions-based-on-channel-name-mapping "Direct link to Kubectl executor plugin with different permissions based on channel name mapping") In this example **kubectl** executor plugin is configured with channel name mapping and bound to two channels, `ch-1` and `ch-2`. In Kubernetes RBAC resources, group `ch-1` is given write access, while group `ch-2` is given only read access. 1. Consider the following Botkube config: - -executors: "kubectl": botkube/kubectl@v1: # ... enabled: true context: rbac: group: type: ChannelNamecommunications: "default-group": socketSlack: enabled: true # ... channels: "ch-1": name: ch-1 bindings: executors: - kubectl "ch-2": name: ch-2 bindings: executors: - kubectl# ... - + + executors: "kubectl": botkube/kubectl@v1: # ... enabled: true context: rbac: group: type: ChannelNamecommunications: "default-group": socketSlack: enabled: true # ... channels: "ch-1": name: ch-1 bindings: executors: - kubectl "ch-2": name: ch-2 bindings: executors: - kubectl# ... + 2. Consider the following Kubernetes RBAC configuration: + + apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: editorrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list", "update", "create", "delete"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: editorroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: editorsubjects: - kind: Group name: ch-1 # <-- channel name used in Botkube config apiGroup: rbac.authorization.k8s.io---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: read-onlyrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: read-onlyroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: read-onlysubjects: - kind: Group name: ch-2 # <-- channel name used in Botkube config apiGroup: rbac.authorization.k8s.io + + +In a result, users in channel `ch-1` can execute all kubectl commands, while users in channel `ch-2` can only execute read-only commands. -apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: editorrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list", "update", "create", "delete"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: editorroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: editorsubjects: - kind: Group name: ch-1 # <-- channel name used in Botkube config apiGroup: rbac.authorization.k8s.io---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: read-onlyrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: read-onlyroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: read-onlysubjects: - kind: Group name: ch-2 # <-- channel name used in Botkube config apiGroup: rbac.authorization.k8s.io In a result, users in channel `ch-1` can execute all kubectl commands, while users in channel `ch-2` can only execute read-only commands. Limitations[​](#limitations"DirectlinktoLimitations") +Limitations[​](#limitations "Direct link to Limitations") --------------------------------------------------------- This paragraph contains limitations of the current implementation. -### Shared file system[​](#shared-file-system"DirectlinktoSharedfilesystem") +### Shared file system[​](#shared-file-system "Direct link to Shared file system") Botkube runs plugin processes in the same container within the same Pod. Therefore, all plugins share the same file system. If you're a plugin developer and decide to write kubeconfig to the file system, be aware that it can be accessible by all plugins in the container. -### RBAC configuration merging[​](#rbac-configuration-merging"DirectlinktoRBACconfigurationmerging") +### RBAC configuration merging[​](#rbac-configuration-merging "Direct link to RBAC configuration merging") The same executor plugins with different RBAC configuration cannot be bound to the same channel. This is validated during Botkube startup and will result in an error. For example, the following configuration is invalid: -communications: "default-group": socketSlack: enabled: true # ... channels: "ch-1": name: ch-1 bindings: executors: - kubectl - kubectl-read-onlyexecutors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: # Different RBAC configuration group: type: ChannelName "kubectl-read-only": botkube/kubectl@v1: enabled: true # ... context: rbac: # Different RBAC configuration user: type: Static static: value: kubectl-read-only + communications: "default-group": socketSlack: enabled: true # ... channels: "ch-1": name: ch-1 bindings: executors: - kubectl - kubectl-read-onlyexecutors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: # Different RBAC configuration group: type: ChannelName "kubectl-read-only": botkube/kubectl@v1: enabled: true # ... context: rbac: # Different RBAC configuration user: type: Static static: value: kubectl-read-only -### Supported RBAC mappings[​](#supported-rbac-mappings"DirectlinktoSupportedRBACmappings") +### Supported RBAC mappings[​](#supported-rbac-mappings "Direct link to Supported RBAC mappings") While Executor plugins support multiple mapping types, there are the following limitations: * Source plugins support only the `Static` mapping. * Automated [actions](https://docs.botkube.io/usage/automated-actions) support only the `Static` mapping. -Troubleshooting[​](#troubleshooting"DirectlinktoTroubleshooting") +Troubleshooting[​](#troubleshooting "Direct link to Troubleshooting") --------------------------------------------------------------------- In most cases troubleshooting Botkube RBAC issues means [troubleshooting Kubernetes RBAC](https://kubernetes.io/docs/reference/access-authn-authz/authorization/#checking-api-access), where `kubectl auth` command can help. If you see the following error: -Error: create: failed to create: secrets is forbidden: User "botkube-internal-static-user" cannot create resource "secrets" in API group "" in the namespace "default" + Error: create: failed to create: secrets is forbidden: User "botkube-internal-static-user" cannot create resource "secrets" in API group "" in the namespace "default" that means the RBAC rules configured for a given plugin are insufficient in a given context. Firstly, ensure what user/group is used for impersonation. To do that, check your configuration against the mapping description from the [Configuration](#configuration) section. -### Checking available actions for a given user/group[​](#checking-available-actions-for-a-given-usergroup"DirectlinktoCheckingavailableactionsforagivenuser/group") +### Checking available actions for a given user/group[​](#checking-available-actions-for-a-given-usergroup "Direct link to Checking available actions for a given user/group") After obtaining proper user and group, use the following command to list all available actions for a given user and/or group: -kubectl auth can-i --as {user} --as-group {group} --list + kubectl auth can-i --as {user} --as-group {group} --list For example, to list all available actions for user `botkube-internal-static-user` and group `private-channel` use: -kubectl auth can-i --as botkube-internal-static-user --as-group private-channel --list + kubectl auth can-i --as botkube-internal-static-user --as-group private-channel --list -### Checking if a given user/group can perform a given action[​](#checking-if-a-given-usergroup-can-perform-a-given-action"DirectlinktoCheckingifagivenuser/groupcanperformagivenaction") +### Checking if a given user/group can perform a given action[​](#checking-if-a-given-usergroup-can-perform-a-given-action "Direct link to Checking if a given user/group can perform a given action") To verify if a given user and/or group can perform a given action, use: -kubectl auth can-i get pod -n botkube --as {user} --as-group {group} + kubectl auth can-i get pod -n botkube --as {user} --as-group {group} For example, to verify if user `botkube-internal-static-user` and group `private-channel` can get Secret in namespace `botkube` use: -kubectl auth can-i get secret -n botkube --as botkube-internal-static-user --as-group private-channel + kubectl auth can-i get secret -n botkube --as botkube-internal-static-user --as-group private-channel -Plugin development[​](#plugin-development"DirectlinktoPlugindevelopment") +Plugin development[​](#plugin-development "Direct link to Plugin development") ------------------------------------------------------------------------------ If you are a plugin developer and want to learn how to use generated kubeconfig in the plugin codebase, refer to [Using kubeconfig](https://docs.botkube.io/plugin/using-kubeconfig) document. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source.md index 1afa78c1..02a9c3fd 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__source.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source.md @@ -7,21 +7,23 @@ Version: 1.10 The source configuration allows you to define multiple source configurations that can be later referred in [communication](https://docs.botkube.io/configuration/communication) bindings. For example, take a look at such source definition: -sources: "k8s-recommendation-alerts": # This is a source configuration name, which is referred in communication bindings. botkube/kubernetes: # ... trimmed ... "k8s-all-events": # This is a source configuration name, which is referred in communication bindings. botkube/kubernetes: # ... trimmed ... + sources: "k8s-recommendation-alerts": # This is a source configuration name, which is referred in communication bindings. botkube/kubernetes: # ... trimmed ... "k8s-all-events": # This is a source configuration name, which is referred in communication bindings. botkube/kubernetes: # ... trimmed ... This can be later used by the communication platforms: -communications: "default-group": socketSlack: channels: "default": bindings: sources: # The order is important for merging strategy. - k8s-recommendation-events # The source configuration name - k8s-all-events # The source configuration name # ... trimmed ... + communications: "default-group": socketSlack: channels: "default": bindings: sources: # The order is important for merging strategy. - k8s-recommendation-events # The source configuration name - k8s-all-events # The source configuration name # ... trimmed ... To use the Botkube source plugins, first you need to define the plugins repository under the `plugins` property: -plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml + plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml Next, you can configure source from a given repository: -sources: "plugins": repo-name/source-name@v1.0.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} For all source configuration properties, see the [**syntax**](#syntax) section. + sources: "plugins": repo-name/source-name@v1.0.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} -#### Restart Policy and Health Check Interval[​](#restart-policy-and-health-check-interval"DirectlinktoRestartPolicyandHealthCheckInterval") +For all source configuration properties, see the [**syntax**](#syntax) section. + +#### Restart Policy and Health Check Interval[​](#restart-policy-and-health-check-interval "Direct link to Restart Policy and Health Check Interval") This section of the configuration allows you to configure the restart policy for the Botkube source plugins. The restart policy is used when the source plugin fails to start. The default restart policy is `DeactivatePlugin`, which means that the plugin is deactivated after a given number of restarts. The restart policy can be configured with the following properties: @@ -37,11 +39,11 @@ The health check interval is used to check the health of the source plugins. The * `healthCheckInterval` - health check interval. -# Botkube Restart Policy on plugin failure.restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10healthCheckInterval: 10s + # Botkube Restart Policy on plugin failure.restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10healthCheckInterval: 10s -Syntax[​](#syntax"DirectlinktoSyntax") +Syntax[​](#syntax "Direct link to Syntax") ------------------------------------------ -# Map of sources. The `sources` property name is an alias for a given configuration.# Key name is used as a binding reference.## Format: sources.{alias}sources: "k8s-recommendation-events": # Built-in kubernetes source configuration. botkube/kubernetes: enabled: true config: # Kubernetes configuration recommendations: pod: noLatestImageTag: true # ... trimmed ...# Configuration for Botkube executors and sources plugins.plugins: # Directory, where downloaded plugins are cached. cacheDir: "/tmp" # List of plugins repositories. repositories: # This repository serves officially supported Botkube plugins. botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml # Other 3rd party repositories. repo-name: url: https://example.com/plugins-index.yaml # Configure Incoming webhook for source plugins. incomingWebhook: enabled: true port: 2115 targetPort: 2115 # Botkube Restart Policy on plugin failure. restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10 healthCheckInterval: 10s + # Map of sources. The `sources` property name is an alias for a given configuration.# Key name is used as a binding reference.## Format: sources.{alias}sources: "k8s-recommendation-events": # Built-in kubernetes source configuration. botkube/kubernetes: enabled: true config: # Kubernetes configuration recommendations: pod: noLatestImageTag: true # ... trimmed ...# Configuration for Botkube executors and sources plugins.plugins: # Directory, where downloaded plugins are cached. cacheDir: "/tmp" # List of plugins repositories. repositories: # This repository serves officially supported Botkube plugins. botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml # Other 3rd party repositories. repo-name: url: https://example.com/plugins-index.yaml # Configure Incoming webhook for source plugins. incomingWebhook: enabled: true port: 2115 targetPort: 2115 # Botkube Restart Policy on plugin failure. restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10 healthCheckInterval: 10s The default configuration for the Botkube Helm chart can be found in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source__argocd.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source__argocd.md index 891dbb21..55564251 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__source__argocd.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source__argocd.md @@ -15,14 +15,18 @@ ArgoCD source plugin sends events from ArgoCD to configured communication platfo The ArgoCD source plugin is hosted by the Botkube Cloud plugin repository and requires active Botkube Cloud account. -Prerequisite elevated RBAC permissions[​](#prerequisite-elevated-rbac-permissions"DirectlinktoPrerequisiteelevatedRBACpermissions") +Prerequisite elevated RBAC permissions[​](#prerequisite-elevated-rbac-permissions "Direct link to Prerequisite elevated RBAC permissions") ------------------------------------------------------------------------------------------------------------------------------------------ ArgoCD plugin requires specific RBAC permissions. First, create RBAC resources on your cluster: -cat > /tmp/argocd-rbac.yaml << ENDOFFILE---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: argocdrules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "update"] - apiGroups: ["argoproj.io"] resources: ["applications"] verbs: ["get", "patch"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: argocdroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: argocdsubjects:- kind: Group name: argocd apiGroup: rbac.authorization.k8s.ioENDOFFILEkubectl apply -f /tmp/argocd-rbac.yaml Next, use the `argocd` static group name in the plugin RBAC configuration: ![Image 1: ArgoCD RBAC](https://docs.botkube.io/assets/images/argocd-rbac-71831f5dfa99aade0bbccbcb140488fd.png) + cat > /tmp/argocd-rbac.yaml << ENDOFFILE---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: argocdrules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "update"] - apiGroups: ["argoproj.io"] resources: ["applications"] verbs: ["get", "patch"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: argocdroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: argocdsubjects:- kind: Group name: argocd apiGroup: rbac.authorization.k8s.ioENDOFFILEkubectl apply -f /tmp/argocd-rbac.yaml -Enabling plugin[​](#enabling-plugin"DirectlinktoEnablingplugin") +Next, use the `argocd` static group name in the plugin RBAC configuration: + +![Image 1: ArgoCD RBAC](https://docs.botkube.io/assets/images/argocd-rbac-71831f5dfa99aade0bbccbcb140488fd.png) + +Enabling plugin[​](#enabling-plugin "Direct link to Enabling plugin") --------------------------------------------------------------------- note @@ -41,42 +45,42 @@ You can enable the plugin as a part of Botkube instance configuration. 6. Click **Save** button. 7. Provide at least one ArgoCD application name and namespace in the configuration. -defaultSubscriptions: applications: - name: guestbook namespace: argocd + defaultSubscriptions: applications: - name: guestbook namespace: argocd You can watch multiple ArgoCD Applications at the same time, for example: -defaultSubscriptions: applications: - name: guestbook namespace: argocd - name: second-app namespace: second-app-namespace + defaultSubscriptions: applications: - name: guestbook namespace: argocd - name: second-app namespace: second-app-namespace 1. Click **Save**. -Cleanup[​](#cleanup"DirectlinktoCleanup") +Cleanup[​](#cleanup "Direct link to Cleanup") --------------------------------------------- When you disable or remove the plugin, it won't revert all changes made during the plugin startup. To clean up all ArgoCD follow the manual steps: * Clean up ArgoCD Notifications ConfigMap. It is usually named `argocd-notifications-cm` in the `argocd` Namespace. - -Remove all properties that contains `b-` or `botkube-` prefixes in the name. - -* Webhook property name follows the syntax `service.webhook.{webhook-name}`. For example, the `service.webhook.b-784e` property was created by Botkube. -* Template property name follows the syntax `template.{template-name}`. For example, the `template.template.botkube-argocd-ch05k-app-health-degraded` property was created by Botkube. -* Trigger property name follows the syntax `trigger.{trigger-name}`. For example, the `trigger.b-372839f86ed61c4c88` property was created by Botkube. + + Remove all properties that contains `b-` or `botkube-` prefixes in the name. + + * Webhook property name follows the syntax `service.webhook.{webhook-name}`. For example, the `service.webhook.b-784e` property was created by Botkube. + * Template property name follows the syntax `template.{template-name}`. For example, the `template.template.botkube-argocd-ch05k-app-health-degraded` property was created by Botkube. + * Trigger property name follows the syntax `trigger.{trigger-name}`. For example, the `trigger.b-372839f86ed61c4c88` property was created by Botkube. * Remove all `argocd.argoproj.io/notifications` annotations from ArgoCD Applications which contain `b-` prefix in the trigger and webhook names. + + The annotation key pattern is `notifications.argoproj.io/subscribe.{trigger-name}.{webhook-name}`. For example, the annotation `notifications.argoproj.io/subscribe.b-5cc4c004df01230f72.b-efc0: ""` was created by Botkube and it should be deleted if the plugin is disabled. + -The annotation key pattern is `notifications.argoproj.io/subscribe.{trigger-name}.{webhook-name}`. For example, the annotation `notifications.argoproj.io/subscribe.b-5cc4c004df01230f72.b-efc0: ""` was created by Botkube and it should be deleted if the plugin is disabled. - - -Configuration Syntax[​](#configuration-syntax"DirectlinktoConfigurationSyntax") +Configuration Syntax[​](#configuration-syntax "Direct link to Configuration Syntax") ------------------------------------------------------------------------------------ -### Basic configuration[​](#basic-configuration"DirectlinktoBasicconfiguration") +### Basic configuration[​](#basic-configuration "Direct link to Basic configuration") This section lists all basic configuration options for the ArgoCD source plugin. The ArgoCD notification config is created automatically during plugin startup and uses triggers and templates based on the [ArgoCD Notification Catalog](https://argo-cd.readthedocs.io/en/stable/operator-manual/notifications/catalog/). -defaultSubscriptions: # Provide application name and namespace to subscribe to all events for a given application. applications: - name: "guestbook" namespace: "argocd"argoCD: # ArgoCD UI base URL. It is used for generating links in the incoming events. uiBaseUrl: http://localhost:8080 # ArgoCD Notifications ConfigMap reference. notificationsConfigMap: name: argocd-notifications-cm namespace: argocd + defaultSubscriptions: # Provide application name and namespace to subscribe to all events for a given application. applications: - name: "guestbook" namespace: "argocd"argoCD: # ArgoCD UI base URL. It is used for generating links in the incoming events. uiBaseUrl: http://localhost:8080 # ArgoCD Notifications ConfigMap reference. notificationsConfigMap: name: argocd-notifications-cm namespace: argocd -### Advanced configuration[​](#advanced-configuration"DirectlinktoAdvancedconfiguration") +### Advanced configuration[​](#advanced-configuration "Direct link to Advanced configuration") The basic configuration should be sufficient for most users. However, you can customize all triggers, templates, webhook registration and more. For advanced properties, see the full default configuration below: -log: level: "info"# Interactivity configures command dropdown and additional buttons# for platforms which support interactivity (`isInteractive: true`) such as Socket Slack or Cloud Slack.interactivity: enableViewInUIButton: true enableOpenRepositoryButton: true commandVerbs: - "get" - "describe"# ArgoCD-related configuration.argoCD: # ArgoCD UI base URL. It is used for generating links in the incoming events. uiBaseUrl: http://localhost:8080 # ArgoCD Notifications ConfigMap reference. notificationsConfigMap: name: argocd-notifications-cm namespace: argocd# Webhook configuration.webhook: # If true, it registers Botkube webhook in ArgoCD notification config. register: true # If the name exceeds 6 characters, it might be truncated and modified to match the external constraints. name: "b-{{ .SourceName }}" url: "{{ .IncomingWebhook.FullURLForSource }}"# Triggers and templates are based on https://github.com/argoproj/argo-cd/blob/master/notifications_catalog/install.yaml.# Trigger might be created from existing template (`fromExisting`) or from scratch (`create`).notifications: - trigger: # fromExisting: # name: on-created # templateName: "botkube-{{ .SourceName }}-app-created" create: # If the name exceeds 20 characters, it might be modified to match the external constraints. name: "b-{{ .SourceName }}-create" conditions: # syntax: https://argo-cd.readthedocs.io/en/stable/operator-manual/notifications/triggers/ - description: Application is created. oncePer: app.metadata.name when: "true" send: - "botkube-{{ .SourceName }}-app-created" # template Name, you can use templating here subscriptions: &triggerSubscriptions # Even if false, the default subscriptions are still created. create: true # Additional subscriptions apart from `defaultSubscriptions` additional: [] # - name: "guestbook" # namespace: "argocd" - trigger: create: name: "b-{{ .SourceName }}-delete" conditions: - description: Application is deleted. oncePer: app.metadata.name when: app.metadata.deletionTimestamp != nil send: - "botkube-{{ .SourceName }}-app-deleted" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName}}-deploy" conditions: - description: Application is synced and healthy. Triggered once per commit. oncePer: app.status.operationState.syncResult.revision when: app.status.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy' send: - "botkube-{{ .SourceName }}-app-deployed" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName}}-degrade" conditions: - description: Application has degraded when: app.status.health.status == 'Degraded' send: - "botkube-{{ .SourceName }}-app-health-degraded" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-fail" conditions: - description: Application syncing has failed when: app.status.operationState != nil and app.status.operationState.phase in ['Error', 'Failed'] send: - "botkube-{{ .SourceName }}-app-sync-failed" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-run" conditions: - description: Application is being synced when: app.status.operationState != nil and app.status.operationState.phase in ['Running'] send: - "botkube-{{ .SourceName }}-app-sync-running" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-unknown" conditions: - description: Application status is 'Unknown' when: app.status.sync.status == 'Unknown' send: - "botkube-{{ .SourceName }}-app-sync-status-unknown" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-success" conditions: - description: Application syncing has succeeded when: app.status.operationState != nil and app.status.operationState.phase in ['Succeeded'] send: - "botkube-{{ .SourceName }}-app-sync-succeeded" subscriptions: *triggerSubscriptionstemplates: - name: "botkube-{{ .SourceName }}-app-created" body: | { "message": { "sections": [ { "header": ":new: Application `{{.app.metadata.name}}` has been created" } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-deleted" body: | { "message": { "sections": [ { "header": ":no_entry_sign: Application `{{.app.metadata.name}}` has been deleted" } ] } } - name: "botkube-{{ .SourceName }}-app-deployed" body: | { "message": { "sections": [ { "header": ":rocket: New version of the application `{{.app.metadata.name}}` is up and running", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Health Status", "value": "{{.app.status.health.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-health-degraded" body: | { "message": { "sections": [ { "header": ":exclamation: Application `{{.app.metadata.name}}` has degraded", "textFields": [ { "key": "Health Status", "value": "{{.app.status.health.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-failed" body: | { "message": { "timestamp": "{{.app.status.operationState.finishedAt}}", "sections": [ { "header": ":exclamation: The sync operation of application `{{.app.metadata.name}}` failed", "textFields": [ { "key": "Error message", "value": "{{.app.status.operationState.message}}" }, { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-running" body: | { "message": { "timestamp": "{{.app.status.operationState.startedAt}}", "sections": [ { "header": ":bulb: The sync operation of application `{{.app.metadata.name}}` started", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, {{ if and (.app.status.operationState) (.app.status.operationState.operation) }} { "key": "Initiated by", "value": "{{.app.status.operationState.operation.initiatedBy.username}}" }, {{ if .app.status.operationState.operation.initiatedBy.automated }} { "key": "Automated", "value": "{{.app.status.operationState.operation.initiatedBy.automated}}" }, {{ end }} {{ end }} { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-status-unknown" body: | { "message": { "sections": [ { "header": ":warning: Application `{{.app.metadata.name}}` sync status is unknown", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-succeeded" body: | { "message": { "timestamp": "{{.app.status.operationState.finishedAt}}", "sections": [ { "header": ":white_check_mark: Application `{{.app.metadata.name}}` has ben successfully synced", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Health Status", "value": "{{.app.status.health.status}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } + log: level: "info"# Interactivity configures command dropdown and additional buttons# for platforms which support interactivity (`isInteractive: true`) such as Socket Slack or Cloud Slack.interactivity: enableViewInUIButton: true enableOpenRepositoryButton: true commandVerbs: - "get" - "describe"# ArgoCD-related configuration.argoCD: # ArgoCD UI base URL. It is used for generating links in the incoming events. uiBaseUrl: http://localhost:8080 # ArgoCD Notifications ConfigMap reference. notificationsConfigMap: name: argocd-notifications-cm namespace: argocd# Webhook configuration.webhook: # If true, it registers Botkube webhook in ArgoCD notification config. register: true # If the name exceeds 6 characters, it might be truncated and modified to match the external constraints. name: "b-{{ .SourceName }}" url: "{{ .IncomingWebhook.FullURLForSource }}"# Triggers and templates are based on https://github.com/argoproj/argo-cd/blob/master/notifications_catalog/install.yaml.# Trigger might be created from existing template (`fromExisting`) or from scratch (`create`).notifications: - trigger: # fromExisting: # name: on-created # templateName: "botkube-{{ .SourceName }}-app-created" create: # If the name exceeds 20 characters, it might be modified to match the external constraints. name: "b-{{ .SourceName }}-create" conditions: # syntax: https://argo-cd.readthedocs.io/en/stable/operator-manual/notifications/triggers/ - description: Application is created. oncePer: app.metadata.name when: "true" send: - "botkube-{{ .SourceName }}-app-created" # template Name, you can use templating here subscriptions: &triggerSubscriptions # Even if false, the default subscriptions are still created. create: true # Additional subscriptions apart from `defaultSubscriptions` additional: [] # - name: "guestbook" # namespace: "argocd" - trigger: create: name: "b-{{ .SourceName }}-delete" conditions: - description: Application is deleted. oncePer: app.metadata.name when: app.metadata.deletionTimestamp != nil send: - "botkube-{{ .SourceName }}-app-deleted" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName}}-deploy" conditions: - description: Application is synced and healthy. Triggered once per commit. oncePer: app.status.operationState.syncResult.revision when: app.status.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy' send: - "botkube-{{ .SourceName }}-app-deployed" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName}}-degrade" conditions: - description: Application has degraded when: app.status.health.status == 'Degraded' send: - "botkube-{{ .SourceName }}-app-health-degraded" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-fail" conditions: - description: Application syncing has failed when: app.status.operationState != nil and app.status.operationState.phase in ['Error', 'Failed'] send: - "botkube-{{ .SourceName }}-app-sync-failed" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-run" conditions: - description: Application is being synced when: app.status.operationState != nil and app.status.operationState.phase in ['Running'] send: - "botkube-{{ .SourceName }}-app-sync-running" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-unknown" conditions: - description: Application status is 'Unknown' when: app.status.sync.status == 'Unknown' send: - "botkube-{{ .SourceName }}-app-sync-status-unknown" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-success" conditions: - description: Application syncing has succeeded when: app.status.operationState != nil and app.status.operationState.phase in ['Succeeded'] send: - "botkube-{{ .SourceName }}-app-sync-succeeded" subscriptions: *triggerSubscriptionstemplates: - name: "botkube-{{ .SourceName }}-app-created" body: | { "message": { "sections": [ { "header": ":new: Application `{{.app.metadata.name}}` has been created" } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-deleted" body: | { "message": { "sections": [ { "header": ":no_entry_sign: Application `{{.app.metadata.name}}` has been deleted" } ] } } - name: "botkube-{{ .SourceName }}-app-deployed" body: | { "message": { "sections": [ { "header": ":rocket: New version of the application `{{.app.metadata.name}}` is up and running", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Health Status", "value": "{{.app.status.health.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-health-degraded" body: | { "message": { "sections": [ { "header": ":exclamation: Application `{{.app.metadata.name}}` has degraded", "textFields": [ { "key": "Health Status", "value": "{{.app.status.health.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-failed" body: | { "message": { "timestamp": "{{.app.status.operationState.finishedAt}}", "sections": [ { "header": ":exclamation: The sync operation of application `{{.app.metadata.name}}` failed", "textFields": [ { "key": "Error message", "value": "{{.app.status.operationState.message}}" }, { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-running" body: | { "message": { "timestamp": "{{.app.status.operationState.startedAt}}", "sections": [ { "header": ":bulb: The sync operation of application `{{.app.metadata.name}}` started", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, {{ if and (.app.status.operationState) (.app.status.operationState.operation) }} { "key": "Initiated by", "value": "{{.app.status.operationState.operation.initiatedBy.username}}" }, {{ if .app.status.operationState.operation.initiatedBy.automated }} { "key": "Automated", "value": "{{.app.status.operationState.operation.initiatedBy.automated}}" }, {{ end }} {{ end }} { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-status-unknown" body: | { "message": { "sections": [ { "header": ":warning: Application `{{.app.metadata.name}}` sync status is unknown", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-succeeded" body: | { "message": { "timestamp": "{{.app.status.operationState.finishedAt}}", "sections": [ { "header": ":white_check_mark: Application `{{.app.metadata.name}}` has ben successfully synced", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Health Status", "value": "{{.app.status.health.status}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source__github-events.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source__github-events.md index 1d580b3b..313d7c95 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__source__github-events.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source__github-events.md @@ -15,7 +15,7 @@ The GitHub Events source sends events for configured GitHub repositories. These The GitHub Events plugin is hosted by the Botkube Cloud plugin repository and requires active Botkube Cloud account. -Enabling plugin[​](#enabling-plugin"DirectlinktoEnablingplugin") +Enabling plugin[​](#enabling-plugin "Direct link to Enabling plugin") --------------------------------------------------------------------- You can enable the plugin as a part of Botkube instance configuration. @@ -27,37 +27,39 @@ You can enable the plugin as a part of Botkube instance configuration. 5. Select the GitHub Events plugin. 6. Click **Save** button. -Configuration Syntax[​](#configuration-syntax"DirectlinktoConfigurationSyntax") +Configuration Syntax[​](#configuration-syntax "Direct link to Configuration Syntax") ------------------------------------------------------------------------------------ This plugin supports the following configuration: -# Logger configuration settings.log: level: info format: json# GitHub client configuration settings.github: # Auth allows you to set either PAT or APP credentials. # If none provided then watch functionality could not work properly, e.g. you can reach the API calls quota or if you are setting GitHub Enterprise base URL then an unauthorized error can occur. auth: # The GitHub access token. # Instruction for creating a token can be found here: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token. accessToken: your-github-token # AppConfig represents the GitHub App configuration. # This replaces the AccessToken. app: # GitHub App ID for authentication. id: "" # GitHub App Installation ID. installationId: "" # GitHub App private key in PEM format. privateKey: "" # The GitHub base URL for API requests. Defaults to the public GitHub API, but can be set to a domain endpoint to use with GitHub Enterprise. # Default: https://api.github.com/ baseUrl: "" # The GitHub upload URL for uploading files. It is taken into account only when the BaseURL is also set. If only the BaseURL is provided then this parameter defaults to the BaseURL value. # Default: https://uploads.github.com/ uploadUrl: ""# refreshDuration defines how often we should call GitHub REST API to check repository events.# It's the same for all configured repositories. For example, if you configure 5s refresh time, and you have 3 repositories registered,# we will execute maximum 2160 calls which easily fits into PAT rate limits.# You can create multiple plugins configuration with dedicated tokens to have the rate limits increased.## NOTE:# - we use conditional requests (https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#conditional-requests), so if there are no events the call doesn't count against your rate limits.\# - if you configure file pattern matcher for merged pull request events we execute one more additional call to check which files were changed in the context of a given pull request## Rate limiting: https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#rate-limitingrefreshDuration: 10srepositories: - name: owner/repo1 on: pullRequests: - types: [open, merged] # Allowed pull request types (open, closed, merged). paths: # Included file patterns for pull request changes. include: ["kustomize/.*"] # Excluded file patterns for pull request changes. # exclude: [ '.*\.js' ] labels: # Included labels for pull requests. include: ["bug"] # Excluded labels for pull requests. # exclude: [ 'enhancement' ] notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " - name: owner/repo2 on: # EventsAPI watches for /events API containing events triggered by activity on GitHub. # This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h. # source: https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events events: # WatchEvent for now emitted only when someone stars a repository. # https://docs.github.com/en/webhooks-and-events/events/github-event-types#watchevent - type: "WatchEvent" # IssuesEvent with json path filter - type: "IssuesEvent" # The JSONPath expression to filter events jsonPath: ".action" # The value to match in the JSONPath result value: "opened" notificationTemplate: previewTpl: |- Issue Opened #{{ .Issue.Number }} {{ .Issue.Title }} State: {{ .Issue.State }} extraButtons: - displayName: Open url: "{{ .Issue.HTMLURL }}" style: primary You can use either a [personal access token](#github-personal-access-token) or a [GitHub App](#github-app) for authentication. By using GitHub Apps, you can increase your maximum rate limits because multiple GitHub Apps are independent and do not share the rate limits. However, using multiple Personal Access Tokens (PATs) for the same account will result in sharing the same rate limit. + # Logger configuration settings.log: level: info format: json# GitHub client configuration settings.github: # Auth allows you to set either PAT or APP credentials. # If none provided then watch functionality could not work properly, e.g. you can reach the API calls quota or if you are setting GitHub Enterprise base URL then an unauthorized error can occur. auth: # The GitHub access token. # Instruction for creating a token can be found here: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token. accessToken: your-github-token # AppConfig represents the GitHub App configuration. # This replaces the AccessToken. app: # GitHub App ID for authentication. id: "" # GitHub App Installation ID. installationId: "" # GitHub App private key in PEM format. privateKey: "" # The GitHub base URL for API requests. Defaults to the public GitHub API, but can be set to a domain endpoint to use with GitHub Enterprise. # Default: https://api.github.com/ baseUrl: "" # The GitHub upload URL for uploading files. It is taken into account only when the BaseURL is also set. If only the BaseURL is provided then this parameter defaults to the BaseURL value. # Default: https://uploads.github.com/ uploadUrl: ""# refreshDuration defines how often we should call GitHub REST API to check repository events.# It's the same for all configured repositories. For example, if you configure 5s refresh time, and you have 3 repositories registered,# we will execute maximum 2160 calls which easily fits into PAT rate limits.# You can create multiple plugins configuration with dedicated tokens to have the rate limits increased.## NOTE:# - we use conditional requests (https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#conditional-requests), so if there are no events the call doesn't count against your rate limits.\# - if you configure file pattern matcher for merged pull request events we execute one more additional call to check which files were changed in the context of a given pull request## Rate limiting: https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#rate-limitingrefreshDuration: 10srepositories: - name: owner/repo1 on: pullRequests: - types: [open, merged] # Allowed pull request types (open, closed, merged). paths: # Included file patterns for pull request changes. include: ["kustomize/.*"] # Excluded file patterns for pull request changes. # exclude: [ '.*\.js' ] labels: # Included labels for pull requests. include: ["bug"] # Excluded labels for pull requests. # exclude: [ 'enhancement' ] notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " - name: owner/repo2 on: # EventsAPI watches for /events API containing events triggered by activity on GitHub. # This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h. # source: https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events events: # WatchEvent for now emitted only when someone stars a repository. # https://docs.github.com/en/webhooks-and-events/events/github-event-types#watchevent - type: "WatchEvent" # IssuesEvent with json path filter - type: "IssuesEvent" # The JSONPath expression to filter events jsonPath: ".action" # The value to match in the JSONPath result value: "opened" notificationTemplate: previewTpl: |- Issue Opened #{{ .Issue.Number }} {{ .Issue.Title }} State: {{ .Issue.State }} extraButtons: - displayName: Open url: "{{ .Issue.HTMLURL }}" style: primary -### GitHub personal access token[​](#github-personal-access-token"DirectlinktoGitHubpersonalaccesstoken") +You can use either a [personal access token](#github-personal-access-token) or a [GitHub App](#github-app) for authentication. By using GitHub Apps, you can increase your maximum rate limits because multiple GitHub Apps are independent and do not share the rate limits. However, using multiple Personal Access Tokens (PATs) for the same account will result in sharing the same rate limit. + +### GitHub personal access token[​](#github-personal-access-token "Direct link to GitHub personal access token") Follow the instructions [here](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token) to create a token. The required scope differs for public and private repositories. -### GitHub App[​](#github-app"DirectlinktoGitHubApp") +### GitHub App[​](#github-app "Direct link to GitHub App") To use a GitHub App: 1. [Create a GitHub App](https://docs.github.com/en/developers/apps/building-github-apps/creating-a-github-app). No callback or webhook URL is needed. - + 2. Add read-only permission to the "Members" item of organization permissions. - + 3. [Install the app in your organization](https://docs.github.com/en/developers/apps/managing-github-apps/installing-github-apps). - + 4. Done! Use the following details for authentication: - -| Name | Description | -| --- | --- | -| GitHub App Private Key | PEM-format key generated when the app is installed. If you lost it, you can regenerate it ([docs](https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#generating-a-private-key)). | -| GitHub App ID | Found in the app's "About" page (Organization settings -> Developer settings -> Edit button on your app). | -| GitHub App Installation ID | Found in the URL your organization's app install page (Organization settings -> Github Apps -> Configure button on your app). It's the last number in the URL, ex: `https://github.com/organizations/{my-org}/settings/installations/1234567890`. | - - -Subscriptions[​](#subscriptions"DirectlinktoSubscriptions") + + | Name | Description | + | --- | --- | + | GitHub App Private Key | PEM-format key generated when the app is installed. If you lost it, you can regenerate it ([docs](https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#generating-a-private-key)). | + | GitHub App ID | Found in the app's "About" page (Organization settings -> Developer settings -> Edit button on your app). | + | GitHub App Installation ID | Found in the URL your organization's app install page (Organization settings -> Github Apps -> Configure button on your app). It's the last number in the URL, ex: `https://github.com/organizations/{my-org}/settings/installations/1234567890`. | + + +Subscriptions[​](#subscriptions "Direct link to Subscriptions") --------------------------------------------------------------- The GitHub Events source plugin uses polling instead of Webhook endpoint for retrieving GitHub events. It calls two types of GitHub REST API endpoints with a configured refresh time window: @@ -67,23 +69,38 @@ The GitHub Events source plugin uses polling instead of Webhook endpoint for ret By default, we use [conditional requests](https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#conditional-requests) to prevent excessive API calls. As a result, from `on.pullRequests` triggers may have up to a 60-second delay due to caching. -### Pull requests[​](#pull-requests"DirectlinktoPullrequests") +### Pull requests[​](#pull-requests "Direct link to Pull requests") For a configured `refreshDuration` we call the [`/repos/{owner}/{repo}/pulls`](https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests) endpoint for all registered repositories. It's configured to fetch 100 pull requests that were recently modified. We ignore all events that were already processed. -#### Matching criteria[​](#matching-criteria"DirectlinktoMatchingcriteria") +#### Matching criteria[​](#matching-criteria "Direct link to Matching criteria") If no matching criteria are specified, all pull requests will be reported. For example: -repositories: - name: owner/repo1 on: pullRequests: [] To narrow down emitted events, you can specify at least one of the available criteria: * `types`: This is a list of pull request types for which the event should be triggered. The allowed types are: `open`, `closed`, `merged`. * `paths.include`: This is a list of file patterns for which the event should be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `["kustomize/.*"]`. * `paths.exclude`: This is a list of file patterns for which the event should not be triggered. It also supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `['.*\.js']`. This exclusion criteria takes precedence over `paths.include`. * `labels.include`: This is a list of label patterns for which the event should be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `["backend-.*"]`. * `labels.exclude`: This is a list of label patterns for which the event should not be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `['bug']`. This exclusion criteria takes precedence over `labels.include`. #### Templating[​](#templating"DirectlinktoTemplating") + repositories: - name: owner/repo1 on: pullRequests: [] + +To narrow down emitted events, you can specify at least one of the available criteria: + +* `types`: This is a list of pull request types for which the event should be triggered. The allowed types are: `open`, `closed`, `merged`. + +* `paths.include`: This is a list of file patterns for which the event should be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `["kustomize/.*"]`. + +* `paths.exclude`: This is a list of file patterns for which the event should not be triggered. It also supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `['.*\.js']`. This exclusion criteria takes precedence over `paths.include`. + +* `labels.include`: This is a list of label patterns for which the event should be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `["backend-.*"]`. + +* `labels.exclude`: This is a list of label patterns for which the event should not be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `['bug']`. This exclusion criteria takes precedence over `labels.include`. + + +#### Templating[​](#templating "Direct link to Templating") You can customize the notification template with additional buttons: -notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " + notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " For the `commandTpl` you can use all fields that are available on [`pullRequest`](https://github.com/google/go-github/blob/899235e0a9d750d6fecf9048a676046d50f9d4a3/github/pulls.go#L29-L85) type. -### Events[​](#events"DirectlinktoEvents") +### Events[​](#events "Direct link to Events") For a configured `refreshDuration` we call the [`/repos/{owner}/{repo}/events`](https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events) endpoint for all registered repositories. @@ -93,18 +110,20 @@ This API is not built to serve real-time use cases. Depending on the time of day The Events API covers various event types. Refer to the [GitHub event types](https://docs.github.com/en/webhooks-and-events/events/github-event-types) page for more information. -#### Matching criteria[​](#matching-criteria-1"DirectlinktoMatchingcriteria") +#### Matching criteria[​](#matching-criteria-1 "Direct link to Matching criteria") To retrieve relevant events, you must define at least one entry within the `events` property. For instance: -events: - type: "WatchEvent" + events: - type: "WatchEvent" + +If you provide an empty list `events: []`, no events will be emitted. For more precise filtering of events, you can optionally use JSONPath along with the event type to filter based on specific criteria within the event payload. -If you provide an empty list `events: []`, no events will be emitted. For more precise filtering of events, you can optionally use JSONPath along with the event type to filter based on specific criteria within the event payload. #### Templating[​](#templating-1"DirectlinktoTemplating") +#### Templating[​](#templating-1 "Direct link to Templating") The available fields for templating differ based on the event type. Refer to the [google/go-github](https://github.com/google/go-github/tree/899235e0a9d750d6fecf9048a676046d50f9d4a3/github) repository for dedicated event types. For instance, you can add an "Open" button to an `IssuesEvent` template: -events: # IssuesEvent with json path filter - type: "IssuesEvent" # The JSONPath expression to filter events jsonPath: ".action" # The regex value to match in the JSONPath result value: "opened" notificationTemplate: previewTpl: |- Issue Opened #{{ .Issue.Number }} {{ .Issue.Title }} State: {{ .Issue.State }} extraButtons: - displayName: Open url: "{{ .Issue.HTMLURL }}" style: primary + events: # IssuesEvent with json path filter - type: "IssuesEvent" # The JSONPath expression to filter events jsonPath: ".action" # The regex value to match in the JSONPath result value: "opened" notificationTemplate: previewTpl: |- Issue Opened #{{ .Issue.Number }} {{ .Issue.Title }} State: {{ .Issue.State }} extraButtons: - displayName: Open url: "{{ .Issue.HTMLURL }}" style: primary Here, the `jsonPath` field specifies the JSONPath expression to filter events, and the value field defines the regex value to match within the JSONPath result. This combination helps narrow down reported events based on specific conditions within the event payload. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source__kubernetes.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source__kubernetes.md index 2f631d6e..776906c9 100644 --- a/hack/assistant-setup/content/docs.botkube.io__configuration__source__kubernetes.md +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source__kubernetes.md @@ -5,18 +5,18 @@ URL Source: https://docs.botkube.io/configuration/source/kubernetes Markdown Content: A `kubernetes` source plugin produces events for configured Kubernetes resources. These events can be sent to communication channels or actions. To learn how to bind sources to communication channels or actions, read the Communication and Action documents. -Enabling plugin[​](#enabling-plugin"DirectlinktoEnablingplugin") +Enabling plugin[​](#enabling-plugin "Direct link to Enabling plugin") --------------------------------------------------------------------- -### Self-hosted Botkube installation[​](#self-hosted-botkube-installation"DirectlinktoSelf-hostedBotkubeinstallation") +### Self-hosted Botkube installation[​](#self-hosted-botkube-installation "Direct link to Self-hosted Botkube installation") The Kubernetes plugin is hosted by the official Botkube plugin repository. First, make sure that the `botkube` repository is defined under `plugins` in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. -plugins: repositories: botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml + plugins: repositories: botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml To enable Kubernetes source, add `--set 'sources.{configuration-name}.botkube/kubernetes.enabled=true'` to a given Botkube [`install` command](https://docs.botkube.io/cli/commands/botkube_install). -### Botkube Cloud[​](#botkube-cloud"DirectlinktoBotkubeCloud") +### Botkube Cloud[​](#botkube-cloud "Direct link to Botkube Cloud") You can enable the plugin as a part of Botkube instance configuration. @@ -27,7 +27,7 @@ You can enable the plugin as a part of Botkube instance configuration. 5. Select the Kubernetes plugin. 6. Click **Save** button. -Event and resource constraints[​](#event-and-resource-constraints"DirectlinktoEventandresourceconstraints") +Event and resource constraints[​](#event-and-resource-constraints "Direct link to Event and resource constraints") ------------------------------------------------------------------------------------------------------------------ Define constraints for Kubernetes events to narrow down the events you want to receive. @@ -36,7 +36,7 @@ You can define both global constraints, that are applied to all resources within There are multiple types of constraints. Each constraint type is described in the following sections. -### Namespaces[​](#namespaces"DirectlinktoNamespaces") +### Namespaces[​](#namespaces "Direct link to Namespaces") Include and/or exclude namespaces to watch. You can use exact values or regex expressions to specify namespaces. @@ -46,27 +46,29 @@ Exclude takes precedence over include. If a given namespace is excluded, it will To watch all namespaces except those with `testing-` prefix, use the following constraint: -namespaces: include: - ".*" # include all... exclude: - "testing-.*" # ...except any namespace that has `testing-` prefix + namespaces: include: - ".*" # include all... exclude: - "testing-.*" # ...except any namespace that has `testing-` prefix To watch only `dev` and `prod` namespaces, use the following constraint: -namespaces: include: - "dev" - "prod" exclude: [] ### Labels[​](#labels"DirectlinktoLabels") + namespaces: include: - "dev" - "prod" exclude: [] + +### Labels[​](#labels "Direct link to Labels") Specify exact match for resource labels. The watched resources must have all the specified labels. **Example** -labels: # Match only the resources that have all the specified labels app: "my-app" environment: "production" + labels: # Match only the resources that have all the specified labels app: "my-app" environment: "production" -### Annotations[​](#annotations"DirectlinktoAnnotations") +### Annotations[​](#annotations "Direct link to Annotations") Specify exact match for resource annotations. The watched resources must have all the specified annotations. **Example** -annotations: # Match only the resources that have all the specified annotations. app: "my-app" my-annotation: "true" + annotations: # Match only the resources that have all the specified annotations. app: "my-app" my-annotation: "true" -### Resource name[​](#resource-name"DirectlinktoResourcename") +### Resource name[​](#resource-name "Direct link to Resource name") Filter events based on the resource name. If not defined, all resource names are matched. Exclude takes precedence over include. If a given resource name is excluded, it will be ignored, even if it included. @@ -76,7 +78,13 @@ You can use both exact values and regex expressions to specify resource names. T To match resource names that have `testing-` prefix, use the following constraint: -name: include: - "testing-.*" # include only resource names that have `testing-` prefix exclude: [] To match all resources except those that have `testing-` prefix, use the following constraint: name: include: - ".*" # include all resource names... exclude: - "testing-.*" # ...except those that have `testing-` prefix ### Event types[​](#event-types"DirectlinktoEventtypes") + name: include: - "testing-.*" # include only resource names that have `testing-` prefix exclude: [] + +To match all resources except those that have `testing-` prefix, use the following constraint: + + name: include: - ".*" # include all resource names... exclude: - "testing-.*" # ...except those that have `testing-` prefix + +### Event types[​](#event-types "Direct link to Event types") List the event types to watch. @@ -90,9 +98,9 @@ Possible values: **Example** -event: types: # watch for create, delete and error events - create - delete - error + event: types: # watch for create, delete and error events - create - delete - error -### Event reason[​](#event-reason"DirectlinktoEventreason") +### Event reason[​](#event-reason "Direct link to Event reason") Define exact values or regex expression to match the event reason. If not defined, all events are watched. Exclude takes precedence over include. If a given event reason is excluded, it will be ignored, even if it included. @@ -100,7 +108,13 @@ Define exact values or regex expression to match the event reason. If not define To match events with reason equal to `BackOff`, use the following constraint: -event: reason: include: - "^BackOff$" # match events with reason equal to `BackOff` exclude: [] To match all events except those with reason equal to `BackOff`, use the following constraint: event: reason: include: - ".*" # match all event reasons... exclude: - "^BackOff$" # ...except those equal to `BackOff` ### Event message[​](#event-message"DirectlinktoEventmessage") + event: reason: include: - "^BackOff$" # match events with reason equal to `BackOff` exclude: [] + +To match all events except those with reason equal to `BackOff`, use the following constraint: + + event: reason: include: - ".*" # match all event reasons... exclude: - "^BackOff$" # ...except those equal to `BackOff` + +### Event message[​](#event-message "Direct link to Event message") Define regex expression to match the event message. If not defined, all event messages are matched. @@ -110,7 +124,13 @@ Exclude takes precedence over include. If a given event message is excluded, it To match events with message starting with `Back-off`, use the following constraint: -event: message: include: - "^Back-off.*" # match all events with message starting with `Back-off` exclude: [] To match all events except those with message starting with `Back-off`, use the following constraint: event: message: include: - ".*" # match all event messages... exclude: - "^Back-off.*" # ...except those starting with `Back-off` ### Recommendations[​](#recommendations"DirectlinktoRecommendations") + event: message: include: - "^Back-off.*" # match all events with message starting with `Back-off` exclude: [] + +To match all events except those with message starting with `Back-off`, use the following constraint: + + event: message: include: - ".*" # match all event messages... exclude: - "^Back-off.*" # ...except those starting with `Back-off` + +### Recommendations[​](#recommendations "Direct link to Recommendations") You can configure recommendations related to Kubernetes resources. Recommendations respect [namespaces](#namespaces) constraint regex patterns. @@ -120,31 +140,35 @@ Currently, Kubernetes source plugin can send recommendation about 2 resources: ` In order to send recommendation for the Pods that have containers with `latest` tag or the Pods without labels, use the following configuration. -recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true + recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true If you want to receive recommendations for Ingress that contains invalid backend service definition or TLS secret, use the following configuration. -recommendations: # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true + recommendations: # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true -### Filters[​](#filters"DirectlinktoFilters") +### Filters[​](#filters "Direct link to Filters") The filter configuration allows you to configure filters which are used for all processed Kubernetes events. -# Filter settings for various sources.# Currently, all filters are globally enabled or disabled.# You can enable or disable filters with `@Botkube filters` commands.filters: kubernetes: # If true, enables support for `botkube.io/disable` resource annotations. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true + # Filter settings for various sources.# Currently, all filters are globally enabled or disabled.# You can enable or disable filters with `@Botkube filters` commands.filters: kubernetes: # If true, enables support for `botkube.io/disable` resource annotations. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true -Configuration Syntax[​](#configuration-syntax"DirectlinktoConfigurationSyntax") +Configuration Syntax[​](#configuration-syntax "Direct link to Configuration Syntax") ------------------------------------------------------------------------------------ This plugin supports the following configuration: -# Describes configuration for various recommendation insights.recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true# Filter settings for various sources.filters: # If true, enables support for `botkube.io/disable` resource annotation. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true# Describes namespaces for every Kubernetes resources you want to watch or exclude.# These namespaces are applied to every resource specified in the resources list.# However, every specified resource can override this by using its own namespaces object.namespaces: &k8s-events-namespaces # Include contains a list of allowed Namespaces. # It can also contain regex expressions: # `- ".*"` - to specify all Namespaces. include: - ".*" # Exclude contains a list of Namespaces to be ignored even if allowed by Include. # It can also contain regex expressions: # `- "test-.*"` - to specif all Namespaces with `test-` prefix. # Exclude list is checked before the Include list. # exclude: []# Describes event constraints for Kubernetes resources.# These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object.event: # Lists all event types to be watched. types: - create - delete - error # Optional list of exact values or regex patterns to filter events by event reason. # Skipped, if both include/exclude lists are empty. reason: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Optional list of exact values or regex patterns to filter event by event message. Skipped, if both include/exclude lists are empty. # If a given event has multiple messages, it is considered a match if any of the messages match the constraints. message: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: []# Filters Kubernetes resources to watch by annotations. Each resource needs to have all the specified annotations.# Regex expressions are not supported.annotations: {}# Filters Kubernetes resources to watch by labels. Each resource needs to have all the specified labels.# Regex expressions are not supported.labels: {}# Describes the Kubernetes resources to watch.# Resources are identified by its type in `{group}/{version}/{kind (plural)}` format. Examples: `apps/v1/deployments`, `v1/pods`.# Each resource can override the namespaces and event configuration by using dedicated `event` and `namespaces` field.# Also, each resource can specify its own `annotations`, `labels` and `name` regex.resources: - type: v1/pods # namespaces: # Overrides 'source'.kubernetes.namespaces # include: # - ".*" # exclude: [] # annotations: {} # Overrides 'source'.kubernetes.annotations # labels: {} # Overrides 'source'.kubernetes.labels # # Optional resource name constraints. # name: # # Include contains a list of allowed values. It can also contain regex expressions. # include: [] # # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # # Exclude list is checked before the Include list. # exclude: [] # event: # # Overrides 'source'.kubernetes.event.reason # reason: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.message # message: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.types # types: # - create - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes event: message: exclude: - ".*nf_conntrack_buckets.*" # Ignore node related noisy messages from GKE clusters - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/daemonsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.numberReady - type: batch/v1/jobs event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.conditions[*].type - type: apps/v1/deployments event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.availableReplicas - type: apps/v1/statefulsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.readyReplicascommands: # Configures which verbs are available in actionable items. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configure which resources are available in actionable items. resources: - "deployments" - "pods" - "namespaces" - "daemonsets" - "statefulsets" - "storageclasses" - "nodes" - "configmaps" - "services" - "ingresses"# Define extra buttons to be displayed beside the actionable notification message.extraButtons: - enabled: false trigger: type: ["error"] button: displayName: "Get Help" commandTpl: "doctor --resource={{ .Kind | lower }}/{{ .Name }} --namespace={{ .Namespace }} --error={{ .Reason }} --bk-cmd-header='AI assistance'"# Logger configurationlog: level: info disableColors: false Examples[​](#examples"DirectlinktoExamples") + # Describes configuration for various recommendation insights.recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true# Filter settings for various sources.filters: # If true, enables support for `botkube.io/disable` resource annotation. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true# Describes namespaces for every Kubernetes resources you want to watch or exclude.# These namespaces are applied to every resource specified in the resources list.# However, every specified resource can override this by using its own namespaces object.namespaces: &k8s-events-namespaces # Include contains a list of allowed Namespaces. # It can also contain regex expressions: # `- ".*"` - to specify all Namespaces. include: - ".*" # Exclude contains a list of Namespaces to be ignored even if allowed by Include. # It can also contain regex expressions: # `- "test-.*"` - to specif all Namespaces with `test-` prefix. # Exclude list is checked before the Include list. # exclude: []# Describes event constraints for Kubernetes resources.# These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object.event: # Lists all event types to be watched. types: - create - delete - error # Optional list of exact values or regex patterns to filter events by event reason. # Skipped, if both include/exclude lists are empty. reason: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Optional list of exact values or regex patterns to filter event by event message. Skipped, if both include/exclude lists are empty. # If a given event has multiple messages, it is considered a match if any of the messages match the constraints. message: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: []# Filters Kubernetes resources to watch by annotations. Each resource needs to have all the specified annotations.# Regex expressions are not supported.annotations: {}# Filters Kubernetes resources to watch by labels. Each resource needs to have all the specified labels.# Regex expressions are not supported.labels: {}# Describes the Kubernetes resources to watch.# Resources are identified by its type in `{group}/{version}/{kind (plural)}` format. Examples: `apps/v1/deployments`, `v1/pods`.# Each resource can override the namespaces and event configuration by using dedicated `event` and `namespaces` field.# Also, each resource can specify its own `annotations`, `labels` and `name` regex.resources: - type: v1/pods # namespaces: # Overrides 'source'.kubernetes.namespaces # include: # - ".*" # exclude: [] # annotations: {} # Overrides 'source'.kubernetes.annotations # labels: {} # Overrides 'source'.kubernetes.labels # # Optional resource name constraints. # name: # # Include contains a list of allowed values. It can also contain regex expressions. # include: [] # # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # # Exclude list is checked before the Include list. # exclude: [] # event: # # Overrides 'source'.kubernetes.event.reason # reason: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.message # message: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.types # types: # - create - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes event: message: exclude: - ".*nf_conntrack_buckets.*" # Ignore node related noisy messages from GKE clusters - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/daemonsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.numberReady - type: batch/v1/jobs event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.conditions[*].type - type: apps/v1/deployments event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.availableReplicas - type: apps/v1/statefulsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.readyReplicascommands: # Configures which verbs are available in actionable items. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configure which resources are available in actionable items. resources: - "deployments" - "pods" - "namespaces" - "daemonsets" - "statefulsets" - "storageclasses" - "nodes" - "configmaps" - "services" - "ingresses"# Define extra buttons to be displayed beside the actionable notification message.extraButtons: - enabled: false trigger: type: ["error"] button: displayName: "Get Help" commandTpl: "doctor --resource={{ .Kind | lower }}/{{ .Name }} --namespace={{ .Namespace }} --error={{ .Reason }} --bk-cmd-header='AI assistance'"# Logger configurationlog: level: info disableColors: false + +Examples[​](#examples "Direct link to Examples") ------------------------------------------------ This section lists all examples for Kubernetes source plugin. They are based on the Botkube self-hosted installation but can be used with Botkube Cloud by extracting the `botkube/kubernetes.config` section. -# Map of sources. Source contains configuration for Kubernetes events and sending recommendations.# The property name under `sources` object is an alias for a given configuration. You can define multiple sources configuration with different names.# Key name is used as a binding reference.# See the `values.yaml` file for full object.### Format: sources.{alias}sources: "k8s-recommendation-events": displayName: "Kubernetes Recommendations" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes configuration for various recommendation insights. recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true "k8s-all-events": displayName: "Kubernetes Info" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Logging configuration log: # Log level level: info # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: &k8s-events-namespaces # Include contains a list of allowed Namespaces. # It can also contain regex expressions: # `- ".*"` - to specify all Namespaces. include: - ".*" # Exclude contains a list of Namespaces to be ignored even if allowed by Include. # It can also contain regex expressions: # `- "test-.*"` - to specif all Namespaces with `test-` prefix. # Exclude list is checked before the Include list. # exclude: [] # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - create - delete - error # Optional list of exact values or regex patterns to filter events by event reason. # Skipped, if both include/exclude lists are empty. reason: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Optional list of exact values or regex patterns to filter event by event message. Skipped, if both include/exclude lists are empty. # If a given event has multiple messages, it is considered a match if any of the messages match the constraints. message: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Filters Kubernetes resources to watch by annotations. Each resource needs to have all the specified annotations. # Regex expressions are not supported. annotations: {} # Filters Kubernetes resources to watch by labels. Each resource needs to have all the specified labels. # Regex expressions are not supported. labels: {} # Describes the Kubernetes resources to watch. # Resources are identified by its type in `{group}/{version}/{kind (plural)}` format. Examples: `apps/v1/deployments`, `v1/pods`. # Each resource can override the namespaces and event configuration by using dedicated `event` and `namespaces` field. # Also, each resource can specify its own `annotations`, `labels` and `name` regex. # See the `values.yaml` file for full object. resources: - type: v1/pods # namespaces: # Overrides 'source'.kubernetes.namespaces # include: # - ".*" # exclude: [] # annotations: {} # Overrides 'source'.kubernetes.annotations # labels: {} # Overrides 'source'.kubernetes.labels # # Optional resource name constraints. # name: # # Include contains a list of allowed values. It can also contain regex expressions. # include: [] # # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # # Exclude list is checked before the Include list. # exclude: [] # event: # # Overrides 'source'.kubernetes.event.reason # reason: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.message # message: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.types # types: # - create - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/daemonsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.numberReady - type: batch/v1/jobs event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.conditions[*].type - type: apps/v1/deployments event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.availableReplicas - type: apps/v1/statefulsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.readyReplicas ## Custom resource example # - type: velero.io/v1/backups # namespaces: # include: # - ".*" # exclude: # - # event: # types: # - create # - update # - delete # - error # updateSetting: # includeDiff: true # fields: # - status.phase # List of available commands that can be used in actionable items under kubernetes events. commands: # Configures which verbs are available in actionable items. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configure which resources are available in actionable items. resources: [ "deployments", "pods", "namespaces", "daemonsets", "statefulsets", "storageclasses", "nodes", "configmaps", "services", "ingresses", ] # Filter settings for various sources. # Currently, all filters are globally enabled or disabled. # You can enable or disable filters with `@Botkube enable/disable filters` commands. filters: kubernetes: # If true, enables support for `botkube.io/disable` resource annotations. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true "k8s-err-events": displayName: "Kubernetes Errors" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - error # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs "k8s-err-with-logs-events": displayName: "Kubernetes Errors for resources with logs" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - error # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs # `apps/v1/replicasets` excluded on purpose - to not show logs twice for a given higher-level resource (e.g. Deployment) "k8s-create-events": displayName: "Kubernetes Resource Created Events" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - create # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/configmaps - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs The default configuration for Helm chart can be found in [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml). + # Map of sources. Source contains configuration for Kubernetes events and sending recommendations.# The property name under `sources` object is an alias for a given configuration. You can define multiple sources configuration with different names.# Key name is used as a binding reference.# See the `values.yaml` file for full object.### Format: sources.{alias}sources: "k8s-recommendation-events": displayName: "Kubernetes Recommendations" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes configuration for various recommendation insights. recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true "k8s-all-events": displayName: "Kubernetes Info" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Logging configuration log: # Log level level: info # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: &k8s-events-namespaces # Include contains a list of allowed Namespaces. # It can also contain regex expressions: # `- ".*"` - to specify all Namespaces. include: - ".*" # Exclude contains a list of Namespaces to be ignored even if allowed by Include. # It can also contain regex expressions: # `- "test-.*"` - to specif all Namespaces with `test-` prefix. # Exclude list is checked before the Include list. # exclude: [] # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - create - delete - error # Optional list of exact values or regex patterns to filter events by event reason. # Skipped, if both include/exclude lists are empty. reason: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Optional list of exact values or regex patterns to filter event by event message. Skipped, if both include/exclude lists are empty. # If a given event has multiple messages, it is considered a match if any of the messages match the constraints. message: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Filters Kubernetes resources to watch by annotations. Each resource needs to have all the specified annotations. # Regex expressions are not supported. annotations: {} # Filters Kubernetes resources to watch by labels. Each resource needs to have all the specified labels. # Regex expressions are not supported. labels: {} # Describes the Kubernetes resources to watch. # Resources are identified by its type in `{group}/{version}/{kind (plural)}` format. Examples: `apps/v1/deployments`, `v1/pods`. # Each resource can override the namespaces and event configuration by using dedicated `event` and `namespaces` field. # Also, each resource can specify its own `annotations`, `labels` and `name` regex. # See the `values.yaml` file for full object. resources: - type: v1/pods # namespaces: # Overrides 'source'.kubernetes.namespaces # include: # - ".*" # exclude: [] # annotations: {} # Overrides 'source'.kubernetes.annotations # labels: {} # Overrides 'source'.kubernetes.labels # # Optional resource name constraints. # name: # # Include contains a list of allowed values. It can also contain regex expressions. # include: [] # # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # # Exclude list is checked before the Include list. # exclude: [] # event: # # Overrides 'source'.kubernetes.event.reason # reason: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.message # message: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.types # types: # - create - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/daemonsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.numberReady - type: batch/v1/jobs event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.conditions[*].type - type: apps/v1/deployments event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.availableReplicas - type: apps/v1/statefulsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.readyReplicas ## Custom resource example # - type: velero.io/v1/backups # namespaces: # include: # - ".*" # exclude: # - # event: # types: # - create # - update # - delete # - error # updateSetting: # includeDiff: true # fields: # - status.phase # List of available commands that can be used in actionable items under kubernetes events. commands: # Configures which verbs are available in actionable items. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configure which resources are available in actionable items. resources: [ "deployments", "pods", "namespaces", "daemonsets", "statefulsets", "storageclasses", "nodes", "configmaps", "services", "ingresses", ] # Filter settings for various sources. # Currently, all filters are globally enabled or disabled. # You can enable or disable filters with `@Botkube enable/disable filters` commands. filters: kubernetes: # If true, enables support for `botkube.io/disable` resource annotations. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true "k8s-err-events": displayName: "Kubernetes Errors" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - error # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs "k8s-err-with-logs-events": displayName: "Kubernetes Errors for resources with logs" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - error # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs # `apps/v1/replicasets` excluded on purpose - to not show logs twice for a given higher-level resource (e.g. Deployment) "k8s-create-events": displayName: "Kubernetes Resource Created Events" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - create # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/configmaps - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs + +The default configuration for Helm chart can be found in [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml). -Implementation details[​](#implementation-details"DirectlinktoImplementationdetails") +Implementation details[​](#implementation-details "Direct link to Implementation details") ------------------------------------------------------------------------------------------ Kubernetes source plugin uses [Kubernetes Informers](https://pkg.go.dev/k8s.io/client-go/informers) to get Kubernetes events in real-time. As the informer's synchronized data is cached in-memory and, in some cases, might take a significant amount of memory, Kubernetes plugin comes with memory usage optimization. diff --git a/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__getstarted.md b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__getstarted.md index f5234e4e..00af9e2b 100644 --- a/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__getstarted.md +++ b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__getstarted.md @@ -8,48 +8,48 @@ Get Started with Botkube in Minutes Welcome to Botkube! This guide will walk you through the process of setting up Botkube to send notifications and execute commands in your Kubernetes clusters directly from Slack and Microsoft Teams. -[![Image 1: Watch our video tutorial for a step-by-step walkthrough](https://img.youtube.com/vi/AGKJsNro4jE/0.jpg)](https://www.youtube.com/watch?v=AGKJsNro4jE&t=59s"Watchourvideotutorialforastep-by-stepwalkthrough") +[![Image 1: Watch our video tutorial for a step-by-step walkthrough](https://img.youtube.com/vi/AGKJsNro4jE/0.jpg)](https://www.youtube.com/watch?v=AGKJsNro4jE&t=59s "Watch our video tutorial for a step-by-step walkthrough") -Overview[​](#overview"DirectlinktoOverview") +Overview[​](#overview "Direct link to Overview") ------------------------------------------------ Botkube is a Kubernetes Monitoring and Tool designed to optimize your K8s workflow by providing real-time alerts from and commands within your Kubernetes environment. With Botkube, you can receive alerts, execute commands, and stay informed about your cluster's health and status, all from your preferred communication platform. -Step 1: Sign up for Botkube[​](#step-1-sign-up-for-botkube"DirectlinktoStep1:SignupforBotkube") +Step 1: Sign up for Botkube[​](#step-1-sign-up-for-botkube "Direct link to Step 1: Sign up for Botkube") -------------------------------------------------------------------------------------------------------- Visit [botkube.io](http://botkube.io/) and create an account. This account will enable you to access the Botkube Cloud Dashboard and manage your Botkube instances. -Step 2: Connect Your Kubernetes Cluster[​](#step-2-connect-your-kubernetes-cluster"DirectlinktoStep2:ConnectYourKubernetesCluster") +Step 2: Connect Your Kubernetes Cluster[​](#step-2-connect-your-kubernetes-cluster "Direct link to Step 2: Connect Your Kubernetes Cluster") -------------------------------------------------------------------------------------------------------------------------------------------- 1. **Create a New Instance:** Log in to the Botkube Cloud Dashboard and select "create a new instance". - -![Image 2: Create New Instance](https://docs.botkube.io/assets/images/create-new-instance-e61971eb5a0d3d7d2359e31fc38d8870.png) - + + ![Image 2: Create New Instance](https://docs.botkube.io/assets/images/create-new-instance-e61971eb5a0d3d7d2359e31fc38d8870.png) + 2. **Install Botkube Agent:** Follow the instructions provided on the dashboard to install the Botkube Agent on your Kubernetes cluster. You can choose either Helm or a CLI command for installation. + + ![Image 3: Install Botkube Agent](https://docs.botkube.io/assets/images/install-agent-1f2a430da33c7648736702596a696b5d.png) + -![Image 3: Install Botkube Agent](https://docs.botkube.io/assets/images/install-agent-1f2a430da33c7648736702596a696b5d.png) - - -Step 3: Connect to Your Preferred Communication Platform[​](#step-3-connect-to-your-preferred-communication-platform"DirectlinktoStep3:ConnecttoYourPreferredCommunicationPlatform") +Step 3: Connect to Your Preferred Communication Platform[​](#step-3-connect-to-your-preferred-communication-platform "Direct link to Step 3: Connect to Your Preferred Communication Platform") ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Follow the instructions provided on the Botkube Cloud Dashboard to connect Botkube to your preferred communication platform, such as [Slack](https://docs.botkube.io/installation/slack/cloud-slack) or [Microsoft Teams](https://docs.botkube.io/installation/teams/). -Step 4: Setting Up a Botkube Cloud Instance[​](#step-4-setting-up-a-botkube-cloud-instance"DirectlinktoStep4:SettingUpaBotkubeCloudInstance") +Step 4: Setting Up a Botkube Cloud Instance[​](#step-4-setting-up-a-botkube-cloud-instance "Direct link to Step 4: Setting Up a Botkube Cloud Instance") -------------------------------------------------------------------------------------------------------------------------------------------------------- Once your Botkube instance is connected to your communication platform, you will start receiving alerts and notifications from your Kubernetes cluster. -### Finalizing Your Botkube Cloud Instance[​](#finalizing-your-botkube-cloud-instance"DirectlinktoFinalizingYourBotkubeCloudInstance") +### Finalizing Your Botkube Cloud Instance[​](#finalizing-your-botkube-cloud-instance "Direct link to Finalizing Your Botkube Cloud Instance") 1. **Select Channels:** From the dashboard, choose the channels you wish to use with Botkube. 2. **Configure Plugins:** Connect your preferred plugins to enhance Botkube's functionality. 3. **Set Preferences:** Review and select your preferred Botkube defaults. 4. **Apply Changes:** Finalize your setup by selecting "Apply changes." -Step 5: Start Receiving Alerts[​](#step-5-start-receiving-alerts"DirectlinktoStep5:StartReceivingAlerts") +Step 5: Start Receiving Alerts[​](#step-5-start-receiving-alerts "Direct link to Step 5: Start Receiving Alerts") ----------------------------------------------------------------------------------------------------------------- Congratulations! You're now ready to start using Botkube to streamline your Kubernetes workflow and stay informed about your cluster's status. If you encounter any issues or need further assistance, feel free to reach out to our community on [Slack](https://join.botkube.io/) or [schedule a call with one of our team](https://calendly.com/d/274-ytm-6mk/chat-with-the-botkube-team-30-minutes). Happy Monitoring! diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__discord__cloud.md b/hack/assistant-setup/content/docs.botkube.io__installation__discord__cloud.md index 4bf294eb..aad97426 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__discord__cloud.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__discord__cloud.md @@ -4,54 +4,54 @@ URL Source: https://docs.botkube.io/installation/discord/cloud Markdown Content: * Go to Botkube Cloud [Web App](https://app.botkube.io/) and create a new instance. - -You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) - + + You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) + * Fill in the `Instance Display Name` and click `Next` button. - -![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/discord_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) - + + ![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/discord_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) + * Click `Add platform` dropdown, and select `Discord` option. ![Image 2: Select Platform](https://docs.botkube.io/assets/images/discord_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) - + * Create Botkube app at your Discord Server - -Reach [https://discordapp.com/developers/applications](https://discordapp.com/developers/applications). - -![Image 3: discord_applications_portal](https://docs.botkube.io/assets/images/discord_applications_portal-a4e1b45cb3df4a271cbd599ec9f3b7ab.png) - + + Reach [https://discordapp.com/developers/applications](https://discordapp.com/developers/applications). + + ![Image 3: discord_applications_portal](https://docs.botkube.io/assets/images/discord_applications_portal-a4e1b45cb3df4a271cbd599ec9f3b7ab.png) + * Create a "New Application" named Botkube and add a bot named **Botkube** into the Application. - -![Image 4: discord_create_new](https://docs.botkube.io/assets/images/discord_create_new-ba9152ffe6f7be4f64af374d836c7062.png) - + + ![Image 4: discord_create_new](https://docs.botkube.io/assets/images/discord_create_new-ba9152ffe6f7be4f64af374d836c7062.png) + * Copy the Application **APPLICATION ID** - -![Image 5: discord_copy_client_id](https://docs.botkube.io/assets/images/discord_copy_application_id-bf48ff3b0d9dc613c35d92dc287bd305.png) - -and paste it in the `BotID` field in the form. - -![Image 6: bot_id_form](https://docs.botkube.io/assets/images/discord_bot_id_form-a9a0d728ad26361d5454b3eac4af8838.png) - + + ![Image 5: discord_copy_client_id](https://docs.botkube.io/assets/images/discord_copy_application_id-bf48ff3b0d9dc613c35d92dc287bd305.png) + + and paste it in the `BotID` field in the form. + + ![Image 6: bot_id_form](https://docs.botkube.io/assets/images/discord_bot_id_form-a9a0d728ad26361d5454b3eac4af8838.png) + * Add a description - `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. - -Set the Botkube icon (Botkube icon can be downloaded from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-color-192x192.png)). - -Click on Save Changes to update the Bot. - + + Set the Botkube icon (Botkube icon can be downloaded from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-color-192x192.png)). + + Click on Save Changes to update the Bot. + * Now, reach the **Bot** page and Click **Add Bot** to add a Discord Bot to your application. - -![Image 7: discord_add_bot](https://docs.botkube.io/assets/images/discord_add_bot-867c43f73a079d08996072d3261d2fbc.png) - + + ![Image 7: discord_add_bot](https://docs.botkube.io/assets/images/discord_add_bot-867c43f73a079d08996072d3261d2fbc.png) + * After Bot creation, now you can see a bot is added to your application. Click on the **Reset Token** button. - -![Image 8: discord_bot_created](https://docs.botkube.io/assets/images/discord_bot_created-845172424d2066002bff223d9a3afd36.png) - + + ![Image 8: discord_bot_created](https://docs.botkube.io/assets/images/discord_bot_created-845172424d2066002bff223d9a3afd36.png) + * Copy the Token and paste it in `Token` field the form. - -![Image 9: discord_token_form](https://docs.botkube.io/assets/images/discord_token_form-0885aae7fa9636d7f896aae91ee10cdf.png) - + + ![Image 9: discord_token_form](https://docs.botkube.io/assets/images/discord_token_form-0885aae7fa9636d7f896aae91ee10cdf.png) + * Go to the **OAuth2** page. Generate the URL with suitable permissions using the **OAuth2 URL Generator** available under the OAuth2 section to add bot to your Discord server. - + the generated URL contains **YOUR\_CLIENT\_ID**, Scope and permission details. -https://discord.com/api/oauth2/authorize?client_id={YOUR_CLIENT_ID}&permissions={SET_OF_PERMISSIONS}&scope=bot + https://discord.com/api/oauth2/authorize?client_id={YOUR_CLIENT_ID}&permissions={SET_OF_PERMISSIONS}&scope=bot diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__discord__self-hosted.md b/hack/assistant-setup/content/docs.botkube.io__installation__discord__self-hosted.md index 301a6aaf..756c5007 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__discord__self-hosted.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__discord__self-hosted.md @@ -5,94 +5,94 @@ URL Source: https://docs.botkube.io/installation/discord/self-hosted Markdown Content: Version: 1.10 -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * Botkube CLI installed according to the [Getting Started guide](https://docs.botkube.io/cli/getting-started#installation) * Access to Kubernetes cluster * Discord server account -Install Botkube to the Discord Server[​](#install-botkube-to-the-discord-server"DirectlinktoInstallBotkubetotheDiscordServer") +Install Botkube to the Discord Server[​](#install-botkube-to-the-discord-server "Direct link to Install Botkube to the Discord Server") --------------------------------------------------------------------------------------------------------------------------------------- Follow the steps below to install Botkube Discord app to your Discord server. -### Create Botkube app at your Discord Server[​](#create-botkube-app-at-your-discord-server"DirectlinktoCreateBotkubeappatyourDiscordServer") +### Create Botkube app at your Discord Server[​](#create-botkube-app-at-your-discord-server "Direct link to Create Botkube app at your Discord Server") 1. Reach [https://discordapp.com/developers/applications](https://discordapp.com/developers/applications). - -![Image 1: discord_applications_portal](https://docs.botkube.io/assets/images/discord_applications_portal-a4e1b45cb3df4a271cbd599ec9f3b7ab.png) - + + ![Image 1: discord_applications_portal](https://docs.botkube.io/assets/images/discord_applications_portal-a4e1b45cb3df4a271cbd599ec9f3b7ab.png) + 2. Create a "New Application" named Botkube and add a bot named **Botkube** into the Application. - -![Image 2: discord_create_new](https://docs.botkube.io/assets/images/discord_create_new-ba9152ffe6f7be4f64af374d836c7062.png) - + + ![Image 2: discord_create_new](https://docs.botkube.io/assets/images/discord_create_new-ba9152ffe6f7be4f64af374d836c7062.png) + 3. Copy the Application **APPLICATION ID** and export it as the `DISCORD_BOT_ID` environment variable. - -export DISCORD_BOT_ID={APPLICATION_ID} - -![Image 3: discord_copy_client_id](https://docs.botkube.io/assets/images/discord_copy_application_id-bf48ff3b0d9dc613c35d92dc287bd305.png) - + + export DISCORD_BOT_ID={APPLICATION_ID} + + ![Image 3: discord_copy_client_id](https://docs.botkube.io/assets/images/discord_copy_application_id-bf48ff3b0d9dc613c35d92dc287bd305.png) + 4. Add a description - `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. - -Set the Botkube icon (Botkube icon can be downloaded from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-color-192x192.png)). - -Click on Save Changes to update the Bot. - + + Set the Botkube icon (Botkube icon can be downloaded from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-color-192x192.png)). + + Click on Save Changes to update the Bot. + 5. Now, reach the **Bot** page and Click **Add Bot** to add a Discord Bot to your application. - -![Image 4: discord_add_bot](https://docs.botkube.io/assets/images/discord_add_bot-867c43f73a079d08996072d3261d2fbc.png) - + + ![Image 4: discord_add_bot](https://docs.botkube.io/assets/images/discord_add_bot-867c43f73a079d08996072d3261d2fbc.png) + 6. After Bot creation, now you can see a bot is added to your application. Click on the **Reset Token** button. - -![Image 5: discord_bot_created](https://docs.botkube.io/assets/images/discord_bot_created-845172424d2066002bff223d9a3afd36.png) - + + ![Image 5: discord_bot_created](https://docs.botkube.io/assets/images/discord_bot_created-845172424d2066002bff223d9a3afd36.png) + 7. Copy the Token and export it as the `DISCORD_TOKEN` environment variable. - -export DISCORD_TOKEN={TOKEN} - + + export DISCORD_TOKEN={TOKEN} + 8. Go to the **OAuth2** page. Generate the URL with suitable permissions using the **OAuth2 URL Generator** available under the OAuth2 section to add bot to your Discord server. - -![Image 6: discord_bot_scope](https://docs.botkube.io/assets/images/discord_bot_scope-4024ad9c61ca1bab846e9181580bcd70.png) - -the generated URL contains **YOUR\_CLIENT\_ID**, Scope and permission details. - -https://discord.com/api/oauth2/authorize?client_id={YOUR_CLIENT_ID}&permissions={SET_OF_PERMISSIONS}&scope=bot - + + ![Image 6: discord_bot_scope](https://docs.botkube.io/assets/images/discord_bot_scope-4024ad9c61ca1bab846e9181580bcd70.png) + + the generated URL contains **YOUR\_CLIENT\_ID**, Scope and permission details. + + https://discord.com/api/oauth2/authorize?client_id={YOUR_CLIENT_ID}&permissions={SET_OF_PERMISSIONS}&scope=bot + 9. Copy and Paste the generated URL in a new tab, select the discord server to which you want to add the bot, click Continue and Authorize Bot addition. - -![Image 7: discord_bot_auth](https://docs.botkube.io/assets/images/discord_bot_auth-54b4a2d05fe3c3a6125c0f2e77f0bc78.png) - -![Image 8: discord_bot_auth_2](https://docs.botkube.io/assets/images/discord_bot_auth_2-3fd072cd239d9cf517cc7c4a6c11e313.png) - + + ![Image 7: discord_bot_auth](https://docs.botkube.io/assets/images/discord_bot_auth-54b4a2d05fe3c3a6125c0f2e77f0bc78.png) + + ![Image 8: discord_bot_auth_2](https://docs.botkube.io/assets/images/discord_bot_auth_2-3fd072cd239d9cf517cc7c4a6c11e313.png) + 10. Switch to the Discord app. Navigate to **User settings** and select **Advanced** tab. - -Enable the **Developer Mode**. - -![Image 9: discord_developer_mode](https://docs.botkube.io/assets/images/discord_developer_mode-b11b51acab3db94669c26cd97cde6c50.png) - + + Enable the **Developer Mode**. + + ![Image 9: discord_developer_mode](https://docs.botkube.io/assets/images/discord_developer_mode-b11b51acab3db94669c26cd97cde6c50.png) + 11. Create a new channel or select an existing one and copy the **CHANNEL ID**. - -To get the channel ID, right-click on a channel you want to receive notification in and click on **Copy ID**. - -![Image 10: discord_copy_channel_id.png](https://docs.botkube.io/assets/images/discord_copy_channel_id-53f4972f2c412426a9d8a27ffaa2737a.png) - -Copy the channel ID and export it as the `DISCORD_CHANNEL_ID` environment variable. - -export DISCORD_CHANNEL_ID={ID} - + + To get the channel ID, right-click on a channel you want to receive notification in and click on **Copy ID**. + + ![Image 10: discord_copy_channel_id.png](https://docs.botkube.io/assets/images/discord_copy_channel_id-53f4972f2c412426a9d8a27ffaa2737a.png) + + Copy the channel ID and export it as the `DISCORD_CHANNEL_ID` environment variable. + + export DISCORD_CHANNEL_ID={ID} + 12. Now, go ahead and install the Botkube backend on your Kubernetes cluster. - + note Follow the first 4 mins of this [Video Tutorial](https://youtu.be/8o25pRbXdFw) to understand the process visually. -### Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster"DirectlinktoInstallBotkubeinKubernetescluster") +### Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster "Direct link to Install Botkube in Kubernetes cluster") To deploy Botkube agent in your cluster, run: -export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}botkube install --version v1.10.0 \--set communications.default-group.discord.enabled=true \--set communications.default-group.discord.channels.default.id=${DISCORD_CHANNEL_ID} \--set communications.default-group.discord.botID=${DISCORD_BOT_ID} \--set communications.default-group.discord.token=${DISCORD_TOKEN} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} + export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}botkube install --version v1.10.0 \--set communications.default-group.discord.enabled=true \--set communications.default-group.discord.channels.default.id=${DISCORD_CHANNEL_ID} \--set communications.default-group.discord.botID=${DISCORD_BOT_ID} \--set communications.default-group.discord.token=${DISCORD_TOKEN} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} where: @@ -106,12 +106,12 @@ Configuration syntax is explained [here](https://docs.botkube.io/configuration). Send `@Botkube ping` in the channel to see if Botkube is running and responding. -### Remove Botkube from Discord Server[​](#remove-botkube-from-discord-server"DirectlinktoRemoveBotkubefromDiscordServer") +### Remove Botkube from Discord Server[​](#remove-botkube-from-discord-server "Direct link to Remove Botkube from Discord Server") * Go to Discord Developers Portal [Applications](https://discord.com/developers/applications) page, * Click on "Botkube" and click on "Delete App" button. -Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster "Direct link to Remove Botkube from Kubernetes cluster") ------------------------------------------------------------------------------------------------------------------------------------------ Execute the following command to completely remove Botkube and related resources from your cluster: diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__cloud.md b/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__cloud.md index 6b04b9fa..0e10416f 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__cloud.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__cloud.md @@ -3,67 +3,68 @@ Title: Elasticsearch for Botkube Cloud | Botkube URL Source: https://docs.botkube.io/installation/elasticsearch/cloud Markdown Content: -* [](https://docs.botkube.io/) * [Installation](https://docs.botkube.io/) +* [](https://docs.botkube.io/) +* [Installation](https://docs.botkube.io/) * [Elasticsearch](https://docs.botkube.io/installation/elasticsearch/) * Elasticsearch for Botkube Cloud Version: 1.10 -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * Botkube Cloud account which you can create [here](https://app.botkube.io/) for free. -Create a Botkube Cloud Instance with Elasticsearch[​](#create-a-botkube-cloud-instance-with-elasticsearch"DirectlinktoCreateaBotkubeCloudInstancewithElasticsearch") +Create a Botkube Cloud Instance with Elasticsearch[​](#create-a-botkube-cloud-instance-with-elasticsearch "Direct link to Create a Botkube Cloud Instance with Elasticsearch") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and create a new instance. - -You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) - + + You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) + 2. Fill in the `Instance Display Name` and click `Next` button. - -![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/els_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) - + + ![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/els_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) + 3. Click `Add platform` dropdown, and select `Elasticsearch` option. - -![Image 2: Select Platform](https://docs.botkube.io/assets/images/els_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) - + + ![Image 2: Select Platform](https://docs.botkube.io/assets/images/els_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) + 4. Fill in all required data in the form - -![Image 3: Form](https://docs.botkube.io/assets/images/els_form-940490b8840d8a700b57b3a803249bd9.png) - + + ![Image 3: Form](https://docs.botkube.io/assets/images/els_form-940490b8840d8a700b57b3a803249bd9.png) + 5. Add plugins you want to enable in your Botkube instance and click `Next` button. - -![Image 4: Plugins](https://docs.botkube.io/assets/images/els_add_plugins-dbf20e334cdca6198e7d9b0f8c68847f.png) - + + ![Image 4: Plugins](https://docs.botkube.io/assets/images/els_add_plugins-dbf20e334cdca6198e7d9b0f8c68847f.png) + 6. Include optional `default aliases` and `default actions` and click `Create` button to create Botkube Cloud instance. - -![Image 5: Create](https://docs.botkube.io/assets/images/els_create-4b637edb5bec18e1e53cf632d8bc6087.png) - -note - -If you don't include other platforms which use `Executor` plugins we recommend `default aliases` and `default actions` options unchecked - + + ![Image 5: Create](https://docs.botkube.io/assets/images/els_create-4b637edb5bec18e1e53cf632d8bc6087.png) + + note + + If you don't include other platforms which use `Executor` plugins we recommend `default aliases` and `default actions` options unchecked + 7. Follow the instructions in the summary page to deploy Botkube into your environment. + + ![Image 6: Summary](https://docs.botkube.io/assets/images/els_summary-bfdc3ff0af6735b41a17d7219fd6b6f0.png) + -![Image 6: Summary](https://docs.botkube.io/assets/images/els_summary-bfdc3ff0af6735b41a17d7219fd6b6f0.png) - - -Clean up[​](#clean-up"DirectlinktoCleanup") +Clean up[​](#clean-up "Direct link to Clean up") ------------------------------------------------ -### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster "Direct link to Remove Botkube from Kubernetes cluster") 1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. - + 2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. - -caution - -Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. - -![Image 7: Delete](https://docs.botkube.io/assets/images/els_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) - + + caution + + Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + + ![Image 7: Delete](https://docs.botkube.io/assets/images/els_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + [Previous Elasticsearch for self-hosted Botkube](https://docs.botkube.io/installation/elasticsearch/self-hosted)[Next Outgoing webhook](https://docs.botkube.io/installation/webhook/) diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__cloud.md b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__cloud.md index 14b69f5b..07c6bf21 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__cloud.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__cloud.md @@ -3,94 +3,95 @@ Title: Mattermost for Botkube Cloud | Botkube URL Source: https://docs.botkube.io/installation/mattermost/cloud Markdown Content: -* [](https://docs.botkube.io/) * [Installation](https://docs.botkube.io/) +* [](https://docs.botkube.io/) +* [Installation](https://docs.botkube.io/) * [Mattermost](https://docs.botkube.io/installation/mattermost/) * Mattermost for Botkube Cloud Version: 1.10 -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * Botkube Cloud account which you can create [here](https://app.botkube.io/) for free. -Create a Botkube Cloud Instance with Mattermost[​](#create-a-botkube-cloud-instance-with-mattermost"DirectlinktoCreateaBotkubeCloudInstancewithMattermost") +Create a Botkube Cloud Instance with Mattermost[​](#create-a-botkube-cloud-instance-with-mattermost "Direct link to Create a Botkube Cloud Instance with Mattermost") --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Follow the steps below to install Botkube in your Mattermost instance. 1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and create a new instance. - -You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) - + + You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) + 2. Fill in the `Instance Display Name` and click `Next` button. - -![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/mattermost_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) - + + ![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/mattermost_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) + 3. Click `Add platform` dropdown, and select `Mattermost` option. ![Image 2: Mattermost Platform Select](https://docs.botkube.io/assets/images/mm_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) - + 4. Follow the [Mattermost instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/) for creating a bot account. When creating the bot account, use the following details: - -* Username — `Botkube` - -note - -You can also use a custom username for your bot. Just remember that you'll need to provide this username during a later step of the Botkube installation. - -* Description — `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. - -* Icon — You can download the Botkube icon from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-black-192x192.png). - + + * Username — `Botkube` + + note + + You can also use a custom username for your bot. Just remember that you'll need to provide this username during a later step of the Botkube installation. + + * Description — `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. + + * Icon — You can download the Botkube icon from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-black-192x192.png). + 5. Paste the bot name in the form - -![Image 3: Bot Name in the form](https://docs.botkube.io/assets/images/mm_form_bot_name-987d8023e3f95e038072afa00b124eef.png) - + + ![Image 3: Bot Name in the form](https://docs.botkube.io/assets/images/mm_form_bot_name-987d8023e3f95e038072afa00b124eef.png) + 6. Past the token in the form - -![Image 4: Personal Token in the form](https://docs.botkube.io/assets/images/mm_personal_token_form-1629ebe4b91aef0765809c70b619cba7.png) - + + ![Image 4: Personal Token in the form](https://docs.botkube.io/assets/images/mm_personal_token_form-1629ebe4b91aef0765809c70b619cba7.png) + 7. Add Botkube to a channel - -Make sure that the newly created bot account is added to your Mattermost team by following [these instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/#bot-account-creation). - -![Image 5: Invite Bot Account](https://docs.botkube.io/assets/images/invite-93908b3daf15ba3c0b87ab8522107fe6.png) - -Add Botkube user created to the channel you want to receive notifications in. - -![Image 6: Channels in the form](https://docs.botkube.io/assets/images/mm_channels_form-2bcedf3a15e879c1c0fb01b22e95edc7.png) - + + Make sure that the newly created bot account is added to your Mattermost team by following [these instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/#bot-account-creation). + + ![Image 5: Invite Bot Account](https://docs.botkube.io/assets/images/invite-93908b3daf15ba3c0b87ab8522107fe6.png) + + Add Botkube user created to the channel you want to receive notifications in. + + ![Image 6: Channels in the form](https://docs.botkube.io/assets/images/mm_channels_form-2bcedf3a15e879c1c0fb01b22e95edc7.png) + 8. Add plugins you want to enable in your Botkube instance and click `Next` button. - -![Image 7: Plugins](https://docs.botkube.io/assets/images/mm_add_plugins-a9d627e9575fd90aa56676a8d809c700.png) - + + ![Image 7: Plugins](https://docs.botkube.io/assets/images/mm_add_plugins-a9d627e9575fd90aa56676a8d809c700.png) + 9. Include optional `default aliases` and `default actions` and click `Create` button to create Botkube Cloud instance. - -![Image 8: Create](https://docs.botkube.io/assets/images/mm_create-069ec4b9176f0f58d424e665fa4b2472.png) - + + ![Image 8: Create](https://docs.botkube.io/assets/images/mm_create-069ec4b9176f0f58d424e665fa4b2472.png) + 10. Follow the instructions in the summary page to deploy Botkube into your environment. - + ![Image 9: Summary](https://docs.botkube.io/assets/images/mm_summary-bfdc3ff0af6735b41a17d7219fd6b6f0.png) -Clean up[​](#clean-up"DirectlinktoCleanup") +Clean up[​](#clean-up "Direct link to Clean up") ------------------------------------------------ -### Remove Botkube from Mattermost Team[​](#remove-botkube-from-mattermost-team"DirectlinktoRemoveBotkubefromMattermostTeam") +### Remove Botkube from Mattermost Team[​](#remove-botkube-from-mattermost-team "Direct link to Remove Botkube from Mattermost Team") * Deactivate or remove Botkube user from Mattermost Team. Login as System Admin, in the Menu proceed to System console -> Users -> botkube -> Deactivate. * Archive Channel created for Botkube communication if required. -### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster "Direct link to Remove Botkube from Kubernetes cluster") 1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. - + 2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. - -caution - -Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. - -![Image 10: Delete](https://docs.botkube.io/assets/images/mm_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) - + + caution + + Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + + ![Image 10: Delete](https://docs.botkube.io/assets/images/mm_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + [Previous Mattermost for self-hosted Botkube](https://docs.botkube.io/installation/mattermost/self-hosted)[Next Discord](https://docs.botkube.io/installation/discord/) diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__self-hosted.md b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__self-hosted.md index 243dcf44..4a517b3f 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__self-hosted.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__self-hosted.md @@ -3,41 +3,41 @@ Title: Mattermost for self-hosted Botkube | Botkube URL Source: https://docs.botkube.io/installation/mattermost/self-hosted Markdown Content: -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * Botkube CLI installed according to the [Getting Started guide](https://docs.botkube.io/cli/getting-started#installation) * Access to Kubernetes cluster -Install Botkube to the Mattermost[​](#install-botkube-to-the-mattermost"DirectlinktoInstallBotkubetotheMattermost") +Install Botkube to the Mattermost[​](#install-botkube-to-the-mattermost "Direct link to Install Botkube to the Mattermost") --------------------------------------------------------------------------------------------------------------------------- Follow the steps below to install Botkube in your Mattermost instance. -### Create the Botkube bot account[​](#create-the-botkube-bot-account"DirectlinktoCreatetheBotkubebotaccount") +### Create the Botkube bot account[​](#create-the-botkube-bot-account "Direct link to Create the Botkube bot account") 1. Follow the [Mattermost instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/) for creating a bot account. When creating the bot account, use the following details: - -* Username — `Botkube` - -note - -You can also use a custom username for your bot. Just remember that you'll need to provide this username during a later step of the Botkube installation. - -* Description — `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. - -* Icon — You can download the Botkube icon from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-black-192x192.png). - + + * Username — `Botkube` + + note + + You can also use a custom username for your bot. Just remember that you'll need to provide this username during a later step of the Botkube installation. + + * Description — `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. + + * Icon — You can download the Botkube icon from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-black-192x192.png). + 2. Export the bot name as an environment variable: - -export MATTERMOST_BOT_NAME="{bot_name}" - + + export MATTERMOST_BOT_NAME="{bot_name}" + 3. Also, export the bot's token as an environment variable: + + export MATTERMOST_TOKEN="{token}" + -export MATTERMOST_TOKEN="{token}" - - -### Add Botkube to a channel[​](#add-botkube-to-a-channel"DirectlinktoAddBotkubetoachannel") +### Add Botkube to a channel[​](#add-botkube-to-a-channel "Direct link to Add Botkube to a channel") Make sure that the newly created bot account is added to your Mattermost team by following [these instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/#bot-account-creation). @@ -45,14 +45,14 @@ Make sure that the newly created bot account is added to your Mattermost team by Next, invite the Botkube bot into the specific channel where you want to receive notifications. Export the channel name as an environment variable: -export MATTERMOST_CHANNEL="{channel_name}" + export MATTERMOST_CHANNEL="{channel_name}" -Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster"DirectlinktoInstallBotkubeinKubernetescluster") +Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster "Direct link to Install Botkube in Kubernetes cluster") --------------------------------------------------------------------------------------------------------------------------------------- To deploy Botkube agent in your cluster, run: -export MATTERMOST_SERVER_URL={mattermost_server_url}export MATTERMOST_TEAM={mattermost_team_name}export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}botkube install --version v1.10.0 \--set communications.default-group.mattermost.enabled=true \--set communications.default-group.mattermost.url=${MATTERMOST_SERVER_URL} \--set communications.default-group.mattermost.token=${MATTERMOST_TOKEN} \--set communications.default-group.mattermost.team=${MATTERMOST_TEAM} \--set communications.default-group.mattermost.channels.default.name=${MATTERMOST_CHANNEL} \--set communications.default-group.mattermost.botName=${MATTERMOST_BOT_NAME} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} + export MATTERMOST_SERVER_URL={mattermost_server_url}export MATTERMOST_TEAM={mattermost_team_name}export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}botkube install --version v1.10.0 \--set communications.default-group.mattermost.enabled=true \--set communications.default-group.mattermost.url=${MATTERMOST_SERVER_URL} \--set communications.default-group.mattermost.token=${MATTERMOST_TOKEN} \--set communications.default-group.mattermost.team=${MATTERMOST_TEAM} \--set communications.default-group.mattermost.channels.default.name=${MATTERMOST_CHANNEL} \--set communications.default-group.mattermost.botName=${MATTERMOST_BOT_NAME} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} where: @@ -68,44 +68,44 @@ Configuration syntax is explained [here](https://docs.botkube.io/configuration). Send `@Botkube ping` in the channel to see if Botkube is running and responding. -Remove Botkube from Mattermost Team[​](#remove-botkube-from-mattermost-team"DirectlinktoRemoveBotkubefromMattermostTeam") +Remove Botkube from Mattermost Team[​](#remove-botkube-from-mattermost-team "Direct link to Remove Botkube from Mattermost Team") --------------------------------------------------------------------------------------------------------------------------------- * Deactivate or remove Botkube bot from Mattermost Team. * Archive Channel created for Botkube communication if required. -Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster "Direct link to Remove Botkube from Kubernetes cluster") ------------------------------------------------------------------------------------------------------------------------------------------ Execute the following command to completely remove Botkube and related resources from your cluster: -Troubleshooting[​](#troubleshooting"DirectlinktoTroubleshooting") +Troubleshooting[​](#troubleshooting "Direct link to Troubleshooting") --------------------------------------------------------------------- -### Botkube doesn't start[​](#botkube-doesnt-start"DirectlinktoBotkubedoesn'tstart") +### Botkube doesn't start[​](#botkube-doesnt-start "Direct link to Botkube doesn't start") **Symptoms** The Botkube Pod is restarting and the Botkube logs show the following error: -{ "level": "fatal", "msg": "while running application: while waiting for goroutines to finish gracefully: 1 error occurred:\n\t* while creating Mattermost bot: while getting team details: team \"Botkube\" not found", "time": "2023-08-25T14:52:30+02:00"} + { "level": "fatal", "msg": "while running application: while waiting for goroutines to finish gracefully: 1 error occurred:\n\t* while creating Mattermost bot: while getting team details: team \"Botkube\" not found", "time": "2023-08-25T14:52:30+02:00"} **Solution** You need to ensure that the configuration used by Botkube is valid. 1. Get and decode the communication Secret details: - -kubectl get secret botkube-communication-secret -n botkube --template='{{index .data "comm_config.yaml" | base64decode }}' - + + kubectl get secret botkube-communication-secret -n botkube --template='{{index .data "comm_config.yaml" | base64decode }}' + 2. Verify the following: - -* Ensure that the value of `communications.default-group.mattermost.team` in the configuration matches the actual team name in your Mattermost UI. - -* Confirm that the bot specified in `communications.default-group.mattermost.botName` has been invited to the relevant team and all specified channels. - -* Check the validity of the token provided in `communications.default-group.mattermost.token`. If you're unsure, navigate to the Bot Accounts section in Mattermost and generate a new one. - + + * Ensure that the value of `communications.default-group.mattermost.team` in the configuration matches the actual team name in your Mattermost UI. + + * Confirm that the bot specified in `communications.default-group.mattermost.botName` has been invited to the relevant team and all specified channels. + + * Check the validity of the token provided in `communications.default-group.mattermost.token`. If you're unsure, navigate to the Bot Accounts section in Mattermost and generate a new one. + 3. Additional Steps: - -If you continue to experience issues with Botkube restarts, you can perform further troubleshooting by following the instructions provided by Mattermost on [testing bot connections](https://developers.mattermost.com/integrate/reference/bot-accounts/#how-can-i-quickly-test-if-my-bot-account-is-working). + + If you continue to experience issues with Botkube restarts, you can perform further troubleshooting by following the instructions provided by Mattermost on [testing bot connections](https://developers.mattermost.com/integrate/reference/bot-accounts/#how-can-i-quickly-test-if-my-bot-account-is-working). diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__slack.md b/hack/assistant-setup/content/docs.botkube.io__installation__slack.md index 0bf8949e..1c97a784 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__slack.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__slack.md @@ -3,12 +3,12 @@ Title: Slack | Botkube URL Source: https://docs.botkube.io/installation/slack/ Markdown Content: -Botkube Slack App Versions[​](#botkube-slack-app-versions"DirectlinktoBotkubeSlackAppVersions") +Botkube Slack App Versions[​](#botkube-slack-app-versions "Direct link to Botkube Slack App Versions") ------------------------------------------------------------------------------------------------------ In order to connect with Slack, Botkube requires a Slack application. There are two versions of the Botkube Slack App available: -### Botkube Cloud App for Slack[​](#botkube-cloud-app-for-slack"DirectlinktoBotkubeCloudAppforSlack") +### Botkube Cloud App for Slack[​](#botkube-cloud-app-for-slack "Direct link to Botkube Cloud App for Slack") The Botkube Cloud App for Slack offers several advanced features: @@ -20,7 +20,7 @@ The Botkube Cloud App for Slack uses Botkube's cloud services to manage channels You can directly try Botkube Cloud App for Slack for free by creating an account in the [Botkube Web App](https://app.botkube.io/). Follow the [Cloud Slack app tutorial](https://docs.botkube.io/installation/slack/cloud-slack) to learn more. -### Botkube Socket Slack App[​](#botkube-socket-slack-app"DirectlinktoBotkubeSocketSlackApp") +### Botkube Socket Slack App[​](#botkube-socket-slack-app "Direct link to Botkube Socket Slack App") The Socket-mode app works with the open-source Botkube Agent. The Botkube Socket-mode Slack App has the following caveats: diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__slack__cloud-slack.md b/hack/assistant-setup/content/docs.botkube.io__installation__slack__cloud-slack.md index e7bdd317..1de0f7b1 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__slack__cloud-slack.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__slack__cloud-slack.md @@ -5,68 +5,68 @@ URL Source: https://docs.botkube.io/installation/slack/cloud-slack Markdown Content: The Botkube Cloud App for Slack uses Botkube Cloud services to manage channels and route executor commands. This allows multi-cluster support without a need to create a dedicated Slack application for each cluster. Events and alerts are sent directly from your cluster to your Slack workspace for reliable, fast notifications. -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * A Botkube Cloud account. + + You can try out the Botkube Cloud App for Slack for free by creating an account in the [Botkube Cloud app](https://app.botkube.io/). + -You can try out the Botkube Cloud App for Slack for free by creating an account in the [Botkube Cloud app](https://app.botkube.io/). - - -Create a Botkube Cloud Instance with Cloud Slack[​](#create-a-botkube-cloud-instance-with-cloud-slack"DirectlinktoCreateaBotkubeCloudInstancewithCloudSlack") +Create a Botkube Cloud Instance with Cloud Slack[​](#create-a-botkube-cloud-instance-with-cloud-slack "Direct link to Create a Botkube Cloud Instance with Cloud Slack") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and click on `New Instance` button. - -![Image 1: New Instance](https://docs.botkube.io/assets/images/cloud_slack_new_instance-65f57c9b6c2e30c7b6250b1ebebf306c.png) - + + ![Image 1: New Instance](https://docs.botkube.io/assets/images/cloud_slack_new_instance-65f57c9b6c2e30c7b6250b1ebebf306c.png) + 2. Install Botkube Agent on your Kubernetes cluster by following the instructions on the page. - -![Image 2: Install Agent](https://docs.botkube.io/assets/images/cloud_slack_install-c457bdc2758930b79f90849e72f6ebf2.png) - + + ![Image 2: Install Agent](https://docs.botkube.io/assets/images/cloud_slack_install-c457bdc2758930b79f90849e72f6ebf2.png) + 3. Click `Add platform` dropdown, and select `Slack` option. - -![Image 3: Slack Platform Select](https://docs.botkube.io/assets/images/cloud_slack_select_slack-c32779447fc66ed5091a858d0c7e2e46.png) - + + ![Image 3: Slack Platform Select](https://docs.botkube.io/assets/images/cloud_slack_select_slack-c32779447fc66ed5091a858d0c7e2e46.png) + 4. Click `Add to Slack` button to add Cloud Slack integration to your Slack workspace. - -![Image 4: Add to Slack](https://docs.botkube.io/assets/images/cloud_slack_add_to_slack-29428c5a907db8aeb0bd91a1488b35a6.png) - + + ![Image 4: Add to Slack](https://docs.botkube.io/assets/images/cloud_slack_add_to_slack-29428c5a907db8aeb0bd91a1488b35a6.png) + 5. Click `Allow` to grant permission for Botkube app to access your Slack workspace. - -![Image 5: Cloud Slack Grant](https://docs.botkube.io/assets/images/cloud_slack_grant-891b3b884c149cc8285622770dbdb140.png) - + + ![Image 5: Cloud Slack Grant](https://docs.botkube.io/assets/images/cloud_slack_grant-891b3b884c149cc8285622770dbdb140.png) + 6. Provide the Slack app details as described follows and click `Next` button. - -* **Connected Slack Workspace:** Slack workspace that you granted permission in the previous step. -* **Display Name:** Display name of the Cloud Slack configuration. -* **Channels:** Slack channes where you can execute Botkube commands and receive notification. - -![Image 6: Cloud Slack Workspace](https://docs.botkube.io/assets/images/cloud_slack_workspace_details-769c2e33f6d5b18a9c20071d671af71e.png) - + + * **Connected Slack Workspace:** Slack workspace that you granted permission in the previous step. + * **Display Name:** Display name of the Cloud Slack configuration. + * **Channels:** Slack channes where you can execute Botkube commands and receive notification. + + ![Image 6: Cloud Slack Workspace](https://docs.botkube.io/assets/images/cloud_slack_workspace_details-769c2e33f6d5b18a9c20071d671af71e.png) + 7. Add plugins you want to enable in your Botkube instance and click `Next` button. - -![Image 7: Cloud Slack Plugins](https://docs.botkube.io/assets/images/cloud_slack_add_plugins-889f253b85edf139ee9c89e70400e28a.png) - + + ![Image 7: Cloud Slack Plugins](https://docs.botkube.io/assets/images/cloud_slack_add_plugins-889f253b85edf139ee9c89e70400e28a.png) + 8. Include optional default command aliases and actions and click `Apply Changes` button to update Botkube Cloud instance. + + ![Image 8: Cloud Slack Create](https://docs.botkube.io/assets/images/cloud_slack_create-e87f2bc4d8da6a31a5c3b18c095735de.png) + -![Image 8: Cloud Slack Create](https://docs.botkube.io/assets/images/cloud_slack_create-e87f2bc4d8da6a31a5c3b18c095735de.png) - - -Using Botkube Cloud App for Slack[​](#using-botkube-cloud-app-for-slack"DirectlinktoUsingBotkubeCloudAppforSlack") +Using Botkube Cloud App for Slack[​](#using-botkube-cloud-app-for-slack "Direct link to Using Botkube Cloud App for Slack") --------------------------------------------------------------------------------------------------------------------------- You can start using Botkube Cloud App for Slack by typing `@Botkube cloud help` in the Slack channel you configured in one of the previous steps. ![Image 9: Cloud Slack Command Help](https://docs.botkube.io/assets/images/cloud_slack_command_help-806b8a1c8238a93638259241e41741e3.png) -### Listing Cloud Instances[​](#listing-cloud-instances"DirectlinktoListingCloudInstances") +### Listing Cloud Instances[​](#listing-cloud-instances "Direct link to Listing Cloud Instances") You can list all the Botkube Cloud instances by typing `@Botkube cloud list instances` in the Slack channel, or click the button `List connected instances` in the help command response. Besides the instance `name`, `ID`, and `status` in the list response, you can also click the `Get details` button to go to instance details on Botkube Cloud Dashboard. ![Image 10: Cloud Slack List Instances](https://docs.botkube.io/assets/images/cloud_slack_command_list_instances-b9d9661ea10f591eb72f92a79430d9cf.png) -### Setting Default Instances[​](#setting-default-instances"DirectlinktoSettingDefaultInstances") +### Setting Default Instances[​](#setting-default-instances "Direct link to Setting Default Instances") Once a Botkube command is executed, it will be handled on target Kubernetes cluster specified with `--cluster-name` flag. This is an optional flag, where if you have not specified it, Botkube Cloud will select the first instance. However, you can also achieve setting default instance with command `@Botkube cloud set default-instance {instance-id}`. @@ -76,31 +76,31 @@ After this point, all of your commands will be executed on the default instance. ![Image 12: Cloud Slack All Clusters](https://docs.botkube.io/assets/images/cloud_slack_command_all_clusters-ff8c8984bb8097d34b419a6cfddb7cd0.png) -### Setting Public Alias for Private Channels[​](#setting-public-alias-for-private-channels"DirectlinktoSettingPublicAliasforPrivateChannels") +### Setting Public Alias for Private Channels[​](#setting-public-alias-for-private-channels "Direct link to Setting Public Alias for Private Channels") In order to maintain your confidentiality while using Botkube's plugins, you need to create a public alias for your private Slack channels. This alias will only be visible to Botkube Cloud administrators. -#### During the Botkube Invitation to Private Channels[​](#during-the-botkube-invitation-to-private-channels"DirectlinktoDuringtheBotkubeInvitationtoPrivateChannels") +#### During the Botkube Invitation to Private Channels[​](#during-the-botkube-invitation-to-private-channels "Direct link to During the Botkube Invitation to Private Channels") When you invite Botkube to a private channel, a prompt will appear to guide you through the process of creating a public alias. -#### For Existing Private Channels[​](#for-existing-private-channels"DirectlinktoForExistingPrivateChannels") +#### For Existing Private Channels[​](#for-existing-private-channels "Direct link to For Existing Private Channels") To update an existing alias for a private channel, or if Botkube is already integrated, simply use this command: -@Botkube cloud set channel-alias + @Botkube cloud set channel-alias -Cleanup[​](#cleanup"DirectlinktoCleanup") +Cleanup[​](#cleanup "Direct link to Cleanup") --------------------------------------------- 1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. - -![Image 13: Cloud Slack Instance Manage](https://docs.botkube.io/assets/images/cloud_slack_instance_list_manage-49d417014a51479f9513b83a7ca2c9a2.png) - + + ![Image 13: Cloud Slack Instance Manage](https://docs.botkube.io/assets/images/cloud_slack_instance_list_manage-49d417014a51479f9513b83a7ca2c9a2.png) + 2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. - -caution - -Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. - -![Image 14: Cloud Slack Instance Delete](https://docs.botkube.io/assets/images/cloud_slack_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + + caution + + Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + + ![Image 14: Cloud Slack Instance Delete](https://docs.botkube.io/assets/images/cloud_slack_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__slack__socket-slack.md b/hack/assistant-setup/content/docs.botkube.io__installation__slack__socket-slack.md index d8ebc2a6..575b371d 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__slack__socket-slack.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__slack__socket-slack.md @@ -5,14 +5,14 @@ URL Source: https://docs.botkube.io/installation/slack/socket-slack Markdown Content: The Socket-mode app works with the open-source Botkube Agent and does not require an account or subscription. -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * Botkube CLI installed according to the [Getting Started guide](https://docs.botkube.io/cli/getting-started#installation) * Access to Kubernetes cluster * Slack Workspace admin access -Install Socket Slack App in Your Slack workspace[​](#install-socket-slack-app-in-your-slack-workspace"DirectlinktoInstallSocketSlackAppinYourSlackworkspace") +Install Socket Slack App in Your Slack workspace[​](#install-socket-slack-app-in-your-slack-workspace "Direct link to Install Socket Slack App in Your Slack workspace") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Botkube uses interactive messaging to provide better experience. Interactive messaging needs a Slack App with Socket Mode enabled and currently this is not suitable for Slack App Directory listing. For this reason, you need to create a Slack App in your own Slack workspace and use it for Botkube deployment. @@ -27,75 +27,75 @@ The [Botkube Cloud App for Slack](#botkube-cloud-slack-app) does not have this l Follow the steps below to create and install Botkube Slack app to your Slack workspace. -### Create Slack app[​](#create-slack-app"DirectlinktoCreateSlackapp") +### Create Slack app[​](#create-slack-app "Direct link to Create Slack app") 1. Go to [Slack App console](https://api.slack.com/apps) to create an application. - + 2. Click **Create New App** and select **From an app manifest** in the popup to create application from manifest. - -![Image 1: Create App from Manifest](https://docs.botkube.io/assets/images/slack_add_app-716017a6575f393b49e2cd157c67fe48.png) - + + ![Image 1: Create App from Manifest](https://docs.botkube.io/assets/images/slack_add_app-716017a6575f393b49e2cd157c67fe48.png) + 3. Select a workspace where you want to create application and click **Next**. - -![Image 2: Select Workspace](https://docs.botkube.io/assets/images/slack_select_workspace-082c3680c0653a819d556756493134d8.png) - + + ![Image 2: Select Workspace](https://docs.botkube.io/assets/images/slack_select_workspace-082c3680c0653a819d556756493134d8.png) + 4. Select **YAML** tab, copy & paste one of the following manifests, and click **Next**, and then **Create**. - + * Public channels only * Private channels only * Public and private channels -display_information: name: Botkube description: Botkube background_color: "#a653a6"features: bot_user: display_name: Botkube always_online: falseoauth_config: scopes: bot: - channels:read - app_mentions:read - reactions:write - chat:write - files:write - users:read # Remote configuration only: Used to get Real Name for audit reportingsettings: event_subscriptions: bot_events: - app_mention interactivity: is_enabled: true org_deploy_enabled: false socket_mode_enabled: true token_rotation_enabled: false + display_information: name: Botkube description: Botkube background_color: "#a653a6"features: bot_user: display_name: Botkube always_online: falseoauth_config: scopes: bot: - channels:read - app_mentions:read - reactions:write - chat:write - files:write - users:read # Remote configuration only: Used to get Real Name for audit reportingsettings: event_subscriptions: bot_events: - app_mention interactivity: is_enabled: true org_deploy_enabled: false socket_mode_enabled: true token_rotation_enabled: false -### Install Botkube to the Slack workspace[​](#install-botkube-to-the-slack-workspace"DirectlinktoInstallBotkubetotheSlackworkspace") +### Install Botkube to the Slack workspace[​](#install-botkube-to-the-slack-workspace "Direct link to Install Botkube to the Slack workspace") Once the application is created, you will be redirected to application details page. Press the **Install your app** button, select the workspace and click **Allow to finish installation**. ![Image 3: Install Slack App](https://docs.botkube.io/assets/images/slack_install_app-0c2fea83804d9a29ffe593d491d699c5.png) -### Obtain Bot Token[​](#obtain-bot-token"DirectlinktoObtainBotToken") +### Obtain Bot Token[​](#obtain-bot-token "Direct link to Obtain Bot Token") Follow the steps to obtain the Bot Token: 1. Select **OAuth & Permissions** section on the left sidebar. On this page you can copy the bot token which starts with `xoxb...`. - -![Image 4: Retrieve Slack Bot Token](https://docs.botkube.io/assets/images/slack_retrieve_bot_token-98639453c7d18970dca8a4727a1c149e.png) - + + ![Image 4: Retrieve Slack Bot Token](https://docs.botkube.io/assets/images/slack_retrieve_bot_token-98639453c7d18970dca8a4727a1c149e.png) + 2. Export Slack Bot Token as follows: + + export SLACK_API_BOT_TOKEN="{botToken}" + -export SLACK_API_BOT_TOKEN="{botToken}" - - -### Generate and obtain App-Level Token[​](#generate-and-obtain-app-level-token"DirectlinktoGenerateandobtainApp-LevelToken") +### Generate and obtain App-Level Token[​](#generate-and-obtain-app-level-token "Direct link to Generate and obtain App-Level Token") Slack App with Socket Mode requires an App-Level Token for the websocket connection. Follow the steps to generate an App-Level Token: 1. Select **Basic Information** link from the left sidebar and scroll down to section **App-Level Token**. Click on the **Generate Token and Scopes** button. - + 2. Enter a **Name**, select `connections:write` scope, and click **Generate**. - -![Image 5: Generate App-Level Token](https://docs.botkube.io/assets/images/slack_generate_app_token-685ab59995edd5495a5f5cca626ae895.png) - -![Image 6: Retrieve App-Level Token](https://docs.botkube.io/assets/images/slack_retrieve_app_token-512945b00d08d0fdcb7a25a09ec5a950.png) - + + ![Image 5: Generate App-Level Token](https://docs.botkube.io/assets/images/slack_generate_app_token-685ab59995edd5495a5f5cca626ae895.png) + + ![Image 6: Retrieve App-Level Token](https://docs.botkube.io/assets/images/slack_retrieve_app_token-512945b00d08d0fdcb7a25a09ec5a950.png) + 3. Copy **App-Level Token** and export it as follows: + + export SLACK_API_APP_TOKEN="${appToken}" + -export SLACK_API_APP_TOKEN="${appToken}" - - -### Add Botkube user to a Slack channel[​](#add-botkube-user-to-a-slack-channel"DirectlinktoAddBotkubeusertoaSlackchannel") +### Add Botkube user to a Slack channel[​](#add-botkube-user-to-a-slack-channel "Direct link to Add Botkube user to a Slack channel") After installing Botkube app to your Slack workspace, you could see a new bot user with the name "Botkube" added in your workspace. Add that bot to a Slack channel you want to receive notification in. You can add it by inviting `@Botkube` in a channel. -Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster"DirectlinktoInstallBotkubeinKubernetescluster") +Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster "Direct link to Install Botkube in Kubernetes cluster") --------------------------------------------------------------------------------------------------------------------------------------- To deploy Botkube agent in your cluster, run: -export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}export SLACK_CHANNEL_NAME={channel_name}botkube install --version v1.10.0 \--set communications.default-group.socketSlack.enabled=true \--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \--set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \--set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} + export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}export SLACK_CHANNEL_NAME={channel_name}botkube install --version v1.10.0 \--set communications.default-group.socketSlack.enabled=true \--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \--set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \--set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} where: @@ -109,12 +109,12 @@ Configuration syntax is explained [here](https://docs.botkube.io/configuration). Send `@Botkube ping` in the channel to see if Botkube is running and responding. -### Delete Botkube from Slack workspace[​](#delete-botkube-from-slack-workspace"DirectlinktoDeleteBotkubefromSlackworkspace") +### Delete Botkube from Slack workspace[​](#delete-botkube-from-slack-workspace "Direct link to Delete Botkube from Slack workspace") * Go to the [Slack apps](https://api.slack.com/apps) page, * Click on "Botkube", scroll to bottom, and click on "Delete App" button. -Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster "Direct link to Remove Botkube from Kubernetes cluster") ------------------------------------------------------------------------------------------------------------------------------------------ Execute the following command to completely remove Botkube and related resources from your cluster: diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__socketslack.md b/hack/assistant-setup/content/docs.botkube.io__installation__socketslack.md index e38ff3bb..6b474c95 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__socketslack.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__socketslack.md @@ -3,12 +3,12 @@ Title: Slack | Botkube URL Source: https://docs.botkube.io/installation/socketslack Markdown Content: -Botkube Slack App Versions[​](#botkube-slack-app-versions"DirectlinktoBotkubeSlackAppVersions") +Botkube Slack App Versions[​](#botkube-slack-app-versions "Direct link to Botkube Slack App Versions") ------------------------------------------------------------------------------------------------------ In order to connect with Slack, Botkube requires a Slack application. There are two versions of the Botkube Slack App available: -### Botkube Cloud App for Slack[​](#botkube-cloud-app-for-slack"DirectlinktoBotkubeCloudAppforSlack") +### Botkube Cloud App for Slack[​](#botkube-cloud-app-for-slack "Direct link to Botkube Cloud App for Slack") The Botkube Cloud App for Slack offers several advanced features: @@ -20,7 +20,7 @@ The Botkube Cloud App for Slack uses Botkube's cloud services to manage channels You can directly try Botkube Cloud App for Slack for free by creating an account in the [Botkube Web App](https://app.botkube.io/). Follow the [Cloud Slack app tutorial](https://docs.botkube.io/installation/slack/cloud-slack) to learn more. -### Botkube Socket Slack App[​](#botkube-socket-slack-app"DirectlinktoBotkubeSocketSlackApp") +### Botkube Socket Slack App[​](#botkube-socket-slack-app "Direct link to Botkube Socket Slack App") The Socket-mode app works with the open-source Botkube Agent. The Botkube Socket-mode Slack App has the following caveats: diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__teams.md b/hack/assistant-setup/content/docs.botkube.io__installation__teams.md index 30e394af..ca61dc9c 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__teams.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__teams.md @@ -7,7 +7,7 @@ info The previous Microsoft Teams integration has been deprecated. If you need to use the legacy Microsoft Teams integration, see the [Botkube 1.5 Documentation](https://docs.botkube.io/1.5/installation/teams/). It is recommended to migrate to the new Microsoft Teams app per the below instructions. -Botkube Cloud Microsoft Teams App[​](#botkube-cloud-microsoft-teams-app"DirectlinktoBotkubeCloudMicrosoftTeamsApp") +Botkube Cloud Microsoft Teams App[​](#botkube-cloud-microsoft-teams-app "Direct link to Botkube Cloud Microsoft Teams App") --------------------------------------------------------------------------------------------------------------------------- The Botkube Cloud Microsoft Teams app offers several advanced features: @@ -20,70 +20,70 @@ The Botkube Cloud Microsoft Teams app uses Botkube's cloud services to manage ch You can directly try Botkube Cloud Microsoft Teams app for free by creating an account in the [Botkube Web App](https://app.botkube.io/). Follow the steps below to install the app. -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * A Botkube Cloud account. + + You can try out the Botkube Cloud Microsoft Teams app for free by creating an account in the [Botkube Cloud app](https://app.botkube.io/). + -You can try out the Botkube Cloud Microsoft Teams app for free by creating an account in the [Botkube Cloud app](https://app.botkube.io/). - - -Create a Botkube Cloud Instance with Microsoft Teams[​](#create-a-botkube-cloud-instance-with-microsoft-teams"DirectlinktoCreateaBotkubeCloudInstancewithMicrosoftTeams") +Create a Botkube Cloud Instance with Microsoft Teams[​](#create-a-botkube-cloud-instance-with-microsoft-teams "Direct link to Create a Botkube Cloud Instance with Microsoft Teams") ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -### Connect Botkube Cloud to your Kubernetes cluster[​](#connect-botkube-cloud-to-your-kubernetes-cluster"DirectlinktoConnectBotkubeCloudtoyourKubernetescluster") +### Connect Botkube Cloud to your Kubernetes cluster[​](#connect-botkube-cloud-to-your-kubernetes-cluster "Direct link to Connect Botkube Cloud to your Kubernetes cluster") 1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and click on `New Instance` button. - -![Image 1: New Instance](https://docs.botkube.io/assets/images/cloud_teams_new_instance-65f57c9b6c2e30c7b6250b1ebebf306c.png) - + + ![Image 1: New Instance](https://docs.botkube.io/assets/images/cloud_teams_new_instance-65f57c9b6c2e30c7b6250b1ebebf306c.png) + 2. Install Botkube Agent on your Kubernetes cluster by following the instructions on the page. - -![Image 2: Install Agent](https://docs.botkube.io/assets/images/cloud_teams_install-c457bdc2758930b79f90849e72f6ebf2.png) - + + ![Image 2: Install Agent](https://docs.botkube.io/assets/images/cloud_teams_install-c457bdc2758930b79f90849e72f6ebf2.png) + 3. Click `Add platform` dropdown, and select `Teams` option. - -![Image 3: Teams Platform Select](https://docs.botkube.io/assets/images/cloud_teams_select_platform-682cdcc197682e6bdb909bdf4e6a5f80.png) - + + ![Image 3: Teams Platform Select](https://docs.botkube.io/assets/images/cloud_teams_select_platform-682cdcc197682e6bdb909bdf4e6a5f80.png) + Proceed with the next section. -### Install Botkube app to your Microsoft Teams organization and add it to your team[​](#install-botkube-app-to-your-microsoft-teams-organization-and-add-it-to-your-team"DirectlinktoInstallBotkubeapptoyourMicrosoftTeamsorganizationandaddittoyourteam") +### Install Botkube app to your Microsoft Teams organization and add it to your team[​](#install-botkube-app-to-your-microsoft-teams-organization-and-add-it-to-your-team "Direct link to Install Botkube app to your Microsoft Teams organization and add it to your team") 1. Download the Botkube Cloud Microsoft Teams app by clicking the `Download Botkube App for Teams` button. - -![Image 4: Download Teams App](https://docs.botkube.io/assets/images/cloud_teams_download_app-d7196c1a1d06c798599e6d798558823b.png) - + + ![Image 4: Download Teams App](https://docs.botkube.io/assets/images/cloud_teams_download_app-d7196c1a1d06c798599e6d798558823b.png) + 2. Sideload the Botkube app to your Microsoft Teams organization via Teams Admin Center, following the [official documentation](https://learn.microsoft.com/en-us/microsoftteams/teams-custom-app-policies-and-settings#upload-a-custom-app-using-teams-admin-center). - -info - -This step requires administrator permissions on your Microsoft Teams organization. Sideloading app is needed only once for the whole organization. - -* Ensure the Botkube app is allowed for the organization in the [Teams Admin Center](https://admin.teams.microsoft.com/policies/manage-apps) - -![Image 5: Teams Admin Center](https://docs.botkube.io/assets/images/cloud_teams_admin_center-8b857abd2f5aef5416b820878bbaa2a7.png) - + + info + + This step requires administrator permissions on your Microsoft Teams organization. Sideloading app is needed only once for the whole organization. + + * Ensure the Botkube app is allowed for the organization in the [Teams Admin Center](https://admin.teams.microsoft.com/policies/manage-apps) + + ![Image 5: Teams Admin Center](https://docs.botkube.io/assets/images/cloud_teams_admin_center-8b857abd2f5aef5416b820878bbaa2a7.png) + 3. Add the Botkube app to your team. - -1. In your Microsoft Teams application, navigate to the **Apps** tab. - -2. Select the **Built for your organization** tab. - -3. On the Botkube app card, click on the **Add** button. - -![Image 6: Add Botkube App](https://docs.botkube.io/assets/images/cloud_teams_add_app-559531c09a0c06d3c0af4f70dc6f741b.png) - -4. Click the **Add to a team** button. - -![Image 7: Add app to team](https://docs.botkube.io/assets/images/cloud_teams_botkube_app_add-472d56ad47f55d7f7782a09eeacf2552.png) - -5. Select the team and default channel, where you'll get the welcome message. - -![Image 8: Select a team](https://docs.botkube.io/assets/images/cloud_teams_select_team-3df2e3153f0d02101671bf04dc1376b2.png) - -6. Click the **Set up a bot** button. - + + 1. In your Microsoft Teams application, navigate to the **Apps** tab. + + 2. Select the **Built for your organization** tab. + + 3. On the Botkube app card, click on the **Add** button. + + ![Image 6: Add Botkube App](https://docs.botkube.io/assets/images/cloud_teams_add_app-559531c09a0c06d3c0af4f70dc6f741b.png) + + 4. Click the **Add to a team** button. + + ![Image 7: Add app to team](https://docs.botkube.io/assets/images/cloud_teams_botkube_app_add-472d56ad47f55d7f7782a09eeacf2552.png) + + 5. Select the team and default channel, where you'll get the welcome message. + + ![Image 8: Select a team](https://docs.botkube.io/assets/images/cloud_teams_select_team-3df2e3153f0d02101671bf04dc1376b2.png) + + 6. Click the **Set up a bot** button. + Once the Botkube app is added to your team, you'll receive a welcome message. @@ -91,83 +91,83 @@ Once the Botkube app is added to your team, you'll receive a welcome message. Proceed with the next section. -### Grant permissions for Botkube app[​](#grant-permissions-for-botkube-app"DirectlinktoGrantpermissionsforBotkubeapp") +### Grant permissions for Botkube app[​](#grant-permissions-for-botkube-app "Direct link to Grant permissions for Botkube app") info This step requires administrator permissions on your Microsoft Teams organization. Granting permissions is needed only once for the whole organization. 1. Click on the **Grant access** button. - + 2. Select your Microsoft account. - -![Image 10: Select account](https://docs.botkube.io/assets/images/cloud_teams_permissions_select_account-9d17c4cfaa2eb163cd114030675293c5.png) - + + ![Image 10: Select account](https://docs.botkube.io/assets/images/cloud_teams_permissions_select_account-9d17c4cfaa2eb163cd114030675293c5.png) + 3. Click the **Accept** button. - -![Image 11: Grant access](https://docs.botkube.io/assets/images/cloud_teams_permissions_accept-9579403a6317274d931ab5fb5b37e8a0.png) - + + ![Image 11: Grant access](https://docs.botkube.io/assets/images/cloud_teams_permissions_accept-9579403a6317274d931ab5fb5b37e8a0.png) + 4. You will be redirected to the confirmation page. - -![Image 12: Confirmation page](https://docs.botkube.io/assets/images/cloud_teams_permissions_success-05aa285e1c8e448c475932925a9ffb02.png) - + + ![Image 12: Confirmation page](https://docs.botkube.io/assets/images/cloud_teams_permissions_success-05aa285e1c8e448c475932925a9ffb02.png) + Close the page and proceed with the next section. -### Connect your team to Botkube Cloud[​](#connect-your-team-to-botkube-cloud"DirectlinktoConnectyourteamtoBotkubeCloud") +### Connect your team to Botkube Cloud[​](#connect-your-team-to-botkube-cloud "Direct link to Connect your team to Botkube Cloud") Go back to the Microsoft Teams app channel, where you received the welcome message. 1. Click the **Connect to Botkube Cloud** button in the welcome message. - + 2. Log in to Botkube Cloud, if you haven't already. Ensure that you selected the correct organization, where you want to connect your team. - + 3. Click the **Connect** button. - -![Image 13: Connect to Botkube Cloud](https://docs.botkube.io/assets/images/cloud_teams_team_connect-46d7192e61f8dcd220f7dd333e8cbaa3.png) - + + ![Image 13: Connect to Botkube Cloud](https://docs.botkube.io/assets/images/cloud_teams_team_connect-46d7192e61f8dcd220f7dd333e8cbaa3.png) + 4. You will see a confirmation page. - -![Image 14: Confirmation page](https://docs.botkube.io/assets/images/cloud_teams_team_connect_success-2121d79ce97a8f66bd660bf852a32cff.png) - + + ![Image 14: Confirmation page](https://docs.botkube.io/assets/images/cloud_teams_team_connect_success-2121d79ce97a8f66bd660bf852a32cff.png) + Close the page and proceed with the next section. -### Finalize Botkube Cloud instance configuration[​](#finalize-botkube-cloud-instance-configuration"DirectlinktoFinalizeBotkubeCloudinstanceconfiguration") +### Finalize Botkube Cloud instance configuration[​](#finalize-botkube-cloud-instance-configuration "Direct link to Finalize Botkube Cloud instance configuration") Go back to the Botkube Cloud instance creation. 1. In step 2, select your connected team and provide other details. - -* **Connected Microsoft Teams team:** Teams team that you connected in the previous section. -* **Display Name:** Display name of the Microsoft Teams team configuration. -* **Channels:** Teams channels where you can execute Botkube commands and receive notification. - -![Image 15: Botkube Cloud Instance Configuration](https://docs.botkube.io/assets/images/cloud_teams_config-c996765f7ed399d6ddd263bfd463a140.png) - + + * **Connected Microsoft Teams team:** Teams team that you connected in the previous section. + * **Display Name:** Display name of the Microsoft Teams team configuration. + * **Channels:** Teams channels where you can execute Botkube commands and receive notification. + + ![Image 15: Botkube Cloud Instance Configuration](https://docs.botkube.io/assets/images/cloud_teams_config-c996765f7ed399d6ddd263bfd463a140.png) + 2. Add plugins you want to enable in your Botkube instance and click `Next` button. - -![Image 16: Microsoft Teams Plugins](https://docs.botkube.io/assets/images/cloud_teams_add_plugins-0236355cf8424353758934a96ca81112.png) - + + ![Image 16: Microsoft Teams Plugins](https://docs.botkube.io/assets/images/cloud_teams_add_plugins-0236355cf8424353758934a96ca81112.png) + 3. Include optional default command aliases and actions and click `Apply Changes` button to update Botkube Cloud instance. + + ![Image 17: Microsoft Teams Create](https://docs.botkube.io/assets/images/cloud_teams_create-c3ff681023bb64d1c92ecf2c85f112a3.png) + -![Image 17: Microsoft Teams Create](https://docs.botkube.io/assets/images/cloud_teams_create-c3ff681023bb64d1c92ecf2c85f112a3.png) - - -Using Botkube Cloud Microsoft Teams App[​](#using-botkube-cloud-microsoft-teams-app"DirectlinktoUsingBotkubeCloudMicrosoftTeamsApp") +Using Botkube Cloud Microsoft Teams App[​](#using-botkube-cloud-microsoft-teams-app "Direct link to Using Botkube Cloud Microsoft Teams App") --------------------------------------------------------------------------------------------------------------------------------------------- You can start using Botkube Cloud Microsoft Teams by typing `@Botkube cloud help` in one of the channels in the team you configured in one of the previous steps. ![Image 18: Botkube Cloud Microsoft Teams Command Help](https://docs.botkube.io/assets/images/cloud_teams_command_help-7b1a978b74f7bb08c7062b6a80bbea07.png) -### Listing Cloud Instances[​](#listing-cloud-instances"DirectlinktoListingCloudInstances") +### Listing Cloud Instances[​](#listing-cloud-instances "Direct link to Listing Cloud Instances") You can list all your Botkube Cloud instances by typing `@Botkube cloud list` in the Microsoft Teams channel, or click the button `List connected instances` in the help command response. Besides the instance `name`, `ID`, and `status` in the list response, you can also click the `Get details` button to go to instance details on Botkube Cloud Dashboard. ![Image 19: Botkube Cloud Microsoft Teams List Instances](https://docs.botkube.io/assets/images/cloud_teams_list_instances-0079ca8c5f306a230342b447ef8f31cb.png) -### Setting Default Instance[​](#setting-default-instance"DirectlinktoSettingDefaultInstance") +### Setting Default Instance[​](#setting-default-instance "Direct link to Setting Default Instance") Once a Botkube command is executed, it will be handled on target Kubernetes cluster specified with `--cluster-name` flag. This is an optional flag, where if you have not specified it, Botkube Cloud will select the first instance. However, you can also achieve setting default instance with command `@Botkube cloud set default-instance`. @@ -177,42 +177,42 @@ After this point, all of your commands will be executed on the default instance. ![Image 21: Cloud Microsoft Teams All Clusters](https://docs.botkube.io/assets/images/cloud_teams_command_all_clusters-a5c8c474816eb96d277a3dec873d8351.png) -Cleanup[​](#cleanup"DirectlinktoCleanup") +Cleanup[​](#cleanup "Direct link to Cleanup") --------------------------------------------- 1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. - -![Image 22: Cloud Teams Instance Manage](https://docs.botkube.io/assets/images/cloud_teams_instance_list_manage-e7ccd6d8aaabb01576a4ba21cd2f722d.png) - + + ![Image 22: Cloud Teams Instance Manage](https://docs.botkube.io/assets/images/cloud_teams_instance_list_manage-e7ccd6d8aaabb01576a4ba21cd2f722d.png) + 2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. - -caution - -Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. - -![Image 23: Cloud Teams Instance Delete](https://docs.botkube.io/assets/images/cloud_teams_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) - - -Caveats[​](#caveats"DirectlinktoCaveats") + + caution + + Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + + ![Image 23: Cloud Teams Instance Delete](https://docs.botkube.io/assets/images/cloud_teams_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + + +Caveats[​](#caveats "Direct link to Caveats") --------------------------------------------- -### RBAC `ChannelName` mapping[​](#rbac-channelname-mapping"Directlinktorbac-channelname-mapping") +### RBAC `ChannelName` mapping[​](#rbac-channelname-mapping "Direct link to rbac-channelname-mapping") Same as other communication platforms, Botkube Cloud Microsoft Teams app supports RBAC along with [all mappings](https://docs.botkube.io/configuration/rbac#mapping-types). However, because of the Microsoft Teams API limitation, for the default team channel the `ChannelName` is always `General`, regardless of the actual localized channel name. -Limitations[​](#limitations"DirectlinktoLimitations") +Limitations[​](#limitations "Direct link to Limitations") --------------------------------------------------------- Botkube Cloud Microsoft Teams App currently doesn't support the following features yet: * Processing states from selected dropdowns, e.g., used for the `kubectl` command builder. In a result, the command builder is not available. - + * Adding 👀 and ✅ reactions to messages indicating process status. - -This seems to be a limitation of the Microsoft Teams platform, however we'll investigate if there is a workaround. - + + This seems to be a limitation of the Microsoft Teams platform, however we'll investigate if there is a workaround. + * Sending messages visible only to specific users. - + * Replacing messages with new content, e.g., used for pagination. Currently, a new card is sent as a new message. - + * User mentions in messages. Instead, Botkube app uses plaintext mentions with first and last name. diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__webhook__cloud.md b/hack/assistant-setup/content/docs.botkube.io__installation__webhook__cloud.md index 1020fb34..899495ce 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__webhook__cloud.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__webhook__cloud.md @@ -3,67 +3,68 @@ Title: Outgoing webhook for Botkube Cloud | Botkube URL Source: https://docs.botkube.io/installation/webhook/cloud Markdown Content: -* [](https://docs.botkube.io/) * [Installation](https://docs.botkube.io/) +* [](https://docs.botkube.io/) +* [Installation](https://docs.botkube.io/) * [Outgoing webhook](https://docs.botkube.io/installation/webhook/) * Outgoing webhook for Botkube Cloud Version: 1.10 -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * Botkube Cloud account which you can create [here](https://app.botkube.io/) for free. -Create a Botkube Cloud Instance with Webhook[​](#create-a-botkube-cloud-instance-with-webhook"DirectlinktoCreateaBotkubeCloudInstancewithWebhook") +Create a Botkube Cloud Instance with Webhook[​](#create-a-botkube-cloud-instance-with-webhook "Direct link to Create a Botkube Cloud Instance with Webhook") ------------------------------------------------------------------------------------------------------------------------------------------------------------ 1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and create a new instance. - -You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) - + + You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) + 2. Fill in the `Instance Display Name` and click `Next` button. - -![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/webhook_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) - + + ![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/webhook_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) + 3. Click `Add platform` dropdown, and select `Webhook` option. - -![Image 2: Select Platform](https://docs.botkube.io/assets/images/webhook_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) - + + ![Image 2: Select Platform](https://docs.botkube.io/assets/images/webhook_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) + 4. Fill in all required data in the form - -![Image 3: Form](https://docs.botkube.io/assets/images/webhook_form-ccd69a8ec75ac03c98154db9bcf32b13.png) - + + ![Image 3: Form](https://docs.botkube.io/assets/images/webhook_form-ccd69a8ec75ac03c98154db9bcf32b13.png) + 5. Add plugins you want to enable in your Botkube instance and click `Next` button. - -![Image 4: Plugins](https://docs.botkube.io/assets/images/webhook_add_plugins-0bafa9371a2d3bccfc36c138bd442456.png) - + + ![Image 4: Plugins](https://docs.botkube.io/assets/images/webhook_add_plugins-0bafa9371a2d3bccfc36c138bd442456.png) + 6. Include optional `default aliases` and `default actions` and click `Create` button to create Botkube Cloud instance. - -![Image 5: Create](https://docs.botkube.io/assets/images/webhook_create-27a060686f00b0fb21f01839fd959e04.png) - -note - -If you don't include other platforms which use `Executor` plugins we recommend `default aliases` and `default actions` options unchecked - + + ![Image 5: Create](https://docs.botkube.io/assets/images/webhook_create-27a060686f00b0fb21f01839fd959e04.png) + + note + + If you don't include other platforms which use `Executor` plugins we recommend `default aliases` and `default actions` options unchecked + 7. Follow the instructions in the summary page to deploy Botkube into your environment. + + ![Image 6: Summary](https://docs.botkube.io/assets/images/webhook_summary-bfdc3ff0af6735b41a17d7219fd6b6f0.png) + -![Image 6: Summary](https://docs.botkube.io/assets/images/webhook_summary-bfdc3ff0af6735b41a17d7219fd6b6f0.png) - - -Clean up[​](#clean-up"DirectlinktoCleanup") +Clean up[​](#clean-up "Direct link to Clean up") ------------------------------------------------ -### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster "Direct link to Remove Botkube from Kubernetes cluster") 1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. - + 2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. - -caution - -Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. - -![Image 7: Delete](https://docs.botkube.io/assets/images/webhook_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) - + + caution + + Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + + ![Image 7: Delete](https://docs.botkube.io/assets/images/webhook_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + [Previous Outgoing webhook for self-hosted Botkube](https://docs.botkube.io/installation/webhook/self-hosted)[Next Overview](https://docs.botkube.io/examples-and-tutorials/) diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__webhook__self-hosted.md b/hack/assistant-setup/content/docs.botkube.io__installation__webhook__self-hosted.md index 7458da71..011ea1a0 100644 --- a/hack/assistant-setup/content/docs.botkube.io__installation__webhook__self-hosted.md +++ b/hack/assistant-setup/content/docs.botkube.io__installation__webhook__self-hosted.md @@ -5,7 +5,7 @@ URL Source: https://docs.botkube.io/installation/webhook/self-hosted Markdown Content: Botkube can be integrated with external apps via Webhooks. A webhook is essentially a POST request sent to a callback URL. So you can configure Botkube to send events on specified URL. -export CLUSTER_NAME={cluster_name}export WEBHOOK_URL={url}botkube install --version v1.10.0 \--set communications.default-group.webhook.enabled=true \--set communications.default-group.webhook.url=${WEBHOOK_URL} \--set settings.clusterName=${CLUSTER_NAME} + export CLUSTER_NAME={cluster_name}export WEBHOOK_URL={url}botkube install --version v1.10.0 \--set communications.default-group.webhook.enabled=true \--set communications.default-group.webhook.url=${WEBHOOK_URL} \--set settings.clusterName=${CLUSTER_NAME} Configuration syntax is explained [here](https://docs.botkube.io/configuration). All possible installation parameters are documented [here](https://docs.botkube.io/configuration/helm-chart-parameters). diff --git a/hack/assistant-setup/content/docs.botkube.io__license.md b/hack/assistant-setup/content/docs.botkube.io__license.md index 776e9734..16da3836 100644 --- a/hack/assistant-setup/content/docs.botkube.io__license.md +++ b/hack/assistant-setup/content/docs.botkube.io__license.md @@ -3,7 +3,7 @@ Title: License | Botkube URL Source: https://docs.botkube.io/license/ Markdown Content: -MIT License[​](#mit-license"DirectlinktoMITLicense") +MIT License[​](#mit-license "Direct link to MIT License") --------------------------------------------------------- Copyright (c) 2022 Kubeshop diff --git a/hack/assistant-setup/content/docs.botkube.io__operation__common-problems.md b/hack/assistant-setup/content/docs.botkube.io__operation__common-problems.md index 1273b62b..9ce68eea 100644 --- a/hack/assistant-setup/content/docs.botkube.io__operation__common-problems.md +++ b/hack/assistant-setup/content/docs.botkube.io__operation__common-problems.md @@ -5,55 +5,60 @@ URL Source: https://docs.botkube.io/operation/common-problems Markdown Content: This document describes how to identify and resolve common Botkube problems that might occur. -Incompatible plugin API version[​](#incompatible-plugin-api-version"DirectlinktoIncompatiblepluginAPIversion") +Incompatible plugin API version[​](#incompatible-plugin-api-version "Direct link to Incompatible plugin API version") --------------------------------------------------------------------------------------------------------------------- **Symptoms** * Botkube agent Pod is restarting - + * In [Botkube agent logs](https://docs.botkube.io/operation/diagnostics#agent-logs), you see such entry: + + while running application: while waiting for goroutines to finish gracefully: 1 error occurred: * while starting plugins manager: while creating executor plugins: Incompatible API version with plugin. Plugin version: 2, Client versions: [1] + -while running application: while waiting for goroutines to finish gracefully: 1 error occurred: * while starting plugins manager: while creating executor plugins: Incompatible API version with plugin. Plugin version: 2, Client versions: [1] **Debugging steps** * [Check Botkube agent version](https://docs.botkube.io/operation/diagnostics#agent-version). +**Debugging steps** +* [Check Botkube agent version](https://docs.botkube.io/operation/diagnostics#agent-version). + * [Check plugin repository version](https://docs.botkube.io/operation/diagnostics#check-configured-plugin-repositories). - + **Solution** In order to fix the problem, you need to make sure that the agent version is the same as the plugin repository version. For example, for agent image `ghcr.io/kubeshop/botkube:v1.5.0` you need to configure official plugin repository in version `v1.5.0`: `https://github.com/kubeshop/botkube/releases/download/v1.5.0/plugins-index.yaml`. To change the repository URL, run: -helm upgrade botkube botkube/botkube -n botkube --reuse-values --set plugins.repositories.botkube.url="https://github.com/kubeshop/botkube/releases/download/v1.5.0/plugins-index.yaml" + helm upgrade botkube botkube/botkube -n botkube --reuse-values --set plugins.repositories.botkube.url="https://github.com/kubeshop/botkube/releases/download/v1.5.0/plugins-index.yaml" -Helm chart loading error[​](#helm-chart-loading-error"DirectlinktoHelmchartloadingerror") +Helm chart loading error[​](#helm-chart-loading-error "Direct link to Helm chart loading error") ------------------------------------------------------------------------------------------------ **Symptoms** * You encounter the following errors when running the `botkube install` command: - -Error: while loading Helm chart: Chart.yaml file is missing - -or - -Error: while loading Helm chart: file 'botkube' does not appear to be a gzipped archive; got 'application/octet-stream' - + + Error: while loading Helm chart: Chart.yaml file is missing + + or + + Error: while loading Helm chart: file 'botkube' does not appear to be a gzipped archive; got 'application/octet-stream' + **Solution** If you're experiencing these errors, it means that there is a conflict with a file or directory named `botkube` in the location where you executed the `botkube install` command. To resolve this issue, follow these steps: 1. **rename or remove 'botkube':** You cannot have a file or directory named `botkube` in the same location where you are trying to install Botkube. You should either rename or remove the conflicting `botkube` file or directory. - + 2. **Change Directory:** Alternatively, you can navigate to a different directory in your command line interface before executing the `botkube install` command. Ensure that the directory where you run the command does not contain any conflicting `botkube` files or directories. + - -Network connections[​](#network-connections"DirectlinktoNetworkconnections") +Network connections[​](#network-connections "Direct link to Network connections") --------------------------------------------------------------------------------- Botkube can work in private clusters where inbound connections are limited. However, you need to allow outgoing connections to all configured plugin repositories and API endpoints, depending on the communication platform you intend to use. -### Botkube official plugins[​](#botkube-official-plugins"DirectlinktoBotkubeofficialplugins") +### Botkube official plugins[​](#botkube-official-plugins "Direct link to Botkube official plugins") The official Botkube plugin index and binaries are hosted on [GitHub releases](https://github.com/kubeshop/botkube/releases). For instance, for the version `v1.5.0` the following URLs are used: @@ -64,7 +69,7 @@ As a result, you need to allow outbound connections for Botkube to successfully Additionally, each plugin may define additional dependencies that the [plugin manager](https://docs.botkube.io/architecture/#plugin-manager) downloads on startup. For example, the Helm plugin for `linux/amd64` requires `https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz`. To learn more about all URLs that need to be accessible, you can download a plugin index and check all plugin definitions that you want to enable. -### Socket Slack[​](#socket-slack"DirectlinktoSocketSlack") +### Socket Slack[​](#socket-slack "Direct link to Socket Slack") For the Slack communication platform, we use the [Socket mode](https://api.slack.com/apis/connections/socket) approach. In order to make this integration work, you need to allow all Slack API URLs defined under [https://my.slack.com/help/urls](https://my.slack.com/help/urls), especially: @@ -78,40 +83,40 @@ For the Slack communication platform, we use the [Socket mode](https://api.slack Visit [Slack official guide](https://slack.com/help/articles/360001603387-Manage-Slack-connection-issues#network-settings) for troubleshooting your Slack connection. -### Cloud Slack[​](#cloud-slack"DirectlinktoCloudSlack") +### Cloud Slack[​](#cloud-slack "Direct link to Cloud Slack") Cloud Slack integration communicates via gRPC with the Botkube control-plane. In order to make this integration work, you need to allow access to `api.botkube.io`. -Plugin's permissions[​](#plugins-permissions"DirectlinktoPlugin'spermissions") +Plugin's permissions[​](#plugins-permissions "Direct link to Plugin's permissions") ----------------------------------------------------------------------------------- If you experience problems while configuring RBAC (Role-Based Access Control) for plugins, you can refer to the [troubleshooting](https://docs.botkube.io/configuration/rbac#troubleshooting) guide for assistance. -Botkube doesn't respond on MS Teams[​](#botkube-doesnt-respond-on-ms-teams"DirectlinktoBotkubedoesn'trespondonMSTeams") +Botkube doesn't respond on MS Teams[​](#botkube-doesnt-respond-on-ms-teams "Direct link to Botkube doesn't respond on MS Teams") -------------------------------------------------------------------------------------------------------------------------------- In order to solve the problem, please refer to the [troubleshooting](https://docs.botkube.io/installation/teams/#troubleshooting) guide for assistance. -I can't see my Slack private channels in Cloud Dashboard[​](#i-cant-see-my-slack-private-channels-in-cloud-dashboard"DirectlinktoIcan'tseemySlackprivatechannelsinCloudDashboard") +I can't see my Slack private channels in Cloud Dashboard[​](#i-cant-see-my-slack-private-channels-in-cloud-dashboard "Direct link to I can't see my Slack private channels in Cloud Dashboard") ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- To comply with Slack's privacy policy, private channels won't be visible until you create a public alias for the respective channel. Refer to the provided instructions for guidance on completing this process: [Setting Public Alias for Private Channels](https://docs.botkube.io/installation/slack/cloud-slack#setting-public-alias-for-private-channels) -Air-Gap installation[​](#air-gap-installation"DirectlinktoAir-Gapinstallation") +Air-Gap installation[​](#air-gap-installation "Direct link to Air-Gap installation") ------------------------------------------------------------------------------------ **Please note that we do not support air-gap installations.** However, here are some suggestions that you may find helpful: * Mirror Botkube images to your private registry: - -* [`ghcr.io/kubeshop/botkube:{botkube_version}`](https://github.com/kubeshop/botkube/pkgs/container/botkube), e.g., `ghcr.io/kubeshop/botkube:v1.5.0` -* [`ghcr.io/kubeshop/k8s-sidecar:in-cluster-config`](https://github.com/orgs/kubeshop/packages/container/package/k8s-sidecar) + + * [`ghcr.io/kubeshop/botkube:{botkube_version}`](https://github.com/kubeshop/botkube/pkgs/container/botkube), e.g., `ghcr.io/kubeshop/botkube:v1.5.0` + * [`ghcr.io/kubeshop/k8s-sidecar:in-cluster-config`](https://github.com/orgs/kubeshop/packages/container/package/k8s-sidecar) * During startup, Botkube downloads repository indexes and all enabled plugins. All of them are stored under the `/tmp` folder. To ensure that the [plugin manager](https://docs.botkube.io/architecture/#plugin-manager) does not make external calls, all required plugins must be present. You can achieve this by mounting a Persistent Volume Claim (PVC) at this path. By default, we use [`emptyDir`](https://github.com/kubeshop/botkube/blob/9d0627794078d519987309271b64c94047cd65d9/helm/botkube/templates/deployment.yaml#L176-L177). Later, you can mount your Persistent Volume (PV) with cached plugins in your air-gapped environment. - + * Select a communication platform that can be installed in the air-gapped environment, such as [Mattermost](https://docs.botkube.io/installation/mattermost/). + - -Others[​](#others"DirectlinktoOthers") +Others[​](#others "Direct link to Others") ------------------------------------------ Having trouble finding a solution to your problem? No problem at all! We will help you to get your Botkube up and running. First, follow these steps: diff --git a/hack/assistant-setup/content/docs.botkube.io__operation__diagnostics.md b/hack/assistant-setup/content/docs.botkube.io__operation__diagnostics.md index 03c33a68..ab77eb0d 100644 --- a/hack/assistant-setup/content/docs.botkube.io__operation__diagnostics.md +++ b/hack/assistant-setup/content/docs.botkube.io__operation__diagnostics.md @@ -10,36 +10,44 @@ In order to run the suggested commands, make sure that you have installed: * [`helm`](https://helm.sh/docs/intro/install/) * [`kubectl`](https://kubernetes.io/docs/tasks/tools/) -Agent[​](#agent"DirectlinktoAgent") +Agent[​](#agent "Direct link to Agent") --------------------------------------- This section describes [Botkube agent](https://docs.botkube.io/architecture/) related diagnostic. -### Agent version[​](#agent-version"DirectlinktoAgentversion") +### Agent version[​](#agent-version "Direct link to Agent version") The easiest way to check the Agent version is to get the Docker image: -kubectl get deploy botkube -n botkube -o=jsonpath="{'Used images\n'}{range .spec.template.spec.containers[*]}{.name}{':\t'}{.image}{'\n'}{end}" You should get an output similar to this: Used imagesbotkube: ghcr.io/kubeshop/botkube:v1.5.0cfg-watcher: ghcr.io/kubeshop/k8s-sidecar:in-cluster-config The `botkube` is the agent image. The container image tag (`v1.5.0`) is the version in which it was deployed on the cluster. ### Agent health[​](#agent-health"DirectlinktoAgenthealth") + kubectl get deploy botkube -n botkube -o=jsonpath="{'Used images\n'}{range .spec.template.spec.containers[*]}{.name}{':\t'}{.image}{'\n'}{end}" + +You should get an output similar to this: + + Used imagesbotkube: ghcr.io/kubeshop/botkube:v1.5.0cfg-watcher: ghcr.io/kubeshop/k8s-sidecar:in-cluster-config + +The `botkube` is the agent image. The container image tag (`v1.5.0`) is the version in which it was deployed on the cluster. + +### Agent health[​](#agent-health "Direct link to Agent health") To check if the Agent Pods are in the `Running` state, run: -kubectl get pod -n botkube -l app=botkube + kubectl get pod -n botkube -l app=botkube All the containers from Pods should be in the `Running` status. Restarts' number higher than one may also indicate problems, e.g. not enough resource, lack of permissions, network timeouts, etc. -### Agent logs[​](#agent-logs"DirectlinktoAgentlogs") +### Agent logs[​](#agent-logs "Direct link to Agent logs") If the Botkube Agent is [healthy](#agent-health), you should be able to track any bug by checking the logs. To check the logs, run: -kubectl logs -n botkube -l app=botkube -c botkube + kubectl logs -n botkube -l app=botkube -c botkube To get all logs specify `--tail=-1`, otherwise only 10 last lines are displayed. To check the logs since a given time, use the `--since-time` or `--since` flag, for example: ---since-time=2020-03-30T10:02:08Z + --since-time=2020-03-30T10:02:08Z -### Agent configuration[​](#agent-configuration"DirectlinktoAgentconfiguration") +### Agent configuration[​](#agent-configuration "Direct link to Agent configuration") Select a tab to use a tool of your choice for getting Botkube configuration: @@ -52,23 +60,23 @@ The `botkube config get` command is available from the `v1.4.0` version. Install [Botkube CLI](https://docs.botkube.io/cli/getting-started#installation) and run: -botkube config get > /tmp/bk-config.yaml + botkube config get > /tmp/bk-config.yaml -### Agent restart[​](#agent-restart"DirectlinktoAgentrestart") +### Agent restart[​](#agent-restart "Direct link to Agent restart") When Pods are unhealthy, or if the operation processing is stuck, you can restart the Pod using this command: -kubectl delete po -n botkube -l app=botkube + kubectl delete po -n botkube -l app=botkube -### Agent debug logging[​](#agent-debug-logging"DirectlinktoAgentdebuglogging") +### Agent debug logging[​](#agent-debug-logging "Direct link to Agent debug logging") In order to change the logging level to `debug`, run: -helm upgrade botkube botkube/botkube -n botkube --set settings.log.level="debug" --reuse-values + helm upgrade botkube botkube/botkube -n botkube --set settings.log.level="debug" --reuse-values If the Botkube agent Pod isn't restarted automatically, [restart it manually](#agent-restart). -### Check configured plugin repositories[​](#check-configured-plugin-repositories"DirectlinktoCheckconfiguredpluginrepositories") +### Check configured plugin repositories[​](#check-configured-plugin-repositories "Direct link to Check configured plugin repositories") Select a tab to use a tool of your choice for checking plugin repository configuration: @@ -78,4 +86,4 @@ Select a tab to use a tool of your choice for checking plugin repository configu Install [`yq`](https://github.com/mikefarah/yq) and run: -helm get values botkube --all -oyaml | yq '.plugins' + helm get values botkube --all -oyaml | yq '.plugins' diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__custom-executor.md b/hack/assistant-setup/content/docs.botkube.io__plugin__custom-executor.md index 6ee49a50..4dc29d0d 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__custom-executor.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__custom-executor.md @@ -7,7 +7,7 @@ You can extend Botkube functionality by writing custom executor plugin. An execu Plugin executor is a binary that implements the [executor](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) Protocol Buffers contract. -Goal[​](#goal"DirectlinktoGoal") +Goal[​](#goal "Direct link to Goal") ------------------------------------ This tutorial shows you how to build a custom `echo` executor that responds with a command that was specified by the user in a chat window. @@ -16,45 +16,56 @@ This tutorial shows you how to build a custom `echo` executor that responds with For a final implementation, see the [Botkube template repository](https://docs.botkube.io/plugin/quick-start). -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * Basic understanding of the Go language. * [Go](https://golang.org/doc/install) at least 1.18. -* See [go.mod](https://github.com/kubeshop/botkube/blob/main/go.mod#L1) for the recommended version used by Botkube team. + * See [go.mod](https://github.com/kubeshop/botkube/blob/main/go.mod#L1) for the recommended version used by Botkube team. * [GoReleaser](https://goreleaser.com/) at least 1.13. -### Develop plugin business logic[​](#develop-plugin-business-logic"DirectlinktoDeveloppluginbusinesslogic") +### Develop plugin business logic[​](#develop-plugin-business-logic "Direct link to Develop plugin business logic") 1. Create an executor plugin directory: - -mkdir botkube-plugins && cd botkube-plugins - + + mkdir botkube-plugins && cd botkube-plugins + 2. Initialize the Go module: - -go mod init botkube-plugins - + + go mod init botkube-plugins + 3. Create the `main.go` file for the `echo` executor with the following template: - -cat << EOF > main.gopackage mainimport ( "context" "fmt" "github.com/MakeNowJust/heredoc" "github.com/hashicorp/go-plugin" "github.com/kubeshop/botkube/pkg/api" "github.com/kubeshop/botkube/pkg/api/executor")// EchoExecutor implements the Botkube executor plugin interface.type EchoExecutor struct{}func main() { executor.Serve(map[string]plugin.Plugin{ "echo": &executor.Plugin{ Executor: &EchoExecutor{}, }, })}EOF This template code imports required packages and registers `EchoExecutor` as the gRPC plugin. At this stage, the `EchoExecutor` service doesn't implement the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) contract. We will add the required methods in the next steps. - + + cat << EOF > main.gopackage mainimport ( "context" "fmt" "github.com/MakeNowJust/heredoc" "github.com/hashicorp/go-plugin" "github.com/kubeshop/botkube/pkg/api" "github.com/kubeshop/botkube/pkg/api/executor")// EchoExecutor implements the Botkube executor plugin interface.type EchoExecutor struct{}func main() { executor.Serve(map[string]plugin.Plugin{ "echo": &executor.Plugin{ Executor: &EchoExecutor{}, }, })}EOF + + This template code imports required packages and registers `EchoExecutor` as the gRPC plugin. At this stage, the `EchoExecutor` service doesn't implement the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) contract. We will add the required methods in the next steps. + 4. Download imported dependencies: - + 5. Add the required `Metadata` method: - -// Metadata returns details about the Echo plugin.func (*EchoExecutor) Metadata(context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ Version: "1.0.0", Description: "Echo sends back the command that was specified.", JSONSchema: api.JSONSchema{ Value: heredoc.Doc(`{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "echo", "description": "Example echo plugin", "type": "object", "properties": { "formatOptions": { "description": "Options to format echoed string", "type": "array", "items": { "type": "string", "enum": ["bold", "italic" ] } } }, "additionalProperties": false }`), }, }, nil} The `Metadata` method returns basic information about your plugin. This data is used when the plugin index is generated in an automated way. You will learn more about that in the next steps. Ąs a part of the `Metadata` method, you can define the plugin dependencies. To learn more about them, see the [Dependencies](https://docs.botkube.io/plugin/dependencies) document. - + + // Metadata returns details about the Echo plugin.func (*EchoExecutor) Metadata(context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ Version: "1.0.0", Description: "Echo sends back the command that was specified.", JSONSchema: api.JSONSchema{ Value: heredoc.Doc(`{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "echo", "description": "Example echo plugin", "type": "object", "properties": { "formatOptions": { "description": "Options to format echoed string", "type": "array", "items": { "type": "string", "enum": [ "bold", "italic" ] } } }, "additionalProperties": false }`), }, }, nil} + + The `Metadata` method returns basic information about your plugin. This data is used when the plugin index is generated in an automated way. You will learn more about that in the next steps. + + Ąs a part of the `Metadata` method, you can define the plugin dependencies. To learn more about them, see the [Dependencies](https://docs.botkube.io/plugin/dependencies) document. + 6. Add the required `Execute` method: - -// Execute returns a given command as a response.func (*EchoExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { return executor.ExecuteOutput{ Message: api.NewCodeBlockMessage(response, true), }, nil} - -The `Execute` method is the heart of your executor plugin. This method runs your business logic and returns the execution output. Next, the Botkube core sends back the response to a given communication platform. If the communication platform supports interactivity, you can construct and return interactive messages containing buttons, dropdowns, input text, and more complex formatting. To learn more about it, see the [Interactive Messages](https://docs.botkube.io/plugin/interactive-messages) guide. - -For each `Execute` method call, Botkube attaches the list of associated configurations. You will learn more about that in the [**Passing configuration to your plugin**](#passing-configuration-to-your-plugin) section. - + + // Execute returns a given command as a response.func (*EchoExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { return executor.ExecuteOutput{ Message: api.NewCodeBlockMessage(response, true), }, nil} + + The `Execute` method is the heart of your executor plugin. This method runs your business logic and returns the execution output. Next, the Botkube core sends back the response to a given communication platform. If the communication platform supports interactivity, you can construct and return interactive messages containing buttons, dropdowns, input text, and more complex formatting. To learn more about it, see the [Interactive Messages](https://docs.botkube.io/plugin/interactive-messages) guide. + + For each `Execute` method call, Botkube attaches the list of associated configurations. You will learn more about that in the [**Passing configuration to your plugin**](#passing-configuration-to-your-plugin) section. + 7. Add the required `Help` method: + + // Help returns help messagefunc (EchoExecutor) Help(context.Context) (api.Message, error) { btnBuilder := api.NewMessageButtonBuilder() return api.Message{ Sections: []api.Section{ { Base: api.Base{ Header: "Run `echo` commands", Description: description, }, Buttons: []api.Button{ btnBuilder.ForCommandWithDescCmd("Run", "echo 'hello world'"), }, }, }, }, nil} + + You can use `api.NewCodeBlockMessage` or `api.NewPlaintextMessage` helper functions, or construct your own message. + -// Help returns help messagefunc (EchoExecutor) Help(context.Context) (api.Message, error) { btnBuilder := api.NewMessageButtonBuilder() return api.Message{ Sections: []api.Section{ { Base: api.Base{ Header: "Run `echo` commands", Description: description, }, Buttons: []api.Button{ btnBuilder.ForCommandWithDescCmd("Run", "echo 'hello world'"), }, }, }, }, nil} You can use `api.NewCodeBlockMessage` or `api.NewPlaintextMessage` helper functions, or construct your own message. Build plugin binaries[​](#build-plugin-binaries"DirectlinktoBuildpluginbinaries") +Build plugin binaries[​](#build-plugin-binaries "Direct link to Build plugin binaries") --------------------------------------------------------------------------------------- Now it's time to build your plugin. For that purpose, we will use GoReleaser. It simplifies building Go binaries for different architectures. The important thing is to produce the binaries for the architecture of the host platform where Botkube is running. Adjust the `goos`, `goarch`, and `goarm` properties based on your needs. @@ -64,24 +75,34 @@ note Instead of GoReleaser, you can use another tool of your choice. 1. Create the GoReleaser configuration file: - -cat << EOF > .goreleaser.yamlproject_name: botkube-pluginsbefore: hooks: - go mod downloadbuilds: - id: echo binary: executor_echo_{{ .Os }}_{{ .Arch }} no_unique_dist_dir: true env: - CGO_ENABLED=0 goos: - linux - darwin goarch: - amd64 - arm64 goarm: - 7snapshot: name_template: 'v{{ .Version }}'EOF - + + cat << EOF > .goreleaser.yamlproject_name: botkube-pluginsbefore: hooks: - go mod downloadbuilds: - id: echo binary: executor_echo_{{ .Os }}_{{ .Arch }} no_unique_dist_dir: true env: - CGO_ENABLED=0 goos: - linux - darwin goarch: - amd64 - arm64 goarm: - 7snapshot: name_template: 'v{{ .Version }}'EOF + 2. Build the binaries: - -goreleaser build --rm-dist --snapshot - + + goreleaser build --rm-dist --snapshot + Congrats! You just created your first Botkube executor plugin! 🎉 Now it's time to [test it locally with Botkube](https://docs.botkube.io/plugin/local-testing). Once you're done testing, see how to [distribute it](https://docs.botkube.io/plugin/repo). -Passing configuration to your plugin[​](#passing-configuration-to-your-plugin"DirectlinktoPassingconfigurationtoyourplugin") +Passing configuration to your plugin[​](#passing-configuration-to-your-plugin "Direct link to Passing configuration to your plugin") ------------------------------------------------------------------------------------------------------------------------------------ Sometimes your executor plugin requires a configuration specified by the end-user. Botkube supports such requirement and provides an option to specify plugin configuration under `config`. An example Botkube configuration looks like this: -communications: "default-group": socketSlack: channels: "default": name: "all-teams" bindings: executors: - echo-team-a - echo-team-bexecutors: "echo-team-a": # executor configuration group name botkube/echo: enabled: true config: formatOptions: ["italic"] "echo-team-b": # executor configuration group name botkube/echo: enabled: true config: formatOptions: ["bold"] This means that two different `botkube/echo` plugin configurations were bound to the `all-teams` Slack channel. Under `executor.ExecuteInput{}.Configs`, you will find the list of configurations in the YAML format as specified under the `config` property for each bound and enabled executor. The order of the configuration is the same as specified under the `bindings.executors` property. It's up to the plugin author to merge the passed configurations. You can use our helper function from the plugin extension package (`pluginx`). import ( "context" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")// Config holds the executor configuration.type Config struct { FormatOptions []string `yaml:"options,omitempty"`}func (EchoExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { var cfg Config err := pluginx.MergeExecutorConfigs(in.Configs, &cfg) if err != nil { return executor.ExecuteOutput{}, err } // rest logic} caution Botkube starts only one process of a given executor plugin, and the list of configuration YAMLs can be different per gRPC call, so you shouldn't cache the merged configuration. Notes[​](#notes"DirectlinktoNotes") + communications: "default-group": socketSlack: channels: "default": name: "all-teams" bindings: executors: - echo-team-a - echo-team-bexecutors: "echo-team-a": # executor configuration group name botkube/echo: enabled: true config: formatOptions: ["italic"] "echo-team-b": # executor configuration group name botkube/echo: enabled: true config: formatOptions: ["bold"] + +This means that two different `botkube/echo` plugin configurations were bound to the `all-teams` Slack channel. Under `executor.ExecuteInput{}.Configs`, you will find the list of configurations in the YAML format as specified under the `config` property for each bound and enabled executor. The order of the configuration is the same as specified under the `bindings.executors` property. It's up to the plugin author to merge the passed configurations. You can use our helper function from the plugin extension package (`pluginx`). + + import ( "context" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")// Config holds the executor configuration.type Config struct { FormatOptions []string `yaml:"options,omitempty"`}func (EchoExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { var cfg Config err := pluginx.MergeExecutorConfigs(in.Configs, &cfg) if err != nil { return executor.ExecuteOutput{}, err } // rest logic} + +caution + +Botkube starts only one process of a given executor plugin, and the list of configuration YAMLs can be different per gRPC call, so you shouldn't cache the merged configuration. + +Notes[​](#notes "Direct link to Notes") --------------------------------------- * Streaming command response is not supported. As a result, commands like `helm install --wait` doesn't work well, as the response won't be sent until the command finishes. It's recommended to return the response as soon as possible. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__custom-source.md b/hack/assistant-setup/content/docs.botkube.io__plugin__custom-source.md index 0fd5a441..1497da60 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__custom-source.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__custom-source.md @@ -7,7 +7,7 @@ You can extend Botkube functionality by writing custom source plugin. A source a Source is a binary that implements the [source](https://github.com/kubeshop/botkube/blob/main/proto/source.proto) Protocol Buffers contract. -Goal[​](#goal"DirectlinktoGoal") +Goal[​](#goal "Direct link to Goal") ------------------------------------ This tutorial shows you how to build a custom `ticker` source that emits an event at a specified interval. @@ -16,57 +16,63 @@ This tutorial shows you how to build a custom `ticker` source that emits an even For a final implementation, see the [Botkube template repository](https://docs.botkube.io/plugin/quick-start). -Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +Prerequisites[​](#prerequisites "Direct link to Prerequisites") --------------------------------------------------------------- * Basic understanding of the Go language. * [Go](https://golang.org/doc/install) at least 1.18. -* See [go.mod](https://github.com/kubeshop/botkube/blob/main/go.mod#L1) for the recommended version used by Botkube team. + * See [go.mod](https://github.com/kubeshop/botkube/blob/main/go.mod#L1) for the recommended version used by Botkube team. * [GoReleaser](https://goreleaser.com/) at least 1.13. -### Develop plugin business logic[​](#develop-plugin-business-logic"DirectlinktoDeveloppluginbusinesslogic") +### Develop plugin business logic[​](#develop-plugin-business-logic "Direct link to Develop plugin business logic") 1. Create a source plugin directory: - -mkdir botkube-plugins && cd botkube-plugins - + + mkdir botkube-plugins && cd botkube-plugins + 2. Initialize the Go module: - -go mod init botkube-plugins - + + go mod init botkube-plugins + 3. Create the `main.go` file for the `ticker` source with the following template: - -cat << EOF > main.gopackage mainimport ( "context" "fmt" "time" "github.com/hashicorp/go-plugin" "github.com/kubeshop/botkube/pkg/api" "github.com/kubeshop/botkube/pkg/api/source" "gopkg.in/yaml.v3")// Config holds source configuration.type Config struct { Interval time.Duration}// Ticker implements the Botkube source plugin interface.type Ticker struct{}func main() { source.Serve(map[string]plugin.Plugin{ "ticker": &source.Plugin{ Source: &Ticker{}, }, })}EOF This template code imports required packages and registers `Ticker` as the gRPC plugin. At this stage, the `Ticker` service doesn't implement the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/source.proto) contract. We will add the required methods in the next steps. - + + cat << EOF > main.gopackage mainimport ( "context" "fmt" "time" "github.com/hashicorp/go-plugin" "github.com/kubeshop/botkube/pkg/api" "github.com/kubeshop/botkube/pkg/api/source" "gopkg.in/yaml.v3")// Config holds source configuration.type Config struct { Interval time.Duration}// Ticker implements the Botkube source plugin interface.type Ticker struct{}func main() { source.Serve(map[string]plugin.Plugin{ "ticker": &source.Plugin{ Source: &Ticker{}, }, })}EOF + + This template code imports required packages and registers `Ticker` as the gRPC plugin. At this stage, the `Ticker` service doesn't implement the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/source.proto) contract. We will add the required methods in the next steps. + 4. Download imported dependencies: - + 5. Add the required `Metadata` method: - -// Metadata returns details about the Ticker plugin.func (Ticker) Metadata(_ context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ Version: "0.1.0", Description: "Emits an event at a specified interval.", }, nil} - -The `Metadata` method returns basic information about your plugin. This data is used when the plugin index is generated in an automated way. You will learn more about that in the next steps. - -Ąs a part of the `Metadata` method, you can define the plugin dependencies. To learn more about them, see the [Dependencies](https://docs.botkube.io/plugin/dependencies) document. - + + // Metadata returns details about the Ticker plugin.func (Ticker) Metadata(_ context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ Version: "0.1.0", Description: "Emits an event at a specified interval.", }, nil} + + The `Metadata` method returns basic information about your plugin. This data is used when the plugin index is generated in an automated way. You will learn more about that in the next steps. + + Ąs a part of the `Metadata` method, you can define the plugin dependencies. To learn more about them, see the [Dependencies](https://docs.botkube.io/plugin/dependencies) document. + 6. Add the required `Stream` method: - -// Stream sends an event after configured time duration.func (Ticker) Stream(ctx context.Context, in source.StreamInput) (source.StreamOutput, error) { cfg, err := mergeConfigs(in.Configs) if err != nil { return source.StreamOutput{}, err } ticker := time.NewTicker(cfg.Interval) out := source.StreamOutput{ Event: make(chan source.Event), } go func() { for { select { case <-ctx.Done(): ticker.Stop() case <-ticker.C: out.Event <- source.Event{ Message: api.NewPlaintextMessage("Ticker Event", true), } } } }() return out, nil}// mergeConfigs merges all input configuration. In our case we don't have complex merge strategy,// the last one that was specified wins :)func mergeConfigs(configs []*source.Config) (Config, error) { // default config finalCfg := Config{ Interval: time.Minute, } for _, inputCfg := range configs { var cfg Config err := yaml.Unmarshal(inputCfg.RawYAML, &cfg) if err != nil { return Config{}, fmt.Errorf("while unmarshalling YAML config: %w", err) } if cfg.Interval != 0 { finalCfg.Interval = cfg.Interval } } return finalCfg, nil} The `Stream` method is the heart of your source plugin. This method runs your business logic and push events into the `out.Output` channel. Next, the Botkube core sends the event to a given communication platform. The `Stream` method is called only once. Botkube attaches the list of associated configurations. You will learn more about that in the [**Passing configuration to your plugin**](#passing-configuration-to-your-plugin) section. - + + // Stream sends an event after configured time duration.func (Ticker) Stream(ctx context.Context, in source.StreamInput) (source.StreamOutput, error) { cfg, err := mergeConfigs(in.Configs) if err != nil { return source.StreamOutput{}, err } ticker := time.NewTicker(cfg.Interval) out := source.StreamOutput{ Event: make(chan source.Event), } go func() { for { select { case <-ctx.Done(): ticker.Stop() case <-ticker.C: out.Event <- source.Event{ Message: api.NewPlaintextMessage("Ticker Event", true), } } } }() return out, nil}// mergeConfigs merges all input configuration. In our case we don't have complex merge strategy,// the last one that was specified wins :)func mergeConfigs(configs []*source.Config) (Config, error) { // default config finalCfg := Config{ Interval: time.Minute, } for _, inputCfg := range configs { var cfg Config err := yaml.Unmarshal(inputCfg.RawYAML, &cfg) if err != nil { return Config{}, fmt.Errorf("while unmarshalling YAML config: %w", err) } if cfg.Interval != 0 { finalCfg.Interval = cfg.Interval } } return finalCfg, nil} + + The `Stream` method is the heart of your source plugin. This method runs your business logic and push events into the `out.Output` channel. Next, the Botkube core sends the event to a given communication platform. + + The `Stream` method is called only once. Botkube attaches the list of associated configurations. You will learn more about that in the [**Passing configuration to your plugin**](#passing-configuration-to-your-plugin) section. + 7. Implement `HandleExternalRequest` method: - -Plugins can handle external requests from Botkube incoming webhook. Any external system can call the webhook and trigger a given source plugin. By default, the path of the incoming webhook is `http://botkube.botkube.svc.cluster.local:2115/sources/v1/{sourceName}` and it supports POST requests in JSON payload format. - -* If you don't want to handle external events from incoming webhook, simply nest the `source.HandleExternalRequestUnimplemented` under your struct: - -// Ticker implements the Botkube executor plugin interface.type Ticker struct { // specify that the source doesn't handle external requests source.HandleExternalRequestUnimplemented} - -* To handle such requests, you need to implement the `HandleExternalRequest` method. In this case, the `message` property from payload is outputted to the bound communication platforms: - - -// HandleExternalRequest handles incoming payload and returns an event based on it.func (Forwarder) HandleExternalRequest(_ context.Context, in source.ExternalRequestInput) (source.ExternalRequestOutput, error) { var p payload err := json.Unmarshal(in.Payload, &p) if err != nil { return source.ExternalRequestOutput{}, fmt.Errorf("while unmarshaling payload: %w", err) } if p.Message == "" { return source.ExternalRequestOutput{}, fmt.Errorf("message cannot be empty") } msg := fmt.Sprintf("*Incoming webhook event:* %s", p.Message) return source.ExternalRequestOutput{ Event: source.Event{ Message: api.NewPlaintextMessage(msg, true), }, }, nil} - - -Build plugin binaries[​](#build-plugin-binaries"DirectlinktoBuildpluginbinaries") + + Plugins can handle external requests from Botkube incoming webhook. Any external system can call the webhook and trigger a given source plugin. By default, the path of the incoming webhook is `http://botkube.botkube.svc.cluster.local:2115/sources/v1/{sourceName}` and it supports POST requests in JSON payload format. + + * If you don't want to handle external events from incoming webhook, simply nest the `source.HandleExternalRequestUnimplemented` under your struct: + + // Ticker implements the Botkube executor plugin interface.type Ticker struct { // specify that the source doesn't handle external requests source.HandleExternalRequestUnimplemented} + + * To handle such requests, you need to implement the `HandleExternalRequest` method. In this case, the `message` property from payload is outputted to the bound communication platforms: + + + // HandleExternalRequest handles incoming payload and returns an event based on it.func (Forwarder) HandleExternalRequest(_ context.Context, in source.ExternalRequestInput) (source.ExternalRequestOutput, error) { var p payload err := json.Unmarshal(in.Payload, &p) if err != nil { return source.ExternalRequestOutput{}, fmt.Errorf("while unmarshaling payload: %w", err) } if p.Message == "" { return source.ExternalRequestOutput{}, fmt.Errorf("message cannot be empty") } msg := fmt.Sprintf("*Incoming webhook event:* %s", p.Message) return source.ExternalRequestOutput{ Event: source.Event{ Message: api.NewPlaintextMessage(msg, true), }, }, nil} + + +Build plugin binaries[​](#build-plugin-binaries "Direct link to Build plugin binaries") --------------------------------------------------------------------------------------- Now it's time to build your plugin. For that purpose we will use GoReleaser. It simplifies building Go binaries for different architectures. @@ -76,23 +82,23 @@ note Instead of GoReleaser, you can use another tool of your choice. The important thing is to produce the binaries for the architecture of the host platform where Botkube is running. 1. Create the GoReleaser configuration file: - -cat << EOF > .goreleaser.yamlproject_name: botkube-pluginsbefore: hooks: - go mod downloadbuilds: - id: ticker binary: source_ticker_{{ .Os }}_{{ .Arch }} no_unique_dist_dir: true env: - CGO_ENABLED=0 goos: - linux - darwin goarch: - amd64 - arm64 goarm: - 7snapshot: name_template: 'v{{ .Version }}'EOF - + + cat << EOF > .goreleaser.yamlproject_name: botkube-pluginsbefore: hooks: - go mod downloadbuilds: - id: ticker binary: source_ticker_{{ .Os }}_{{ .Arch }} no_unique_dist_dir: true env: - CGO_ENABLED=0 goos: - linux - darwin goarch: - amd64 - arm64 goarm: - 7snapshot: name_template: 'v{{ .Version }}'EOF + 2. Build the binaries: - -goreleaser build --rm-dist --snapshot - + + goreleaser build --rm-dist --snapshot + Congrats! You just created your first Botkube source plugin! 🎉 Now it's time to [test it locally with Botkube](https://docs.botkube.io/plugin/local-testing). Once you're done testing, see how to [distribute it](https://docs.botkube.io/plugin/repo). -Passing configuration to your plugin[​](#passing-configuration-to-your-plugin"DirectlinktoPassingconfigurationtoyourplugin") +Passing configuration to your plugin[​](#passing-configuration-to-your-plugin "Direct link to Passing configuration to your plugin") ------------------------------------------------------------------------------------------------------------------------------------ Sometimes your source plugin requires a configuration specified by the end-user. Botkube supports such requirement and provides an option to specify plugin configuration under `config`. An example Botkube configuration looks like this: -communications: "default-group": socketSlack: channels: "default": name: "all-teams" bindings: sources: - ticker-team-a - ticker-team-bsources: "ticker-team-a": botkube/ticker: enabled: true config: interval: 1s "ticker-team-b": botkube/ticker: enabled: true config: interval: 2m + communications: "default-group": socketSlack: channels: "default": name: "all-teams" bindings: sources: - ticker-team-a - ticker-team-bsources: "ticker-team-a": botkube/ticker: enabled: true config: interval: 1s "ticker-team-b": botkube/ticker: enabled: true config: interval: 2m This means that two different `botkube/ticker` plugin configurations were bound to the `all-teams` Slack channel. For each bound configuration [Botkube source dispatcher](https://docs.botkube.io/architecture/#plugin-source-bridge) calls `Stream` method with the configuration specified under the `bindings.sources` property. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__debugging.md b/hack/assistant-setup/content/docs.botkube.io__plugin__debugging.md index d95f24e6..94c6ef2c 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__debugging.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__debugging.md @@ -15,4 +15,4 @@ The plugin name is normalized and all characters different from letters, digits, To change the log level for a given plugin directly in the Botkube deployment, specify `extraEnv` in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. For example: -extraEnv: - name: LOG_LEVEL_EXECUTOR_BOTKUBE_KUBECTL value: "debug" + extraEnv: - name: LOG_LEVEL_EXECUTOR_BOTKUBE_KUBECTL value: "debug" diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__dependencies.md b/hack/assistant-setup/content/docs.botkube.io__plugin__dependencies.md index b7a52f79..0dbc0fe8 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__dependencies.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__dependencies.md @@ -11,8 +11,14 @@ info For downloading plugins and theirs dependencies, Botkube uses `go-getter` library. It supports multiple URL formats (such as HTTP, Git repositories or S3), and is able to unpack archives and extract binaries from them. For more details, see the documentation on the [`go-getter`](https://github.com/hashicorp/go-getter) GitHub repository. -const ( kubectlVersion = "v1.28.1")// Metadata returns details about kubectl plugin.func (e *Executor) Metadata(context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ // ... Dependencies: map[string]api.Dependency{ "kubectl": { URLs: map[string]string{ "windows/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/windows/amd64/kubectl.exe", kubectlVersion), "darwin/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/darwin/amd64/kubectl", kubectlVersion), "darwin/arm64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/darwin/arm64/kubectl", kubectlVersion), "linux/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/amd64/kubectl", kubectlVersion), "linux/s390x": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/s390x/kubectl", kubectlVersion), "linux/ppc64le": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/ppc64le/kubectl", kubectlVersion), "linux/arm64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/arm64/kubectl", kubectlVersion), "linux/386": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/386/kubectl", kubectlVersion), } }, }, }, nil} Such a definition will result in the following `dependencies` section in the plugin index: During Botkube startup, Botkube plugin manager fetches the plugin binaries along with all dependencies. Each dependency binary is named exactly as specified in the [plugin index](#define-dependencies-for-plugin-index-generation). The dependency is fetched to a directory specified in the `PLUGIN_DEPENDENCY_DIR` environment variable passed to the plugin. + const ( kubectlVersion = "v1.28.1")// Metadata returns details about kubectl plugin.func (e *Executor) Metadata(context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ // ... Dependencies: map[string]api.Dependency{ "kubectl": { URLs: map[string]string{ "windows/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/windows/amd64/kubectl.exe", kubectlVersion), "darwin/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/darwin/amd64/kubectl", kubectlVersion), "darwin/arm64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/darwin/arm64/kubectl", kubectlVersion), "linux/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/amd64/kubectl", kubectlVersion), "linux/s390x": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/s390x/kubectl", kubectlVersion), "linux/ppc64le": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/ppc64le/kubectl", kubectlVersion), "linux/arm64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/arm64/kubectl", kubectlVersion), "linux/386": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/386/kubectl", kubectlVersion), } }, }, }, nil} + +Such a definition will result in the following `dependencies` section in the plugin index: + +During Botkube startup, Botkube plugin manager fetches the plugin binaries along with all dependencies. Each dependency binary is named exactly as specified in the [plugin index](#define-dependencies-for-plugin-index-generation). The dependency is fetched to a directory specified in the `PLUGIN_DEPENDENCY_DIR` environment variable passed to the plugin. To make it easier, there's a helper function `plugin.ExecuteCommand` in the `github.com/kubeshop/botkube/pkg/plugin` package, which does all of the above. For example, the kubectl plugin uses the following code: -// set additional env variablesenvs := map[string]string{ "KUBECONFIG": kubeConfigPath,}// runCmd is e.g. "kubectl get pods --all-namespaces"// plugin.ExecuteCommand will replace kubectl with full path to the kubectl binary dependencyout, err := plugin.ExecuteCommand(ctx, runCmd, plugin.ExecuteCommandEnvs(envs)) To get familiar with the full example, see the [kubectl plugin](https://github.com/kubeshop/botkube/tree/main/cmd/executor/kubectl) in the Botkube repository. The Kubectl plugin depends on the official [kubectl CLI](https://kubernetes.io/docs/tasks/tools/#kubectl) binary, which is defined as a part of the `Metadata` method. + // set additional env variablesenvs := map[string]string{ "KUBECONFIG": kubeConfigPath,}// runCmd is e.g. "kubectl get pods --all-namespaces"// plugin.ExecuteCommand will replace kubectl with full path to the kubectl binary dependencyout, err := plugin.ExecuteCommand(ctx, runCmd, plugin.ExecuteCommandEnvs(envs)) + +To get familiar with the full example, see the [kubectl plugin](https://github.com/kubeshop/botkube/tree/main/cmd/executor/kubectl) in the Botkube repository. The Kubectl plugin depends on the official [kubectl CLI](https://kubernetes.io/docs/tasks/tools/#kubectl) binary, which is defined as a part of the `Metadata` method. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__interactive-messages.md b/hack/assistant-setup/content/docs.botkube.io__plugin__interactive-messages.md index e2b1c230..4b4ef44c 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__interactive-messages.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__interactive-messages.md @@ -9,7 +9,7 @@ In this guide, we describe how interactivity applies to messages, and show you h ![Image 1: demo](https://docs.botkube.io/assets/images/demo-msg-aa0290bb67438a1f83c756f4b50842df.gif) -Primitives[​](#primitives"DirectlinktoPrimitives") +Primitives[​](#primitives "Direct link to Primitives") ------------------------------------------------------ You can construct and return interactive messages containing buttons, dropdowns, input text, and more complex formatting. For that reason, we introduced a generic `api.Messages` model. @@ -20,27 +20,39 @@ You can construct and return interactive messages containing buttons, dropdowns, For all primitives you need to attach the proper command that will be executed by Botkube. The pattern is: -import "github.com/kubeshop/botkube/pkg/api"command := api.MessageBotNamePlaceholder + " " + " " + import "github.com/kubeshop/botkube/pkg/api"command := api.MessageBotNamePlaceholder + " " + " " The `api.MessageBotNamePlaceholder` constant, is our cross-platform placeholder that is replaced by Botkube core with a proper bot name. It's mandatory, otherwise Botkube core will ignore a given command, e.g. a button click. The `` and `` should be replaced based on your needs. You replace `` with your own plugin name, or other plugin name, like `kubectl`. However, if you use other plugin name, a given command won't work if plugin is not enabled. -### Buttons[​](#buttons"DirectlinktoButtons") +### Buttons[​](#buttons "Direct link to Buttons") You can define a list of buttons under `Section` object. To construct a given button you can use our helper `api.NewMessageButtonBuilder` builder. For example: -const pluginName = "msg"btnBuilder := api.NewMessageButtonBuilder()msg := api.Message{ Sections: []api.Section{ { Buttons: []api.Button{ btnBuilder.ForCommandWithDescCmd("Run act1", fmt.Sprintf("%s buttons act1", pluginName)), btnBuilder.ForCommandWithDescCmd("Run act2", fmt.Sprintf("%s buttons act2", pluginName), api.ButtonStylePrimary), btnBuilder.ForCommandWithDescCmd("Run act3", fmt.Sprintf("%s buttons act3", pluginName), api.ButtonStyleDanger), }, }, },} When a button is clicked, Botkube runs an associated command. For **Run act1** it's `msg buttons act1`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. If you use only `ForCommandWithoutDesc`, all buttons are render in the same line. ![Image 2: btns-desc](https://docs.botkube.io/assets/images/btns-desc-33bccf898c619eca04aa20266804baad.png) + const pluginName = "msg"btnBuilder := api.NewMessageButtonBuilder()msg := api.Message{ Sections: []api.Section{ { Buttons: []api.Button{ btnBuilder.ForCommandWithDescCmd("Run act1", fmt.Sprintf("%s buttons act1", pluginName)), btnBuilder.ForCommandWithDescCmd("Run act2", fmt.Sprintf("%s buttons act2", pluginName), api.ButtonStylePrimary), btnBuilder.ForCommandWithDescCmd("Run act3", fmt.Sprintf("%s buttons act3", pluginName), api.ButtonStyleDanger), }, }, },} + +When a button is clicked, Botkube runs an associated command. For **Run act1** it's `msg buttons act1`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. + +If you use only `ForCommandWithoutDesc`, all buttons are render in the same line. ![Image 2: btns-desc](https://docs.botkube.io/assets/images/btns-desc-33bccf898c619eca04aa20266804baad.png) Otherwise, each button is rendered in new line with the description on the left side and button on the right side. ![Image 3: btns-inline](https://docs.botkube.io/assets/images/btns-inline-a7f68fcaac17c49eb65ef94a16ede58e.png) -### Dropdowns[​](#dropdowns"DirectlinktoDropdowns") +### Dropdowns[​](#dropdowns "Direct link to Dropdowns") You can define dropdowns under `Section` object. You can split options into groups. Optionally, you can define the initial option. It must be included also under `OptionsGroups`. -cmdPrefix := func(cmd string) string { return fmt.Sprintf("%s %s %s", api.MessageBotNamePlaceholder, pluginName, cmd)}msg := api.Message{ Sections: []api.Section{ { Selects: api.Selects{ ID: "select-id", Items: []api.Select{ { Name: "two-groups", Command: cmdPrefix("selects two-groups"), OptionGroups: []api.OptionGroup{ { Name: cmdPrefix("selects two-groups/1"), Options: []api.OptionItem{ {Name: "BAR", Value: "BAR"}, {Name: "BAZ", Value: "BAZ"}, {Name: "XYZ", Value: "XYZ"}, }, }, { Name: cmdPrefix("selects two-groups/2"), Options: []api.OptionItem{ {Name: "123", Value: "123"}, {Name: "456", Value: "456"}, {Name: "789", Value: "789"}, }, }, }, // MUST be defined also under OptionGroups.Options slice. InitialOption: &api.OptionItem{ Name: "789", Value: "789", }, }, }, }, }, },} When user select a given option, Botkube runs an associated command and appends selected option at the end. For **BAR** it's `msg selects two-gropus BAR`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. ### Input text fields[​](#input-text-fields"DirectlinktoInputtextfields") + cmdPrefix := func(cmd string) string { return fmt.Sprintf("%s %s %s", api.MessageBotNamePlaceholder, pluginName, cmd)}msg := api.Message{ Sections: []api.Section{ { Selects: api.Selects{ ID: "select-id", Items: []api.Select{ { Name: "two-groups", Command: cmdPrefix("selects two-groups"), OptionGroups: []api.OptionGroup{ { Name: cmdPrefix("selects two-groups/1"), Options: []api.OptionItem{ {Name: "BAR", Value: "BAR"}, {Name: "BAZ", Value: "BAZ"}, {Name: "XYZ", Value: "XYZ"}, }, }, { Name: cmdPrefix("selects two-groups/2"), Options: []api.OptionItem{ {Name: "123", Value: "123"}, {Name: "456", Value: "456"}, {Name: "789", Value: "789"}, }, }, }, // MUST be defined also under OptionGroups.Options slice. InitialOption: &api.OptionItem{ Name: "789", Value: "789", }, }, }, }, }, },} + +When user select a given option, Botkube runs an associated command and appends selected option at the end. For **BAR** it's `msg selects two-gropus BAR`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. + +### Input text fields[​](#input-text-fields "Direct link to Input text fields") + + msg := api.Message{ PlaintextInputs: []api.LabelInput{ { Command: fmt.Sprintf("%s %s input-text", api.MessageBotNamePlaceholder, pluginName), DispatchedAction: api.DispatchInputActionOnEnter, Placeholder: "String pattern to filter by", Text: "Filter output", }, },} + +When user types an input string and clicks enter, Botkube runs an associated command and appends input text in quotes. For example, for input **"text"** it's `msg input-text "test"`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. -msg := api.Message{ PlaintextInputs: []api.LabelInput{ { Command: fmt.Sprintf("%s %s input-text", api.MessageBotNamePlaceholder, pluginName), DispatchedAction: api.DispatchInputActionOnEnter, Placeholder: "String pattern to filter by", Text: "Filter output", }, },} When user types an input string and clicks enter, Botkube runs an associated command and appends input text in quotes. For example, for input **"text"** it's `msg input-text "test"`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. Message visibility[​](#message-visibility"DirectlinktoMessagevisibility") +Message visibility[​](#message-visibility "Direct link to Message visibility") ------------------------------------------------------------------------------ If the interactivity is enabled, you can change the default message visibility options: diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__local-testing.md b/hack/assistant-setup/content/docs.botkube.io__plugin__local-testing.md index 270e9a53..d6641656 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__local-testing.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__local-testing.md @@ -12,39 +12,50 @@ This document describes steps for running Botkube core locally together with a l **Steps** 1. Follow steps from [`CONTRIBUTING.md`](https://github.com/kubeshop/botkube/blob/main/CONTRIBUTING.md#build-and-run-locally) about running Botkube locally. - + 2. Create a file with your plugins' repository, plugin configuration and bindings for enabled communication platform: - -plugins: repositories: local-repo: url: http://localhost:8080/plugins-index.yamlexecutors: "plugins": local-repo/executor-name: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.sources: "plugins": local-repo/source-name: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.communications: # Enable a given communication platform and define bindings to a given executor and source plugins. For example, for Slack and example `echo` and `ticker` plugins, provide `appToken` and `botToken` and run the script: Create /tmp/config-values.yaml 3. In your plugin project directory, start a static plugin server: # Use https://github.com/vercel/servenpx serve --listen 8080 note If Botkube runs on external Kubernetes cluster, you can use the tunneling software, for example [`ngrok`](https://ngrok.com/). It creates an externally addressable URL for a port you open locally on your machine. - + + plugins: repositories: local-repo: url: http://localhost:8080/plugins-index.yamlexecutors: "plugins": local-repo/executor-name: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.sources: "plugins": local-repo/source-name: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.communications: # Enable a given communication platform and define bindings to a given executor and source plugins. + + For example, for Slack and example `echo` and `ticker` plugins, provide `appToken` and `botToken` and run the script: + + Create /tmp/config-values.yaml +3. In your plugin project directory, start a static plugin server: + + # Use https://github.com/vercel/servenpx serve --listen 8080 + + note + + If Botkube runs on external Kubernetes cluster, you can use the tunneling software, for example [`ngrok`](https://ngrok.com/). It creates an externally addressable URL for a port you open locally on your machine. + 4. In your plugin project directory open a new terminal window. - + 5. Export Botkube plugins cache directory: - -export BOTKUBE_PLUGINS_CACHE__DIR="/tmp/plugins" - + + export BOTKUBE_PLUGINS_CACHE__DIR="/tmp/plugins" + 6. Export Botkube repository path cloned in the first step: - -export BOTKUBE_REPO_PATH={botkube_repo_path} - + + export BOTKUBE_REPO_PATH={botkube_repo_path} + 7. Export configuration files: - -export BOTKUBE_CONFIG_PATHS="${BOTKUBE_REPO_PATH}/helm/botkube/values.yaml,/tmp/config-values.yaml" - + + export BOTKUBE_CONFIG_PATHS="${BOTKUBE_REPO_PATH}/helm/botkube/values.yaml,/tmp/config-values.yaml" + 8. Build plugins and start Botkube: - -note - -Each time you change a plugin source code, re-run the above command. - + + note + + Each time you change a plugin source code, re-run the above command. + * For scratch projects * For projects created from template repository 1. Download index builder: -go get github.com/kubeshop/botkube/hack + go get github.com/kubeshop/botkube/hack 2. Build plugins and run Botkube: -# rebuild plugins only for current GOOS and GOARCHgoreleaser build --rm-dist --snapshot --single-target &&# regenerate indexgo run github.com/kubeshop/botkube/hack -binaries-path "./dist" -url-base-path "http://localhost:8080/dist" -use-archive=false &&# remove cached pluginsrm -rf $BOTKUBE_PLUGINS_CACHE__DIR &&# start Botkube${BOTKUBE_REPO_PATH}/botkube + # rebuild plugins only for current GOOS and GOARCHgoreleaser build --rm-dist --snapshot --single-target &&# regenerate indexgo run github.com/kubeshop/botkube/hack -binaries-path "./dist" -url-base-path "http://localhost:8080/dist" -use-archive=false &&# remove cached pluginsrm -rf $BOTKUBE_PLUGINS_CACHE__DIR &&# start Botkube${BOTKUBE_REPO_PATH}/botkube diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__quick-start.md b/hack/assistant-setup/content/docs.botkube.io__plugin__quick-start.md index 32c0ca40..26bc66d2 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__quick-start.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__quick-start.md @@ -3,7 +3,8 @@ Title: Quick start | Botkube URL Source: https://docs.botkube.io/plugin/quick-start Markdown Content: -* [](https://docs.botkube.io/) * [Plugin Development](https://docs.botkube.io/plugin/) +* [](https://docs.botkube.io/) +* [Plugin Development](https://docs.botkube.io/plugin/) * Quick start Version: 1.10 @@ -19,41 +20,41 @@ and two example release jobs: * [GitHub releases](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/release.yml) * [GitHub Pages](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/pages-release.yml) -Use template[​](#use-template"DirectlinktoUsetemplate") +Use template[​](#use-template "Direct link to Use template") ------------------------------------------------------------ 1. Navigate to [`botkube-plugins-template`](https://github.com/kubeshop/botkube-plugins-template). - + 2. Click **"Use this template"**, next **"Create a new repository"** - -![Image 1: Create Repo](https://docs.botkube.io/assets/images/use-tpl-abd758819e831ddf629b4e4f42e9a452.png) - -This creates your own plugin repository with a single commit. - + + ![Image 1: Create Repo](https://docs.botkube.io/assets/images/use-tpl-abd758819e831ddf629b4e4f42e9a452.png) + + This creates your own plugin repository with a single commit. + 3. After a few seconds, the `.github/workflows/setup.yml` job will create a new commit. This job removes Kubeshop related files, such as: - -* `CONTRIBUTING.md` -* `CODE_OF_CONDUCT.md` -* `LICENSE` -* `SECURITY.md` -* `.github/CODEOWNERS` - -Additionally, it updates links in README.md to point to your own repository instead of Kubeshop's one. In case of job failure, you need to make and commit those changes manually. - -This job runs only once, later you can remove it or disable it. - + + * `CONTRIBUTING.md` + * `CODE_OF_CONDUCT.md` + * `LICENSE` + * `SECURITY.md` + * `.github/CODEOWNERS` + + Additionally, it updates links in README.md to point to your own repository instead of Kubeshop's one. In case of job failure, you need to make and commit those changes manually. + + This job runs only once, later you can remove it or disable it. + 4. Decide which release job you prefer, the GitHub releases, or GitHub pages. Once decided, remove one the above workflow in your new repository: - -* GitHub releases, defined at `.github/workflows/release.yml` in your GitHub repository. -* GitHub Pages, defined at `.github/workflows/pages-release.yml` in your GitHub repository. - -If you pick the GitHub Pages, a further configuration is needed: - -1. In project settings, enable [publishing GitHub Pages via GitHub Action](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow). -2. Adjust the `github-pages` deployment environment. You can either: -* remove the deployment environment if you don't need any protection rules -* add an environment protection rule so that you can deploy pages on each new tag. If you use tagging like `vX.Y.Z`, you can add the `v*` rule. As an alternative, can select **All branches** from the dropdown. + + * GitHub releases, defined at `.github/workflows/release.yml` in your GitHub repository. + * GitHub Pages, defined at `.github/workflows/pages-release.yml` in your GitHub repository. + + If you pick the GitHub Pages, a further configuration is needed: + + 1. In project settings, enable [publishing GitHub Pages via GitHub Action](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow). + 2. Adjust the `github-pages` deployment environment. You can either: + * remove the deployment environment if you don't need any protection rules + * add an environment protection rule so that you can deploy pages on each new tag. If you use tagging like `vX.Y.Z`, you can add the `v*` rule. As an alternative, can select **All branches** from the dropdown. 5. Add LICENSE file and update the README.md file to describe the plugins that you created. - + [Previous Plugin Development](https://docs.botkube.io/plugin/)[Next Custom executor](https://docs.botkube.io/plugin/custom-executor) diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__repo.md b/hack/assistant-setup/content/docs.botkube.io__plugin__repo.md index 65ac40e0..54d1b78c 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__repo.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__repo.md @@ -14,11 +14,11 @@ Your plugin repository must contain at least one index file and one plugin binar In the index file, provide an entry for every plugin from your plugin repository. The index file must have the following syntax: -entries: - name: { plugin_name } type: { plugin_type } # executor or source description: { plugin_description } version: { plugin_version } urls: - url: { url_to_plugin_binary } platform: os: { plugin_operating_system } # darwin or linux architecture: { plugin_architecture } # amd64 or arm64 dependencies: # optional dependencies { dependency_name }: url: { url_to_dependency_binary } + entries: - name: { plugin_name } type: { plugin_type } # executor or source description: { plugin_description } version: { plugin_version } urls: - url: { url_to_plugin_binary } platform: os: { plugin_operating_system } # darwin or linux architecture: { plugin_architecture } # amd64 or arm64 dependencies: # optional dependencies { dependency_name }: url: { url_to_dependency_binary } It is not required to host a plugin or dependency binary on the same server as the index file. -Generate index file[​](#generate-index-file"DirectlinktoGenerateindexfile") +Generate index file[​](#generate-index-file "Direct link to Generate index file") --------------------------------------------------------------------------------- You can create the index file by yourself our use our tool to generate it automatically based on the directory with plugins binaries. The binaries must be named according to the following pattern: @@ -29,41 +29,41 @@ You can create the index file by yourself our use our tool to generate it automa **Steps** 1. In your plugin repository, add `tools.go`: - -cat << EOF > tools.go//go:build toolspackage toolsimport ( _ "github.com/kubeshop/botkube/hack")EOF - + + cat << EOF > tools.go//go:build toolspackage toolsimport ( _ "github.com/kubeshop/botkube/hack")EOF + 2. Refresh dependencies: - + 3. Build all your plugins. See [**Build plugin binaries**](https://docs.botkube.io/plugin/custom-executor). - + 4. Generate an index file: - -go run github.com/kubeshop/botkube/hack -binaries-path "./dist" -url-base-path "https://example.com" - -info - -Replace the `-url-base-path` flag with the base path of your HTTP server. See [**Hosting plugins**](#host-plugins) for some examples. - + + go run github.com/kubeshop/botkube/hack -binaries-path "./dist" -url-base-path "https://example.com" + + info + + Replace the `-url-base-path` flag with the base path of your HTTP server. See [**Hosting plugins**](#host-plugins) for some examples. + Host plugins ------------ This section describes example ways for serving Botkube plugins. -GitHub releases[​](#github-releases"DirectlinktoGitHubreleases") +GitHub releases[​](#github-releases "Direct link to GitHub releases") --------------------------------------------------------------------- A GitHub release allows you to upload additional assets that are later accessible with a predictable URL. When you generate the index file, specify the `-url-base-path` flag as `https://github.com/{owner}/{repo}/releases/download/{release_tag}`, for example, `https://github.com/kubeshop/botkube/releases/download/v1.0.0`. Once the plugin binaries are built and the index file is generated, you can create a GitHub release using [GitHub CLI](https://cli.github.com/). For example: -gh release create v1.0.0 \ ./dist/source_* \ ./dist/executor_* \ ./plugins-index.yaml + gh release create v1.0.0 \ ./dist/source_* \ ./dist/executor_* \ ./plugins-index.yaml -### Automation[​](#automation"DirectlinktoAutomation") +### Automation[​](#automation "Direct link to Automation") You can use [GitHub Actions](https://docs.github.com/en/actions) to publish Botkube plugins automatically each time a new tag is pushed. See the [`release` workflow](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/release.yml) on the `botkube-plugins-template` repository for the out-of-the-box solution, which you can use and modify if needed. -GitHub pages[​](#github-pages"DirectlinktoGitHubpages") +GitHub pages[​](#github-pages "Direct link to GitHub pages") ------------------------------------------------------------ GitHub allows you to serve static pages via GitHub Pages. When you generate the index file, specify the `-url-base-path` flag as `https://{user}.github.io/{repository}`, for example, `https://kubeshop.github.io/botkube-plugins`. @@ -71,46 +71,46 @@ GitHub allows you to serve static pages via GitHub Pages. When you generate the **Initial setup** 1. Navigate to the Git repository with your plugins. - + 2. Create the `gh-pages` branch: - -git switch --orphan gh-pagesgit commit --allow-empty -m "Initialization commit"git push -u origin gh-pages - + + git switch --orphan gh-pagesgit commit --allow-empty -m "Initialization commit"git push -u origin gh-pages + 3. Follow [this](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-from-a-branch) guide to make sure your `gh-pages` branch is set as the source for GitHub Pages. - + **Publishing steps** 1. Clone `gh-pages` into `/tmp/botkube-plugins`: - -git clone -b gh-pages "https://github.com/{owner}/{repo}.git" /tmp/botkube-plugins - + + git clone -b gh-pages "https://github.com/{owner}/{repo}.git" /tmp/botkube-plugins + 2. Move built binaries and generated index file: - -mv dist/executor_* /tmp/botkube-plugins/mv dist/source_* /tmp/botkube-plugins/mv plugins-index.yaml /tmp/botkube-plugins - + + mv dist/executor_* /tmp/botkube-plugins/mv dist/source_* /tmp/botkube-plugins/mv plugins-index.yaml /tmp/botkube-plugins + 3. Commit and push copied files: - -cd /tmp/botkube-pluginsgit add -Agit commit -m "Release Botkube plugins"git push - + + cd /tmp/botkube-pluginsgit add -Agit commit -m "Release Botkube plugins"git push + 4. Remove cloned `gh-pages`: - -cd -rm -rf /tmp/botkube-charts - + + cd -rm -rf /tmp/botkube-charts + In such setup, you can use your default branch to store your plugins code, and the `gh-pages` branch as a plugin repository. -### Automation[​](#automation-1"DirectlinktoAutomation") +### Automation[​](#automation-1 "Direct link to Automation") You can use [GitHub Actions](https://docs.github.com/en/actions) to publish Botkube plugins automatically each time a new tag is pushed. See the [`pages-release` workflow](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/pages-release.yml) on the `botkube-plugins-template` repository for the out-of-the-box solution, which you can use and modify if needed. -Use hosted plugins[​](#use-hosted-plugins"DirectlinktoUsehostedplugins") +Use hosted plugins[​](#use-hosted-plugins "Direct link to Use hosted plugins") ------------------------------------------------------------------------------ To use the plugins that you published, add your repository under `plugins` in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file for a given Botkube deployment. For example: -plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml + plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml Once the plugin repository is added, you can refer to it in the `executor` or `sources` section. -executors: "plugins": repo-name/executor-name@v1.0.0: # Plugin name syntax: {repo}/{plugin}[@{version}]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.sources: "plugins": repo-name/source-name@v1.0.0: # Plugin name syntax: {repo}/{plugin}[@{version}]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration. + executors: "plugins": repo-name/executor-name@v1.0.0: # Plugin name syntax: {repo}/{plugin}[@{version}]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.sources: "plugins": repo-name/source-name@v1.0.0: # Plugin name syntax: {repo}/{plugin}[@{version}]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__troubleshooting.md.md b/hack/assistant-setup/content/docs.botkube.io__plugin__troubleshooting.md.md index 46ea6d00..c16e171d 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__troubleshooting.md.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__troubleshooting.md.md @@ -7,7 +7,7 @@ Version: 1.10 This document describes how to identify and resolve issues that might occur. -### Missing source events[​](#missing-source-events"DirectlinktoMissingsourceevents") +### Missing source events[​](#missing-source-events "Direct link to Missing source events") **Symptoms** @@ -16,11 +16,20 @@ You don't get event message on a given communication platform even though the ev **Debugging steps** * [Enable debugging mode for a given plugin](https://docs.botkube.io/plugin/debugging). Once enabled, check the Botkube logs. You can filter them by your plugin name. You should see information about downloading and starting your source. For example: - -INFO[2023-01-09T21:21:24+01:00] Starting Plugin Manager for all enabled plugins component="Plugin Manager" enabledSources=botkube/cm-watcherINFO[2023-01-09T21:21:24+01:00] Downloading plugin. binPath=/tmp/plugins/botkube/source_v0.13.0_cm-watcher component="Plugin Manager" url="http://host.k3d.internal:3000/static/source_cm-watcher_darwin_amd64"INFO[2023-01-09T21:21:24+01:00] source plugin registered successfully. binPath=/tmp/plugins/botkube/source_v0.13.0_cm-watcher component="Plugin Manager" plugin=botkube/cm-watcher version=v0.13.0INFO[2023-01-09T21:21:25+01:00] Start source streaming... pluginName=botkube/cm-watcher sources="[plugin-based]" If you don't see any of the above log messages: * Make sure that `source.{group_name}.{plugin_name}.enabled` property is set to `true` * Make sure that a given source configuration (`sources.{group_name}`) is bind to a given communication platform (`bindings.sources: [{group_name}]`) If the source is not bound to any communication platform Botkube will not download and start such plugin. Even if it's enabled. * [Make sure that your plugin didn't crash](#plugin-process-exited). - - -### Missing executor response[​](#missing-executor-response"DirectlinktoMissingexecutorresponse") + + INFO[2023-01-09T21:21:24+01:00] Starting Plugin Manager for all enabled plugins component="Plugin Manager" enabledSources=botkube/cm-watcherINFO[2023-01-09T21:21:24+01:00] Downloading plugin. binPath=/tmp/plugins/botkube/source_v0.13.0_cm-watcher component="Plugin Manager" url="http://host.k3d.internal:3000/static/source_cm-watcher_darwin_amd64"INFO[2023-01-09T21:21:24+01:00] source plugin registered successfully. binPath=/tmp/plugins/botkube/source_v0.13.0_cm-watcher component="Plugin Manager" plugin=botkube/cm-watcher version=v0.13.0INFO[2023-01-09T21:21:25+01:00] Start source streaming... pluginName=botkube/cm-watcher sources="[plugin-based]" + + If you don't see any of the above log messages: + + * Make sure that `source.{group_name}.{plugin_name}.enabled` property is set to `true` + * Make sure that a given source configuration (`sources.{group_name}`) is bind to a given communication platform (`bindings.sources: [{group_name}]`) + + If the source is not bound to any communication platform Botkube will not download and start such plugin. Even if it's enabled. + +* [Make sure that your plugin didn't crash](#plugin-process-exited). + + +### Missing executor response[​](#missing-executor-response "Direct link to Missing executor response") **Symptoms** @@ -29,32 +38,45 @@ You run a given executor command in a chat window, but you don't get any respons **Debugging steps** * [Enable debugging mode for a given plugin](https://docs.botkube.io/plugin/debugging). Once enabled, run a given executor command once again, and check the Botkube logs. You can filter them by your plugin name. You should see information about downloading and registering your executor. For example: - -INFO[2023-01-09T21:21:24+01:00] Starting Plugin Manager for all enabled plugins component="Plugin Manager" enabledExecutors=botkube/echoINFO[2023-01-09T21:21:24+01:00] Downloading plugin. binPath=/tmp/plugins/botkube/executor_v0.13.0_echo component="Plugin Manager" url="http://host.k3d.internal:3000/static/executor_echo_darwin_amd64"INFO[2023-01-09T21:21:24+01:00] executor plugin registered successfully. binPath=/tmp/plugins/botkube/executor_v0.13.0_echo component="Plugin Manager" plugin=botkube/echo version=v0.13.0 If you don't see any of the above log messages: * Make sure that `executors.{group_name}.{plugin_name}.enabled` property is set to `true` * Make sure that a given executor configuration (`executors.{group_name}`) is bind to a given communication platform (`bindings.executors: [{group_name}]`) If the executor is not bound to any communication platform Botkube will not download and start such plugin. Even if it's enabled. * [Make sure that your plugin didn't crash](#plugin-process-exited). - - -### Plugin process exited[​](#plugin-process-exited"DirectlinktoPluginprocessexited") + + INFO[2023-01-09T21:21:24+01:00] Starting Plugin Manager for all enabled plugins component="Plugin Manager" enabledExecutors=botkube/echoINFO[2023-01-09T21:21:24+01:00] Downloading plugin. binPath=/tmp/plugins/botkube/executor_v0.13.0_echo component="Plugin Manager" url="http://host.k3d.internal:3000/static/executor_echo_darwin_amd64"INFO[2023-01-09T21:21:24+01:00] executor plugin registered successfully. binPath=/tmp/plugins/botkube/executor_v0.13.0_echo component="Plugin Manager" plugin=botkube/echo version=v0.13.0 + + If you don't see any of the above log messages: + + * Make sure that `executors.{group_name}.{plugin_name}.enabled` property is set to `true` + * Make sure that a given executor configuration (`executors.{group_name}`) is bind to a given communication platform (`bindings.executors: [{group_name}]`) + + If the executor is not bound to any communication platform Botkube will not download and start such plugin. Even if it's enabled. + +* [Make sure that your plugin didn't crash](#plugin-process-exited). + + +### Plugin process exited[​](#plugin-process-exited "Direct link to Plugin process exited") **Symptoms** In Botkube logs, you see an error similar to: -ERRO[2023-01-09T21:21:25+01:00] plugin process exited error="exit status 1" path=/tmp/plugins/botkube/executor_v0.13.0_echo pid=71127 plugin=botkube/echo **Solution** It means that your plugin exited once it was started by Botkube [plugin manager](https://docs.botkube.io/architecture/#plugin-manager). To start your plugin again, you need to restart the Botkube core process, as crashed plugins aren't restarted automatically. This issue is tracked in [botkube#878](https://github.com/kubeshop/botkube/issues/878). You need to make sure that our plugin doesn't exit once it's started. You should return each error on Botkube plugin interface, instead of crashing your application. To see your plugin standard output [set the `debug` for a given plugin](https://docs.botkube.io/plugin/debugging). + ERRO[2023-01-09T21:21:25+01:00] plugin process exited error="exit status 1" path=/tmp/plugins/botkube/executor_v0.13.0_echo pid=71127 plugin=botkube/echo + +**Solution** + +It means that your plugin exited once it was started by Botkube [plugin manager](https://docs.botkube.io/architecture/#plugin-manager). To start your plugin again, you need to restart the Botkube core process, as crashed plugins aren't restarted automatically. This issue is tracked in [botkube#878](https://github.com/kubeshop/botkube/issues/878). You need to make sure that our plugin doesn't exit once it's started. You should return each error on Botkube plugin interface, instead of crashing your application. To see your plugin standard output [set the `debug` for a given plugin](https://docs.botkube.io/plugin/debugging). -### Plugin not found error[​](#plugin-not-found-error"DirectlinktoPluginnotfounderror") +### Plugin not found error[​](#plugin-not-found-error "Direct link to Plugin not found error") **Symptoms** In Botkube logs, you see an error similar to: -2023/01/09 21:37:04 while starting plugins manager: not found source plugin called "cm-test" in "botkube" repository + 2023/01/09 21:37:04 while starting plugins manager: not found source plugin called "cm-test" in "botkube" repository **Debugging steps** * Make sure that a given repository is defined under `plugins.repository`. * Check that a given entry is defined in a given repository index file. You should find under `entries` a plugin with a given name, version and type (source or executor). -### Botkube is killed by readiness probe while downloading plugins[​](#botkube-is-killed-by-readiness-probe-while-downloading-plugins"DirectlinktoBotkubeiskilledbyreadinessprobewhiledownloadingplugins") +### Botkube is killed by readiness probe while downloading plugins[​](#botkube-is-killed-by-readiness-probe-while-downloading-plugins "Direct link to Botkube is killed by readiness probe while downloading plugins") **Symptoms** @@ -64,4 +86,4 @@ In environments with low internet bandwidth Botkube might get killed by the read To increase the wait time of the readiness probe, you need to set the `initialDelaySeconds` property in [values.yaml](https://github.com/kubeshop/botkube/blob/9e450fb63666b03118ee51fcf9b7eb6c3b74cbcf/helm/botkube/values.yaml#L794-L821) to a higher value. For example: ---set deployment.readinessProbe.initialDelaySeconds=180 + --set deployment.readinessProbe.initialDelaySeconds=180 diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__using-kubeconfig.md b/hack/assistant-setup/content/docs.botkube.io__plugin__using-kubeconfig.md index 6b2b47c0..b72bea16 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugin__using-kubeconfig.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__using-kubeconfig.md @@ -7,6 +7,6 @@ You can request Botkube to generate and pass kubeconfig file to your plugin by a The kubeconfig is available in `executor.ExecuteInput` as a slice of bytes. There are two options to instantiate a Kubernetes Go client with this config. -import ( "context" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/kubernetes" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")func (ReaderExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { config, err := clientcmd.RESTConfigFromKubeConfig(in.Context.KubeConfig) if err != nil { return executor.ExecuteOutput{}, err } clientset, err := kubernetes.NewForConfig(config) if err != nil { return executor.ExecuteOutput{}, err } ...} + import ( "context" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/kubernetes" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")func (ReaderExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { config, err := clientcmd.RESTConfigFromKubeConfig(in.Context.KubeConfig) if err != nil { return executor.ExecuteOutput{}, err } clientset, err := kubernetes.NewForConfig(config) if err != nil { return executor.ExecuteOutput{}, err } ...} -import ( "context" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/kubernetes" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")func (ReaderExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { kubeConfigPath, deleteFn, err := pluginx.PersistKubeConfig(ctx, in.Context.KubeConfig) if err != nil { return executor.ExecuteOutput{}, fmt.Errorf("while writing kubeconfig file: %w", err) } defer func() { if deleteErr := deleteFn(ctx); deleteErr != nil { fmt.Fprintf(os.Stderr, "failed to delete kubeconfig file %s: %v", kubeConfigPath, deleteErr) } }() config, err := clientcmd.BuildConfigFromFlags("", kubeConfigPath) if err != nil { return executor.ExecuteOutput{}, err } clientset, err := kubernetes.NewForConfig(config) if err != nil { return executor.ExecuteOutput{}, err } ...} + import ( "context" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/kubernetes" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")func (ReaderExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { kubeConfigPath, deleteFn, err := pluginx.PersistKubeConfig(ctx, in.Context.KubeConfig) if err != nil { return executor.ExecuteOutput{}, fmt.Errorf("while writing kubeconfig file: %w", err) } defer func() { if deleteErr := deleteFn(ctx); deleteErr != nil { fmt.Fprintf(os.Stderr, "failed to delete kubeconfig file %s: %v", kubeConfigPath, deleteErr) } }() config, err := clientcmd.BuildConfigFromFlags("", kubeConfigPath) if err != nil { return executor.ExecuteOutput{}, err } clientset, err := kubernetes.NewForConfig(config) if err != nil { return executor.ExecuteOutput{}, err } ...} diff --git a/hack/assistant-setup/content/docs.botkube.io__telemetry.md b/hack/assistant-setup/content/docs.botkube.io__telemetry.md index cda68c13..7e50ea0b 100644 --- a/hack/assistant-setup/content/docs.botkube.io__telemetry.md +++ b/hack/assistant-setup/content/docs.botkube.io__telemetry.md @@ -3,30 +3,30 @@ Title: Telemetry | Botkube URL Source: https://docs.botkube.io/telemetry/ Markdown Content: -### What data we collect[​](#what-data-we-collect"DirectlinktoWhatdatawecollect") +### What data we collect[​](#what-data-we-collect "Direct link to What data we collect") The analytics data we collect is limited to: * Botkube Agent version, - + * Kubernetes version, - + * Number of cluster nodes (control plane and worker nodes count), - + * Names of enabled integrations (notifiers and bots), - + * Handled events in anonymized form, grouped by the integration (communication platform) name. - -For each event, we collect its type (e.g. `create` or `delete`), resource API Version and resource Kind. Any custom resource API groups or Kinds are excluded from the analytics collection. - + + For each event, we collect its type (e.g. `create` or `delete`), resource API Version and resource Kind. Any custom resource API groups or Kinds are excluded from the analytics collection. + * Executed commands in anonymized form. - -For `kubectl` commands, only the command verb is collected. Resource name and namespace are excluded from the analytics collection. - + + For `kubectl` commands, only the command verb is collected. Resource name and namespace are excluded from the analytics collection. + * Enabled plugin names and anonymized RBAC configuration. - + * App errors (crashes, configuration and notification errors). - + As an anonymous cluster identifier, we use the `uid` of `kube-system` Namespace. @@ -38,13 +38,13 @@ Botkube CLI tool collects: * Anonymous machine ID from [machineid](https://github.com/denisbrodbeck/machineid) library, * Executed command names, such as `login`, `install`, etc. -### How to opt out[​](#how-to-opt-out"DirectlinktoHowtooptout") +### How to opt out[​](#how-to-opt-out "Direct link to How to opt out") To disable sending the anonymous analytics, provide the `analytics.disable: true` override during Helm chart installation or upgrade. See the [Helm chart parameters](https://docs.botkube.io/configuration/helm-chart-parameters/#values) for more details about Helm chart configuration. To disable sending the anonymous analytics for Botkube CLI, execute the command -botkube telemetry disable + botkube telemetry disable This configuration will be stored locally in `~/.botkube/config.json` file, if this file is deleted, the telemetry will be enabled again. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage.md b/hack/assistant-setup/content/docs.botkube.io__usage.md index 1f6b1504..7d5adca0 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage.md @@ -5,12 +5,12 @@ URL Source: https://docs.botkube.io/usage/ Markdown Content: Botkube allows you to monitor your Kubernetes cluster, as well as debug and troubleshoot your workloads. -See all available commands[​](#see-all-available-commands"DirectlinktoSeeallavailablecommands") +See all available commands[​](#see-all-available-commands "Direct link to See all available commands") ------------------------------------------------------------------------------------------------------ Run `@Botkube help` to find information about the supported commands. -Check Botkube status[​](#check-botkube-status"DirectlinktoCheckBotkubestatus") +Check Botkube status[​](#check-botkube-status "Direct link to Check Botkube status") ------------------------------------------------------------------------------------ Run `@Botkube ping` to the channel where Botkube is added. The Botkube will respond you with the **pong** message from all the configured clusters. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__automated-actions.md b/hack/assistant-setup/content/docs.botkube.io__usage__automated-actions.md index 3355b93a..e0bed549 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage__automated-actions.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage__automated-actions.md @@ -5,18 +5,18 @@ URL Source: https://docs.botkube.io/usage/automated-actions Markdown Content: Actions allow you to automate your workflows by executing custom commands based on specific events. To read how to configure actions, see the [Action](https://docs.botkube.io/configuration/action) configuration document. -Manage actions[​](#manage-actions"DirectlinktoManageactions") +Manage actions[​](#manage-actions "Direct link to Manage actions") ------------------------------------------------------------------ Botkube allows you to manage actions using `@Botkube` commands. -### List available actions[​](#list-available-actions"DirectlinktoListavailableactions") +### List available actions[​](#list-available-actions "Direct link to List available actions") Run `@Botkube list actions` to get list of configured actions and their running status: ![Image 1: List available actions](https://docs.botkube.io/assets/images/list-actions-e1d1d86e622d7a10077d5347958a3559.png) -### Disable action[​](#disable-action"DirectlinktoDisableaction") +### Disable action[​](#disable-action "Direct link to Disable action") Run `@Botkube disable action {action-name}` to disable an action named `{action-name}`. The action settings are persisted across Botkube app restarts. @@ -24,7 +24,7 @@ Run `@Botkube disable action {action-name}` to disable an action named `{action- When you disable an action, changes are applied once the Botkube is restarted. It is an automated process which usually takes a few seconds. -### Enable action[​](#enable-action"DirectlinktoEnableaction") +### Enable action[​](#enable-action "Direct link to Enable action") Run `@Botkube enable action {action-name}` to enable an action named `{action-name}`. The action settings are persisted across Botkube app restarts. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__event-notifications.md b/hack/assistant-setup/content/docs.botkube.io__usage__event-notifications.md index 5c172ceb..7c7c622f 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage__event-notifications.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage__event-notifications.md @@ -5,7 +5,7 @@ URL Source: https://docs.botkube.io/usage/event-notifications Markdown Content: Botkube sends notifications according to the [sources](https://docs.botkube.io/configuration/source/) configuration. -Actionable notifications[​](#actionable-notifications"DirectlinktoActionablenotifications") +Actionable notifications[​](#actionable-notifications "Direct link to Actionable notifications") ------------------------------------------------------------------------------------------------ If you have [`kubectl` executor enabled](https://docs.botkube.io/next/configuration/executor/kubectl) for a given channel, you can run commands related to a resource from the notification itself. Use the dropdown on the left to select and run a given command: @@ -18,42 +18,42 @@ info Actionable notifications are only available for the [Slack](https://docs.botkube.io/installation/slack/) and [Microsoft Teams](https://docs.botkube.io/installation/teams/) platforms that supports interactive messages. Currently, only a selected list of commands are supported, such as `describe`, `get`, or `logs`. -Managing notifications[​](#managing-notifications"DirectlinktoManagingnotifications") +Managing notifications[​](#managing-notifications "Direct link to Managing notifications") ------------------------------------------------------------------------------------------ Depending upon your configuration, you will receive notifications about Kubernetes resources lifecycle events and their health. Botkube bot allows you to enable/disable notifications on each configured channel separately. Run `@Botkube help`, the bot will reply with the help message about the supported message formats. -### View Botkube configuration[​](#view-botkube-configuration"DirectlinktoViewBotkubeconfiguration") +### View Botkube configuration[​](#view-botkube-configuration "Direct link to View Botkube configuration") Run `@Botkube show config` message from the configured channel where Botkube is added. The bot will reply to you with the configuration with which the controller is running. To see how to update the configuration, see the [Updating the configuration](https://docs.botkube.io/configuration/#updating-the-configuration) section in the Configuration document. -### Change notification sources[​](#change-notification-sources"DirectlinktoChangenotificationsources") +### Change notification sources[​](#change-notification-sources "Direct link to Change notification sources") To change the notification sources, you can: * run `@Botkube edit SourceBindings` command from the configured channel where Botkube is added. - -When you save the new notification sources, changes are applied once the Botkube is restarted. It is an automated process which usually takes a few seconds. - + + When you save the new notification sources, changes are applied once the Botkube is restarted. It is an automated process which usually takes a few seconds. + * For Botkube Cloud: edit Botkube Instance configuration in the Botkube Cloud dashboard. - + * For self-hosted installations: run `helm upgrade` with updated installation command. + - -### Disable notifications[​](#disable-notifications"DirectlinktoDisablenotifications") +### Disable notifications[​](#disable-notifications "Direct link to Disable notifications") If you want to stop receiving notifications from Botkube, run `@Botkube disable notifications` from the configured channel where Botkube is added. You will no longer receive notifications from the Botkube in a given communication platform. The notification settings are persisted across Botkube app restarts. -### Enable notifications[​](#enable-notifications"DirectlinktoEnablenotifications") +### Enable notifications[​](#enable-notifications "Direct link to Enable notifications") If you want to receive Botkube notifications again, run `@Botkube enable notifications` from the configured channel where Botkube is added. The notification settings are persisted across Botkube app restarts. -### Check notifications status[​](#check-notifications-status"DirectlinktoChecknotificationsstatus") +### Check notifications status[​](#check-notifications-status "Direct link to Check notifications status") Run `@Botkube status notifications` to check if notifications are enabled for a given communication platform. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor.md index 7bef7998..4acf4529 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage__executor.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor.md @@ -7,7 +7,7 @@ While deploying Botkube, you can specify which [executors](https://docs.botkube. To check which executors are enabled, and get the aliases configured for them, run `@Botkube list executors`. -Aliases[​](#aliases"DirectlinktoAliases") +Aliases[​](#aliases "Direct link to Aliases") --------------------------------------------- Alias is a shortcut for a longer command or just a part of it. It can be defined for all commands, including executor plugins and built-in Botkube commands. When you use an alias, the command is replaced with the underlying command before executing it. For example, `@Botkube k get pods` is replaced with `@Botkube kubectl get pods` before executing it. @@ -26,7 +26,7 @@ Aliases are defined globally for the whole Botkube installation. To see which al To learn how to configure aliases and see the default configuration, see the [Alias](https://docs.botkube.io/configuration/alias) section. -Specify cluster name[​](#specify-cluster-name"DirectlinktoSpecifyclustername") +Specify cluster name[​](#specify-cluster-name "Direct link to Specify cluster name") ------------------------------------------------------------------------------------ danger @@ -39,13 +39,13 @@ To get the list of all clusters configured in botkube, you can use the ping comm For cluster-specific response, use `--cluster-name` flag to specify the cluster's name on which command needs to be executed. Use of this flag allows you to get response from any channel or group where Botkube is added. The flag is ignored in notifier commands as they can be executed from the configured channel only. -Filtering text output[​](#filtering-text-output"DirectlinktoFilteringtextoutput") +Filtering text output[​](#filtering-text-output "Direct link to Filtering text output") --------------------------------------------------------------------------------------- Use the `--filter` flag to filter the output of Botkube executor commands. This returns any lines matching the flag's provided value. The `--filter` flag uses simple string matching. And, only works for Botkube executor commands that return text output, e.g. `kubectl` or `list executors` commands. -### Filtering `kubectl` output[​](#filtering-kubectl-output"Directlinktofiltering-kubectl-output") +### Filtering `kubectl` output[​](#filtering-kubectl-output "Direct link to filtering-kubectl-output") ![Image 1: flag_filter_kubectl_get_nodes](https://docs.botkube.io/assets/images/flag_filter_kubectl_get_nodes-16a8e267dffa5c29c4f0cb53d549bbe9.png) ![Image 2: flag_filter_kubectl_logs](https://docs.botkube.io/assets/images/flag_filter_kubectl_logs-3740479b57c49363f90ba706f516d758.png) diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__exec.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__exec.md index 342e7c7d..90c84e9a 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage__executor__exec.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__exec.md @@ -26,27 +26,27 @@ In this context, the `x` stands for `extension` or `execution`. Usage ----- -Install CLI[​](#install-cli"DirectlinktoInstallCLI") +Install CLI[​](#install-cli "Direct link to Install CLI") --------------------------------------------------------- To install a given CLI binary directly from a chat window, run: -@Botkube x install {source} + @Botkube x install {source} For downloading binaries, the `eget` library is used. It supports multiple URL formats and is able to unpack archives and extract binaries from them. For more details, see the documentation on the [`eget`](https://github.com/zyedidia/eget) GitHub repository. -### Examples[​](#examples"DirectlinktoExamples") +### Examples[​](#examples "Direct link to Examples") * `@Botkube x install https://get.helm.sh/helm-v3.10.3-linux-amd64.tar.gz --file helm` * `@Botkube x install github.com/fluxcd/flux2` * `@Botkube x install https://github.com/rikatz/kubepug --asset kubepug_darwin_amd64.tar.gz` -Execute CLI[​](#execute-cli"DirectlinktoExecuteCLI") +Execute CLI[​](#execute-cli "Direct link to Execute CLI") --------------------------------------------------------- To execute a CLI command, run: -### Examples[​](#examples-1"DirectlinktoExamples") +### Examples[​](#examples-1 "Direct link to Examples") * `@Botkube x run helm list -A` * `@Botkube x run flux get sources git` @@ -60,7 +60,7 @@ Templates The `exec` plugin supports defining templates for executed commands. As a result, you can specify how to process the CLI output or define your own message response. -# An array of templates that define how to convert the command output into an interactive message.templates: - trigger: command: # Specifies the prefix of the command that triggers the template and the parser used to parse the output. # If specified, it has higher priority than the regex field. prefix: "helm list" # Specifies the regex that should match a given command # If specified, it has lower priority than the prefix field. regex: "regex: '^helm list(?:\s+(-A|-a))*\s?$'" # Specifies the message template type. type: "" # Message template depending on the selected type. message: { } + # An array of templates that define how to convert the command output into an interactive message.templates: - trigger: command: # Specifies the prefix of the command that triggers the template and the parser used to parse the output. # If specified, it has higher priority than the regex field. prefix: "helm list" # Specifies the regex that should match a given command # If specified, it has lower priority than the prefix field. regex: "regex: '^helm list(?:\s+(-A|-a))*\s?$'" # Specifies the message template type. type: "" # Message template depending on the selected type. message: { } Supported template types: @@ -70,57 +70,57 @@ Supported template types: Navigate to the [`exec`](https://github.com/kubeshop/botkube/tree/main/cmd/executor/x/templates) plugin directory to see official examples. -Table parser[​](#table-parser"DirectlinktoTableparser") +Table parser[​](#table-parser "Direct link to Table parser") ------------------------------------------------------------ The `parser:table:space` template knows how to convert space-separated tables into an interactive message. This allows you to select a single item from a dropdown and perform additional actions in the context of the selected item without typing anything. For example, such a table: -NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONpsql default 1 2023-04-27 19:30:48.042056 +0200 CEST deployed postgresql-12.2.7 15.2.0traefik kube-system 1 2023-04-19 20:58:57.709052559 +0000 UTC deployed traefik-10.19.300 2.6.2traefik-crd kube-system 1 2023-04-19 20:58:56.564578223 +0000 UTC deployed traefik-crd-10.19.300 + NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONpsql default 1 2023-04-27 19:30:48.042056 +0200 CEST deployed postgresql-12.2.7 15.2.0traefik kube-system 1 2023-04-19 20:58:57.709052559 +0000 UTC deployed traefik-10.19.300 2.6.2traefik-crd kube-system 1 2023-04-19 20:58:56.564578223 +0000 UTC deployed traefik-crd-10.19.300 is displayed as: -![Image 2: a screen shot of a gmail account with an email address](https://docs.botkube.io/assets/images/parsed-space-table-06a88b31df0278fe1d0add0a533cad39.png) +![Image 2](https://docs.botkube.io/assets/images/parsed-space-table-06a88b31df0278fe1d0add0a533cad39.png) The table output is parsed with the following rules: * All headers are normalized using the [`Title`](https://pkg.go.dev/golang.org/x/text/cases#Title) function. For example: - -* `APP VERSION` is `AppVersion` -* `NAME` is `Name` -* `namespace` is `Namespace` + + * `APP VERSION` is `AppVersion` + * `NAME` is `Name` + * `namespace` is `Namespace` * Empty cells are allowed, and they are printed as an empty string. - + By default, the first row is selected and displayed in the message. The `actions` and `preview` properties are rendered in the context of the selected row. -### Syntax[​](#syntax"DirectlinktoSyntax") +### Syntax[​](#syntax "Direct link to Syntax") Here is an example syntax that converts the `helm list -A` command into an interactive message: -type: "parser:table:space"message: # Creates a dropdown menu with a given name, where the items are generated using the `keyTpl` parameter. selects: - name: "Release" keyTpl: "{{ .Namespace }}/{{ .Name }}" # Defines additional actions that can be performed in the context of the selected item. In this example, the user can view notes, values, or delete the selected release. # optional actions: notes: "helm get notes {{ .Name }} -n {{ .Namespace }}" values: "helm get values {{ .Name }} -n {{ .Namespace }}" delete: "helm delete {{ .Name }} -n {{ .Namespace }}" # Displays a preview of the selected item. Fields `Name`, `Namespace`, `Status`, and `Chart` are generated using the output of the command. It's useful to display only important context. # optional preview: | Name: {{ .Name }} Namespace: {{ .Namespace }} Status: {{ .Status }} Chart: {{ .Chart }} + type: "parser:table:space"message: # Creates a dropdown menu with a given name, where the items are generated using the `keyTpl` parameter. selects: - name: "Release" keyTpl: "{{ .Namespace }}/{{ .Name }}" # Defines additional actions that can be performed in the context of the selected item. In this example, the user can view notes, values, or delete the selected release. # optional actions: notes: "helm get notes {{ .Name }} -n {{ .Namespace }}" values: "helm get values {{ .Name }} -n {{ .Namespace }}" delete: "helm delete {{ .Name }} -n {{ .Namespace }}" # Displays a preview of the selected item. Fields `Name`, `Namespace`, `Status`, and `Chart` are generated using the output of the command. It's useful to display only important context. # optional preview: | Name: {{ .Name }} Namespace: {{ .Namespace }} Status: {{ .Status }} Chart: {{ .Chart }} -Wrapper[​](#wrapper"DirectlinktoWrapper") +Wrapper[​](#wrapper "Direct link to Wrapper") --------------------------------------------- The wrapper template allows adding extra buttons to the CLI output without modifying the output itself. It's useful to attach some pre-defined commands. -### Syntax[​](#syntax-1"DirectlinktoSyntax") +### Syntax[​](#syntax-1 "Direct link to Syntax") Here is an example syntax to add two predefined buttons to a given output message: -type: "wrapper"message: buttons: - # Button name name: "Get Help" # URL to open on click. url: "https://example.com/help" - # Button name name: "Initialize" # Button command to run. Use `{{BotName}}` placeholder for commands that should be executed by Botkube command: "{{BotName}} x run flux install" # Button style, supported values: primary, danger style: "primary" + type: "wrapper"message: buttons: - # Button name name: "Get Help" # URL to open on click. url: "https://example.com/help" - # Button name name: "Initialize" # Button command to run. Use `{{BotName}}` placeholder for commands that should be executed by Botkube command: "{{BotName}} x run flux install" # Button style, supported values: primary, danger style: "primary" -Tutorial[​](#tutorial"DirectlinktoTutorial") +Tutorial[​](#tutorial "Direct link to Tutorial") ------------------------------------------------ The tutorial template allows you to define a custom response for a given command. For example, when the trigger command is set to `trigger.comand.prefix: "quickstart helm"` and a user types `@Botkube x run quickstart helm`, the command itself is not executed. Instead, a defined tutorial message is returned. ![Image 3: quickstart](https://docs.botkube.io/assets/images/x-quickstart-86393ed0336f9822d31c6ad970d586ce.png) -### Syntax[​](#syntax-2"DirectlinktoSyntax") +### Syntax[​](#syntax-2 "Direct link to Syntax") Here is an example syntax to return tutorial with two predefined buttons: -type: "tutorial"message: # Pagination rules paginate: # Maximum number of rendered buttons per page page: 5 # Message header header: "Helm Quick Start tutorial" # Tutorial steps that are rendered in a given order. buttons: - # Button name name: "Global Help" # Button description to display on the left side of the button. description: "{{BotName}} helm help" # Button command to run. Use `{{BotName}}` placeholder for commands that should be executed by Botkube command: "{{BotName}} x run helm help" - name: "Version" description: "{{BotName}} helm version" command: "{{BotName}} x run helm version" + type: "tutorial"message: # Pagination rules paginate: # Maximum number of rendered buttons per page page: 5 # Message header header: "Helm Quick Start tutorial" # Tutorial steps that are rendered in a given order. buttons: - # Button name name: "Global Help" # Button description to display on the left side of the button. description: "{{BotName}} helm help" # Button command to run. Use `{{BotName}}` placeholder for commands that should be executed by Botkube command: "{{BotName}} x run helm help" - name: "Version" description: "{{BotName}} helm version" command: "{{BotName}} x run helm version" diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__flux.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__flux.md index 61e223dd..49fac1fd 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage__executor__flux.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__flux.md @@ -17,19 +17,21 @@ Botkube offers seamless execution of Flux CLI commands within your Kubernetes cl To execute the `flux` CLI commands, send a message in the channel where Botkube is present. For example: -Interactive Usage[​](#interactive-usage"DirectlinktoInteractiveUsage") +Interactive Usage[​](#interactive-usage "Direct link to Interactive Usage") --------------------------------------------------------------------------- We have also incorporated interactivity (tables, etc.) to simplify running Flux CLI commands e.g. from mobile devices. ![Image 1: flux-interactivity](https://docs.botkube.io/assets/images/flux-interactivity-36eaec2696dd56fe8924ef36f42a7ac1.gif) -Simplified Kustomization Diffing Flow[​](#simplified-kustomization-diffing-flow"DirectlinktoSimplifiedKustomizationDiffingFlow") +Simplified Kustomization Diffing Flow[​](#simplified-kustomization-diffing-flow "Direct link to Simplified Kustomization Diffing Flow") --------------------------------------------------------------------------------------------------------------------------------------- With the Botkube Flux executor, you can execute a single command to perform a diff between a specific pull request and the cluster state. For instance: -@Botkube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch] ![Image 2: flux-diff](https://docs.botkube.io/assets/images/flux-diff-abdd97d5a1b5dd3b64ecf2c1712fa14d.gif) + @Botkube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch] + +![Image 2: flux-diff](https://docs.botkube.io/assets/images/flux-diff-abdd97d5a1b5dd3b64ecf2c1712fa14d.gif) This command automates several tasks: @@ -45,10 +47,10 @@ The diff results are posted on the Slack channel, making it easy for team member * Approving the pull request. * Viewing the pull request. -### GitHub automation[​](#github-automation"DirectlinktoGitHubautomation") +### GitHub automation[​](#github-automation "Direct link to GitHub automation") To enhance your workflow's efficiency, you can use the [GitHub Events](https://docs.botkube.io/configuration/source/github-events) source for automatic notification of pull request events, complete with an integrated `flux diff` button. -github: auth: accessToken: "ghp_" # GitHub PATrepositories: - name: { owner }/{name} on: pullRequests: - types: [ "open" ] paths: # Patterns for included file changes in pull requests. include: [ 'kustomize/.*' ] notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " + github: auth: accessToken: "ghp_" # GitHub PATrepositories: - name: { owner }/{name} on: pullRequests: - types: [ "open" ] paths: # Patterns for included file changes in pull requests. include: [ 'kustomize/.*' ] notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " Don't forget to bind the plugin to one of the channels. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__helm.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__helm.md index 78bd3cef..9f6b71b5 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage__executor__helm.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__helm.md @@ -15,29 +15,41 @@ Botkube allows you to execute `helm` commands on your Kubernetes cluster. By def To execute `helm` commands, send message in the following format in the channel where Botkube is already added: -@Botkube helm [command] [flags] At least one `helm` executor needs to be enabled and bound to a given channel. caution Using the interactive filter input field causes the Helm command to be re-executed. Be careful when using it for read-write commands. ![Image 1: Interactive Helm install filtering](https://docs.botkube.io/assets/images/helm-install-filter-bc1989a96013aa1c14a23d0e41a5f6ac.png) + @Botkube helm [command] [flags] + +At least one `helm` executor needs to be enabled and bound to a given channel. + +caution + +Using the interactive filter input field causes the Helm command to be re-executed. Be careful when using it for read-write commands. + +![Image 1: Interactive Helm install filtering](https://docs.botkube.io/assets/images/helm-install-filter-bc1989a96013aa1c14a23d0e41a5f6ac.png) This issue is tracked in [botkube#907](https://github.com/kubeshop/botkube/issues/907). -Supported commands[​](#supported-commands"DirectlinktoSupportedcommands") +Supported commands[​](#supported-commands "Direct link to Supported commands") ------------------------------------------------------------------------------ The Helm executor plugin has the exact same syntax as the Helm CLI. However, not all commands and flags are supported. If an unsupported flag is specified, you will get a dedicated error, e.g: -The "--wait" flag is not supported by the Botkube Helm plugin. Please remove it. + The "--wait" flag is not supported by the Botkube Helm plugin. Please remove it. Additionally, the following flag syntax is not supported: * No whitespace between short flag name and its value. Instead of `-oyaml`, use `-o yaml`. * Merging multiple short flags together. Instead of `-Aa`, use `-A -a`. -### Read-only commands[​](#read-only-commands"DirectlinktoRead-onlycommands") +### Read-only commands[​](#read-only-commands "Direct link to Read-only commands") List of the read-only commands: * `@Botkube helm help` - shows the general Helm plugin help message. * `@Botkube helm list` - lists all releases on cluster where Botkube is installed. -* The `--filter` flag is reserved by Botkube. As a result, to use the Helm filter functionality use `-f` instead, e.g. `helm list -f 'ara[a-z]+'`. * `@Botkube helm status` - displays the status of the named release. * `@Botkube helm version` - shows the version of the Helm CLI used by this Botkube plugin. ### Read-write commands[​](#read-write-commands"DirectlinktoRead-writecommands") + * The `--filter` flag is reserved by Botkube. As a result, to use the Helm filter functionality use `-f` instead, e.g. `helm list -f 'ara[a-z]+'`. +* `@Botkube helm status` - displays the status of the named release. +* `@Botkube helm version` - shows the version of the Helm CLI used by this Botkube plugin. + +### Read-write commands[​](#read-write-commands "Direct link to Read-write commands") For the read-write commands the Botkube RBAC needs to be adjusted. For more information, see the [**Enabling plugin**](https://docs.botkube.io/configuration/executor/helm#enabling-plugin) section. @@ -48,5 +60,5 @@ List of the read-write commands: * `@Botkube helm uninstall` - uninstalls a given release. * `@Botkube helm upgrade` - upgrades a given release. * `@Botkube helm install` - installs a given chart to cluster where Botkube is installed. There are two different ways you to install a Helm chart: -* By absolute URL: `helm install mynginx https://example.com/charts/nginx-1.2.3.tgz` -* By chart reference and repository URL: `helm install --repo https://example.com/charts/ mynginx nginx` + * By absolute URL: `helm install mynginx https://example.com/charts/nginx-1.2.3.tgz` + * By chart reference and repository URL: `helm install --repo https://example.com/charts/ mynginx nginx` diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__kubectl.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__kubectl.md index daa838f4..c2869331 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage__executor__kubectl.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__kubectl.md @@ -7,11 +7,13 @@ Botkube allows you to execute `kubectl` commands on your Kubernetes cluster. By To execute the `kubectl` commands, send message in following format in the channel where Botkube is already added: -@Botkube kubectl [verb] [resource] [flags] By default, `k` and `kc` are configured as aliases for the `kubectl` command. You can use them on par with the `kubectl` command. To read more about aliases configuration, see the [Alias](https://docs.botkube.io/configuration/alias) section. + @Botkube kubectl [verb] [resource] [flags] + +By default, `k` and `kc` are configured as aliases for the `kubectl` command. You can use them on par with the `kubectl` command. To read more about aliases configuration, see the [Alias](https://docs.botkube.io/configuration/alias) section. This command needs to be executed from configured channel. -Interactive kubectl commands builder[​](#interactive-kubectl-commands-builder"DirectlinktoInteractivekubectlcommandsbuilder") +Interactive kubectl commands builder[​](#interactive-kubectl-commands-builder "Direct link to Interactive kubectl commands builder") ------------------------------------------------------------------------------------------------------------------------------------ Use the interactive `kubectl` command builder to construct a `kubectl` command just by selecting items from dropdowns. This is especially useful on mobile when typing the command is harder. @@ -22,14 +24,14 @@ To start the interactive `kubectl` command builder, run `@Botkube kubectl` from ![Image 1: kubectl command builder](https://docs.botkube.io/assets/images/kc-cmd-builder-90ea740becbf2c0f126436c4a6c013bd.gif) -### Limitations[​](#limitations"DirectlinktoLimitations") +### Limitations[​](#limitations "Direct link to Limitations") Keep in mind that the interactive command builder may not support all the commands that you can run just by typing them directly in a chat window. The following policies are applied: * Under verbs' dropdown, we display verbs that are defined under the `interactiveBuilder.allowed.verbs` configuration. - + * Under resources' dropdown, we display resources that are defined under the `interactiveBuilder.allowed.resources` configuration and are allowed for already selected verb. For example, for the `logs` verb we display only `pods`, `statefulsets`, `deployments`, and `daemonsets`. - + * For resources that are namespace-scoped, under namespaces' dropdown, we display `interactiveBuilder.allowed.namespaces` if defined. If static namespaces are not specified, plugin needs to have access to fetch all Namespaces, otherwise Namespace dropdown won't be visible at all. - + * The `kubectl` command preview is displayed only if the command that you built is valid, and you have permission to run it. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__interactive-output-filtering.md b/hack/assistant-setup/content/docs.botkube.io__usage__interactive-output-filtering.md index ab97a19f..c2d03c35 100644 --- a/hack/assistant-setup/content/docs.botkube.io__usage__interactive-output-filtering.md +++ b/hack/assistant-setup/content/docs.botkube.io__usage__interactive-output-filtering.md @@ -15,7 +15,7 @@ Sometimes you can get long response from a certain command and you may want to f If you use the [Slack integration](https://docs.botkube.io/installation/slack/) that supports interactive messages, there is another option to handle that: interactive output filtering. Interactivity is achieved via an input action text box where you can add your filter criteria as text and press the **Enter** button. -### Long response filtering[​](#long-response-filtering"DirectlinktoLongresponsefiltering") +### Long response filtering[​](#long-response-filtering "Direct link to Long response filtering") Output Filter input text box will be attached to your command response if response has more than 15 lines. Let's see an example for this situation. @@ -23,12 +23,12 @@ Output Filter input text box will be attached to your command response if respon 2. Let's check the logs of `metrics-server` with `@Botkube kubectl logs -f metrics-server-7cd5fcb6b7-hzvq8 -n kube-system`![Image 2: metrics_logs](https://docs.botkube.io/assets/images/output-filtering-metrics-logs-b6007e41cbfcc6ef727f848a0cdd5808.png) 3. Notice that Filter Output is attached to response. Type `RequestHeaderAuthRequestController` to filter and press `Enter`. ![Image 3: metrics_filter_logs](https://docs.botkube.io/assets/images/output-filtering-metrics-logs-filter-a6e6cfc2918f182e1a29d16066d47198.png) -Attachment response filtering[​](#attachment-response-filtering"DirectlinktoAttachmentresponsefiltering") +Attachment response filtering[​](#attachment-response-filtering "Direct link to Attachment response filtering") --------------------------------------------------------------------------------------------------------------- Command response is uploaded as text file once the actual size of response message reaches the limit of messaging platform. Let's take a look how Filter Output behaves for this situation. -1. List the pods with `@Botkube kubectlc get pods -n kube-system`![Image 4: pod_logs](https://docs.botkube.io/assets/images/output-filtering-get-pods-21073bfe8502243fe4b90b83b155b99a.png) +1. List the pods with `@Botkube kubectlc get pods -n kube-system`![Image 4: get_pods](https://docs.botkube.io/assets/images/output-filtering-get-pods-21073bfe8502243fe4b90b83b155b99a.png) 2. Let's check the logs of Traefik with command `@Botkube kubectl logs -f traefik-df4ff85d6-f2mkz -n kube-system`. Notice that, you might have different pod list, so please select a suitable one for your case. ![Image 5: pod_logs](https://docs.botkube.io/assets/images/output-filtering-get-pods-21073bfe8502243fe4b90b83b155b99a.png) 3. Since the response is big, it is uploaded as file and you can realize a reply thread. Please expand it to see filter output. 4. Assume we want to see log lines only containing `Configuration` word. Type `Configuration` in the Filter Output input box and click enter. You will see filtered result as a response. ![Image 6: filter_response](https://docs.botkube.io/assets/images/output-filtering-filter-response-5fed09008578a720a302892f2ab81293.png) diff --git a/hack/assistant-setup/content/docs.botkube.io__versions.md b/hack/assistant-setup/content/docs.botkube.io__versions.md index b7e07983..4decc048 100644 --- a/hack/assistant-setup/content/docs.botkube.io__versions.md +++ b/hack/assistant-setup/content/docs.botkube.io__versions.md @@ -7,11 +7,7 @@ Markdown Content: **New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). -[![Image 1: Botkube Logo](https://docs.botkube.io/images/botkube-black.svg) - -**Botkube**](https://docs.botkube.io/) - -[Documentation](https://docs.botkube.io/)[Community](https://docs.botkube.io/community/contribute/) +[![Image 1: Botkube Logo](https://docs.botkube.io/images/botkube-black.svg) **Botkube**](https://docs.botkube.io/)[Documentation](https://docs.botkube.io/)[Community](https://docs.botkube.io/community/contribute/) [1.10](https://docs.botkube.io/) @@ -24,32 +20,32 @@ Markdown Content: * [1.5](https://docs.botkube.io/1.5/) * [1.4](https://docs.botkube.io/1.4/) * * * * - + * [All versions](https://docs.botkube.io/versions) [GitHub](https://github.com/kubeshop/botkube)[Slack](https://join.botkube.io/) This page lists all documented versions of Botkube. -### Current version (Stable)[​](#current"DirectlinktoCurrentversion(Stable)") +### Current version (Stable)[​](#current "Direct link to Current version (Stable)") The latest stable version.
1.10Documentation⏳ Loading...
-### Next version (Unreleased)[​](#unreleased"DirectlinktoNextversion(Unreleased)") +### Next version (Unreleased)[​](#unreleased "Direct link to Next version (Unreleased)") Here you can find the documentation for unreleased version.
Unreleased 🚧Documentation
-### Previous versions[​](#previous"DirectlinktoPreviousversions") +### Previous versions[​](#previous "Direct link to Previous versions") Here you can find documentation for previous Botkube versions.
1.9Documentation⏳ Loading...
1.8Documentation⏳ Loading...
1.7Documentation⏳ Loading...
1.6Documentation⏳ Loading...
1.5Documentation⏳ Loading...
1.4Documentation⏳ Loading...
-### Archived Versions[​](#archived"DirectlinktoArchivedVersions") +### Archived Versions[​](#archived "Direct link to Archived Versions") Here you can find documentation for archived, no longer maintained Botkube versions. diff --git a/hack/assistant-setup/file-search.ts b/hack/assistant-setup/file-search.ts index 91d11901..5d2c29ee 100644 --- a/hack/assistant-setup/file-search.ts +++ b/hack/assistant-setup/file-search.ts @@ -1,5 +1,6 @@ import { createReadStream, readdirSync } from "node:fs"; import OpenAI from "openai"; +import { Assistant } from "openai/resources/beta"; const contentPath = "./content"; const errorStatuses = ["failed", "cancelled"]; @@ -17,16 +18,6 @@ export async function setupFileSearch(client: OpenAI): Promise { createReadStream(`${contentPath}/${fileName}`), ); - console.log("Checking if vector store already exists..."); - const vectorStores = await client.beta.vectorStores.list(); - const vsToDelete = vectorStores.data.find( - (vs) => vs.name === vectorStoreName, - ); - if (vsToDelete) { - console.log(`Found vector store ${vsToDelete.id}. Deleting...`); - await client.beta.vectorStores.del(vsToDelete.id); - } - console.log("Creating vector store..."); const vectorStore = await client.beta.vectorStores.create({ name: vectorStoreName, @@ -49,3 +40,41 @@ export async function setupFileSearch(client: OpenAI): Promise { return vectorStore.id; } + +export async function removePreviousFileSearchSetup( + client: OpenAI, + fileSearch?: Assistant.ToolResources.FileSearch, +) { + const vectorStoreIDs: Array = fileSearch?.vector_store_ids ?? []; + if (vectorStoreIDs.length === 0) { + console.log("No previous vector store IDs found."); + return; + } + + console.log(`Deleting previous vector store(s)...`); + for (const id of vectorStoreIDs) { + while (true) { + console.log(`- Fetching vector store files page...`); + const files = await client.beta.vectorStores.files.list(id, { + limit: 100, + }); // 100 is max + + if (files.data.length === 0) { + break; + } + + console.log(`- Deleting page of ${files.data.length} files...`); + for (const file of files.data) { + console.log(`-- Deleting file ${file.id}...`); + try { + await client.files.del(file.id); + } catch (err) { + console.error(err); + } + } + } + + console.log(`- Deleting vector store ${id}...`); + await client.beta.vectorStores.del(id); + } +} diff --git a/hack/assistant-setup/index.ts b/hack/assistant-setup/index.ts index c50af641..629819f3 100644 --- a/hack/assistant-setup/index.ts +++ b/hack/assistant-setup/index.ts @@ -1,5 +1,5 @@ import { OpenAI } from "openai"; -import { setupFileSearch } from "./file-search"; +import { removePreviousFileSearchSetup, setupFileSearch } from "./file-search"; import { setupTools } from "./tools"; import dedent from "dedent"; @@ -51,12 +51,18 @@ async function main() { ); } - console.log(`Using ${assistantEnv} assistant (ID: ${assistantID})`); - + console.log(`Using ${assistantEnv} assistant`); const client = new OpenAI({ apiKey: process.env["OPENAI_API_KEY"], }); + console.log(`Getting assistant data for ID ${assistantID}...`); + const assistant = await client.beta.assistants.retrieve(assistantID); + const prevFileSearchSetup = assistant.tool_resources?.file_search; + console.log( + `Successfully retrieved assistant data for '${assistant.name}' (ID: ${assistant.id})`, + ); + console.log(`Setting up file search...`); const vectorStoreId = await setupFileSearch(client); @@ -68,6 +74,11 @@ async function main() { tools: setupTools(), tool_resources: { file_search: { vector_store_ids: [vectorStoreId] } }, }); + + console.log("Removing previous file search setup..."); + await removePreviousFileSearchSetup(client, prevFileSearchSetup); + + console.log("Done!"); } main();