From 814ef78dc2e6a788b49d417d79db8ab4c28356a8 Mon Sep 17 00:00:00 2001 From: Botkube Dev Bot <114558571+botkube-dev@users.noreply.github.com> Date: Mon, 17 Jun 2024 17:54:50 +0200 Subject: [PATCH] Refetch content for OpenAI assistant (#43) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../content/botkube.io__blog.md | 12 +-- ...s-with-botkubes-ai-powered-cluster-scan.md | 67 +++++++++++++++ .../content/botkube.io__contact.md | 2 +- ..._argo-cd-botkube-kubernetes-integration.md | 2 +- ...on__botkube-flux-kubernetes-integration.md | 2 +- ..._chatgpt-botkube-kubernetes-integration.md | 2 +- .../botkube.io__integration__discord.md | 2 +- .../botkube.io__integration__kasten.md | 2 +- .../content/botkube.io__integration__keptn.md | 2 +- .../botkube.io__integration__mattermost.md | 2 +- ...ation__pagerduty-kubernetes-integration.md | 2 +- .../content/botkube.io__integration__slack.md | 2 +- .../content/botkube.io__integration__teams.md | 2 +- .../botkube.io__learn-main-topic__ai.md | 2 +- ...tkube.io__learn-main-topic__definitions.md | 2 +- .../botkube.io__learn-main-topic__errors.md | 2 +- ...learn-main-topic__monitoring-kubernetes.md | 2 +- ...botkube.io__learn-main-topic__use-cases.md | 2 +- .../content/botkube.io__learn.md | 2 +- ...kube.io__learn__kubernetes-health-check.md | 69 +++++++++++++++ .../content/botkube.io__news.md | 2 +- .../content/botkube.io__privacy-policy.md | 2 - .../content/botkube.io__slack-app.md | 79 +++++++---------- .../content/botkube.io__support.md | 40 ++------- .../content/botkube.io__tags__ai.md | 18 ++-- .../content/botkube.io__tags__aiops.md | 16 ++-- .../botkube.io__tags__botkube-cloud.md | 28 ++++--- .../content/botkube.io__tags__kubecon.md | 6 +- .../content/botkube.io__tags__kubernetes.md | 16 ++-- .../botkube.io__tags__microsoft-teams.md | 6 +- .../content/botkube.io__tags__tutorial.md | 2 +- .../botkube.io__terms-and-conditions.md | 19 ++--- ...docs.botkube.io__cli__commands__botkube.md | 4 +- ...tkube.io__cli__commands__botkube_config.md | 8 +- ...e.io__cli__commands__botkube_config_get.md | 16 +++- ...kube.io__cli__commands__botkube_install.md | 12 ++- ...otkube.io__cli__commands__botkube_login.md | 16 +++- ...kube.io__cli__commands__botkube_migrate.md | 8 +- ...be.io__cli__commands__botkube_telemetry.md | 8 +- ...li__commands__botkube_telemetry_disable.md | 16 +++- ...cli__commands__botkube_telemetry_enable.md | 16 +++- ...be.io__cli__commands__botkube_uninstall.md | 16 +++- ...kube.io__cli__commands__botkube_version.md | 12 ++- .../docs.botkube.io__cli__getting-started.md | 17 +++- .../docs.botkube.io__community__contribute.md | 52 +++++++++--- ...nity__contribute__elasticsearch-develop.md | 52 +++++++++--- ..._community__contribute__webhook-develop.md | 8 +- .../docs.botkube.io__community__credits.md | 64 +++++++------- .../docs.botkube.io__features__actions.md | 12 ++- ...docs.botkube.io__features__ai-assistant.md | 23 ++++- ...otkube.io__features__executing-commands.md | 4 +- .../docs.botkube.io__features__rbac.md | 68 +++++++++++---- ...otkube.io__installation__discord__cloud.md | 4 +- ....io__installation__discord__self-hosted.md | 20 +++-- ...botkube.io__installation__elasticsearch.md | 2 +- ...nstallation__elasticsearch__self-hosted.md | 2 + ...__installation__mattermost__self-hosted.md | 24 ++++-- ...be.io__installation__slack__cloud-slack.md | 4 +- ...e.io__installation__slack__socket-slack.md | 16 +++- ....io__installation__webhook__self-hosted.md | 4 +- .../content/docs.botkube.io__license.md | 5 +- .../docs.botkube.io__plugins__ai-assistant.md | 23 ++++- .../docs.botkube.io__plugins__argocd.md | 20 +++-- ...__plugins__development__custom-executor.md | 40 ++++++--- ...io__plugins__development__custom-source.md | 40 ++++++--- ...ube.io__plugins__development__debugging.md | 4 +- ....io__plugins__development__dependencies.md | 8 +- ...gins__development__interactive-messages.md | 16 +++- ...io__plugins__development__local-testing.md | 28 +++++-- ....botkube.io__plugins__development__repo.md | 44 +++++++--- ...__plugins__development__troubleshooting.md | 20 +++-- ..._plugins__development__using-kubeconfig.md | 8 +- .../content/docs.botkube.io__plugins__exec.md | 28 +++++-- .../content/docs.botkube.io__plugins__flux.md | 20 +++-- ...docs.botkube.io__plugins__github-events.md | 20 +++-- .../content/docs.botkube.io__plugins__helm.md | 12 ++- .../docs.botkube.io__plugins__keptn.md | 4 +- .../docs.botkube.io__plugins__kubectl.md | 18 ++-- .../docs.botkube.io__plugins__kubernetes.md | 84 ++++++++++++++----- .../docs.botkube.io__plugins__prometheus.md | 4 +- ...s.botkube.io__self-hosted-configuration.md | 56 +++++++++---- ...elf-hosted-configuration__communication.md | 8 +- ...configuration__communication__vault-csi.md | 44 +++++++--- ...io__self-hosted-configuration__executor.md | 24 ++++-- ....io__self-hosted-configuration__general.md | 4 +- ...e.io__self-hosted-configuration__source.md | 24 ++++-- .../content/docs.botkube.io__telemetry.md | 4 +- ...be.io__troubleshooting__common-problems.md | 16 +++- ...otkube.io__troubleshooting__diagnostics.md | 36 ++++++-- .../content/docs.botkube.io__versions.md | 81 ++++++++++-------- 90 files changed, 1177 insertions(+), 490 deletions(-) create mode 100644 hack/assistant-setup/content/botkube.io__blog__improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan.md create mode 100644 hack/assistant-setup/content/botkube.io__learn__kubernetes-health-check.md diff --git a/hack/assistant-setup/content/botkube.io__blog.md b/hack/assistant-setup/content/botkube.io__blog.md index 85c1650..1351521 100644 --- a/hack/assistant-setup/content/botkube.io__blog.md +++ b/hack/assistant-setup/content/botkube.io__blog.md @@ -8,17 +8,17 @@ Blog posts ![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6593f6180893516ae6ff048a_arrow-left-wh.svg)[1](https://botkube.io/blog?page=1)[2](https://botkube.io/blog?page=2)[3](https://botkube.io/blog?page=3)...[10](https://botkube.io/blog?page=10)[![Image 2](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6593f6180893516ae6ff048a_arrow-left-wh.svg)](https://botkube.io/blog?page=2) -[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6662eb9c54425e656e6f3689_PARTNERSHIPS_Thumbnail%20(1).png) Jun 7, 2024 3min read ### Take Control of K8s Incident Management Alerts with Botkube and PagerDuty Customize Botkube alerts to automatically create PagerDuty tickets, streamline incident management, reduce manual work, and improve response times.](https://botkube.io/blog/take-control-of-k8s-incident-management-alerts-with-botkube-and-pagerduty) +[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/666b47533624fe288ca8fbbc_BLOG_Thumbnail_Announcement.png) Jun 13, 2024 3min read ### Improve Your Kubernetes Health Checks with Botkube Assistant's Cluster Scan Transform Kubernetes monitoring with Botkube Assistants cluster scan. Get real-time insights, detailed analysis, and actionable recommendations to optimize performance and reduce downtime.](https://botkube.io/blog/improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan) -[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/66606d276e2694f36bd840eb_K8s-post-mortem%2BRCAs.png) Jun 4, 2024 10 read ### Streamline Kubernetes Post-Mortems with Botkube's AI Assistant One of the most time-consuming yet essential tasks that DevOps teams face is the Root Cause Analysis (RCA) and generation of Post Mortem Reports after incidents.](https://botkube.io/blog/kubernetes-post-mortems) +[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6662eb9c54425e656e6f3689_PARTNERSHIPS_Thumbnail%20(1).png) Jun 7, 2024 3min read ### Take Control of K8s Incident Management Alerts with Botkube and PagerDuty Customize Botkube alerts to automatically create PagerDuty tickets, streamline incident management, reduce manual work, and improve response times.](https://botkube.io/blog/take-control-of-k8s-incident-management-alerts-with-botkube-and-pagerduty) -[![Image 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/664c8bed801d7ed2898141ba_PARTNERSHIPS_Thumbnail.png) May 21, 2024 2min read ### Botkube is Now Verified in Microsoft AppSource! It's official: Botkube has undergone security and compliance checks by Microsoft to become verified in the AppSource Marketplace—strengthening user experience and our partnership with Microsoft.](https://botkube.io/blog/botkube-is-now-verified-in-microsoft-appsource) +[![Image 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/66606d276e2694f36bd840eb_K8s-post-mortem%2BRCAs.png) Jun 4, 2024 10 read ### Streamline Kubernetes Post-Mortems with Botkube's AI Assistant One of the most time-consuming yet essential tasks that DevOps teams face is the Root Cause Analysis (RCA) and generation of Post Mortem Reports after incidents.](https://botkube.io/blog/kubernetes-post-mortems) -[![Image 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6644e5d498e2ed722f5424d6_BLOG_Thumbnail%20(7).png) May 15, 2024 4min read ### Start Troubleshooting K8s Faster with Botkube’s Latest Improvements Learn about the latest v1.11 release, including an update to the AI-powered Botkube Assistant to view current environment configurations, set-up tasks, and more.](https://botkube.io/blog/start-troubleshooting-k8s-faster-with-botkubes-latest-improvements) +[![Image 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/664c8bed801d7ed2898141ba_PARTNERSHIPS_Thumbnail.png) May 21, 2024 2min read ### Botkube is Now Verified in Microsoft AppSource! It's official: Botkube has undergone security and compliance checks by Microsoft to become verified in the AppSource Marketplace—strengthening user experience and our partnership with Microsoft.](https://botkube.io/blog/botkube-is-now-verified-in-microsoft-appsource) -[![Image 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7d7f3f6390196bf27e83_UC%20(1).png) May 8, 2024 read ### Simplify Kubernetes Security Troubleshooting with AI Learn how Botkube can streamline troubleshooting and help overcome common Kubernetes PSA-related issues](https://botkube.io/blog/simplify-kubernetes-security-troubleshooting-with-ai) +[![Image 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/656795982e12e17904b3fe13_Botkube%20BLOG%20Thumbnail%20(7).png) May 20, 2024 5 minutes read ### Revolutionize Kubernetes Troubleshooting with Microsoft Teams and Botkube Learn more about Botkube's new and improved Microsoft Teams support!](https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube) -[![Image 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b8809695cf669f14f2a54_Level%20Up%20SRE%20Workflow%20Automating%20Manual%20Tasks%20with%20Botkube%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 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6540077fe681eba27afc9f78_Blog_Thumbnail%20(2).jpg) May 20, 2024 10 minutes read ### Maximize Your DevOps Teams Efficiency with Botkube + Microsoft Teams Get Botkube up and running with Microsoft Teams in less than 5 mins with this walk-through tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) No results found. Please try to search with different keywords. diff --git a/hack/assistant-setup/content/botkube.io__blog__improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan.md b/hack/assistant-setup/content/botkube.io__blog__improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan.md new file mode 100644 index 0000000..8906c17 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan.md @@ -0,0 +1,67 @@ +Title: Improve Your Kubernetes Health Checks with Botkube Assistant's Cluster Scan + +URL Source: https://botkube.io/blog/improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan + +Published Time: Jun 13, 2024 + +Markdown Content: +![Image 1](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) + +Kelly Revenaugh + +Developer Relations Lead + +Botkube + +Transform Kubernetes monitoring with Botkube Assistants cluster scan. Get real-time insights, detailed analysis, and actionable recommendations to optimize performance and reduce downtime. + +### Table of Contents + +* [Why Kubernetes Health Checks Matter](#why-kubernetes-health-checks-matter) +* [Unleashing the Power of AI in Kubernetes Monitoring + Troubleshooting](#unleashing-the-power-of-ai-in-kubernetes-monitoring-troubleshooting) +* [Get Started with Botkube's AI Cluster Scan](#get-started-with-botkube-s-ai-cluster-scan) + +#### Start Using Botkube AI-Powered Assistant Today + +Are you tired of manually sifting through endless Kubernetes logs and metrics, struggling to identify potential issues before they escalate? The AI-powered [Botkube Assistant's cluster scan](http://app.botkube.io/) is here to transform the way you monitor and maintain the health of your Kubernetes infrastructure. + +Imagine having a virtual Kubernetes expert at your fingertips, proactively identifying risks and suggesting solutions before they cause downtime or performance degradation. With Botkube's AI cluster scan, you can streamline your Kubernetes operations, reduce troubleshooting time, and ensure your applications run smoothly. + +Why Kubernetes Health Checks Matter +----------------------------------- + +Kubernetes is a powerful container orchestration platform, but its complexity can make it challenging to maintain optimal performance and security. Traditional monitoring tools often require significant manual effort to analyze logs, metrics, and configurations. This reactive approach can lead to prolonged downtime and suboptimal performance. Botkube's AI-powered cluster scan offers a proactive solution, providing you with real-time insights and helpful recommendations to keep your cluster running smoothly. + +Unleashing the Power of AI in Kubernetes Monitoring + Troubleshooting +--------------------------------------------------------------------- + +If you’re new here, the intelligent **Botkube Assistant** is designed to simplify and enhance your Kubernetes management experience. By seamlessly integrating with [**Microsoft Teams**](https://botkube.io/integration/teams) and [**Slack**](https://botkube.io/integration/slack), Botkube enables you to monitor, debug, and manage your Kubernetes clusters directly from your communication platform. The powerful assistant provides real-time alerts, remediation recommendations (and K8s manifests to fix errors!), and automated actions — all aimed at streamlining your DevOps workflows. + +Botkube Assistant goes beyond simple log aggregation, offering a comprehensive cluster scan report that delivers actionable insights directly to your preferred communication platform. Here's what you can expect from our cluster scan: + +### Summary & Pod Health + +Get a concise overview of your cluster's status, including pod health statistics and potential issues like CrashLoopBackOff errors. This high-level summary helps you quickly identify areas that require immediate attention, ensuring your cluster remains healthy and operational. + +### Resource Utilization, Configuration, and Networking + +Dive into a detailed analysis of resource utilization, configuration, and networking. Our AI identifies bottlenecks, misconfigurations, and vulnerabilities that could impact performance or security. This in-depth analysis helps you optimize your resources, enhance performance, and fortify your cluster against potential threats. + +### Detailed Checks + +Explore in-depth reports on specific issues, gaining a deeper understanding of their root causes and potential impacts. These detailed checks allow you to address problems at their source, preventing them from escalating into more significant issues. + +### Recommendations + +Receive actionable steps to address identified problems, optimize resource allocation, and improve the overall health and stability of your cluster. Our AI not only identifies issues but also provides practical solutions, empowering you to take swift and effective action. + +Get Started with Botkube's AI Cluster Scan +------------------------------------------ + +Ready to take your Kubernetes health checks to the next level? Try [Botkube Assistant's cluster scan today](http://botkube.io/) and experience the power of intelligent monitoring. Transform your approach to Kubernetes management, minimize downtime, and maximize the performance of your applications. + +When your cluster is connected, use the **@botkube ai scan** command to allow Botkube Assistant to scan your entire cluster for long-standing or potential issues before they arise. + +If you’re new to Botkube, [sign up for a free account today](http://app.botkube.io/) to take advantage of the Cluster Scan feature, our AI-powered Kubernetes-knowledgeable Botkube Assistant, multi-cluster management and more. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__contact.md b/hack/assistant-setup/content/botkube.io__contact.md index 1dfb414..5f14917 100644 --- a/hack/assistant-setup/content/botkube.io__contact.md +++ b/hack/assistant-setup/content/botkube.io__contact.md @@ -31,7 +31,7 @@ Company Use the form to leave us a message or connect with us on social: -[](https://www.youtube.com/playlist?list=PL2Vye-us8_x_5eqYQTBq7ZywupscaW5yA)[](https://github.com/kubeshop/botkube)[](https://twitter.com/botkube_io)[](https://join.botkube.io/)[](https://www.linkedin.com/showcase/botkube/) +[](https://www.youtube.com/playlist?list=PL2Vye-us8_x_5eqYQTBq7ZywupscaW5yA)[](https://github.com/kubeshop/botkube)[](https://twitter.com/botkube_io)[](https://api.botkube.io/routers/slack/v1/install)[](https://www.linkedin.com/showcase/botkube/) ![Image 2](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/64de5389c7d816d1f6530501_botkube-status-icon.svg) 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 ffcfac7..327bd29 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: Botkube.io +Title: Argo CD & Botkube Kubernetes Integration 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 f18d024..80050b5 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: Botkube.io +Title: Flux & Botkube Kubernetes Integration 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 913b8b3..db5508e 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: Botkube.io +Title: ChatGPT & Botkube Kubernetes Integration 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 a823abe..6a9e807 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: Botkube.io +Title: Discord & Botkube Kubernetes Integration URL Source: https://botkube.io/integration/discord diff --git a/hack/assistant-setup/content/botkube.io__integration__kasten.md b/hack/assistant-setup/content/botkube.io__integration__kasten.md index ba98d9a..b4bd3cb 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: Botkube.io +Title: Kasten & Botkube Kubernetes Integration 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 cc392b1..2d95860 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: Botkube.io +Title: Keptn & Botkube Kubernetes Integration 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 cf61862..b5d7ff5 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: Botkube.io +Title: Mattermost & Botkube Kubernetes Integration URL Source: https://botkube.io/integration/mattermost diff --git a/hack/assistant-setup/content/botkube.io__integration__pagerduty-kubernetes-integration.md b/hack/assistant-setup/content/botkube.io__integration__pagerduty-kubernetes-integration.md index 2b60a29..aaba03e 100644 --- a/hack/assistant-setup/content/botkube.io__integration__pagerduty-kubernetes-integration.md +++ b/hack/assistant-setup/content/botkube.io__integration__pagerduty-kubernetes-integration.md @@ -1,4 +1,4 @@ -Title: Botkube.io +Title: PagerDuty & Botkube Kubernetes Integration URL Source: https://botkube.io/integration/pagerduty-kubernetes-integration diff --git a/hack/assistant-setup/content/botkube.io__integration__slack.md b/hack/assistant-setup/content/botkube.io__integration__slack.md index db07a3e..94e37f6 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: Botkube.io +Title: Slack & Botkube Kubernetes Integration URL Source: https://botkube.io/integration/slack diff --git a/hack/assistant-setup/content/botkube.io__integration__teams.md b/hack/assistant-setup/content/botkube.io__integration__teams.md index 6d0ccbb..bc965d8 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: Botkube.io +Title: Microsoft Teams & Botkube K8s Integration URL Source: https://botkube.io/integration/teams 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 0916cd3..0576cb1 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 @@ -5,4 +5,4 @@ URL Source: https://botkube.io/learn-main-topic/ai Markdown Content: [![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](#) -Botkube is made by Kubeshop 
— a first of its kind open-source accelerator focused on the cloud native ecosystem +Botkube is made by Kubeshop — a first of its kind open-source accelerator focused on the cloud native ecosystem 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 d4536a6..240d6bd 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 @@ -5,4 +5,4 @@ URL Source: https://botkube.io/learn-main-topic/definitions Markdown Content: [![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](#) -Botkube is made by Kubeshop 
— a first of its kind open-source accelerator focused on the cloud native ecosystem +Botkube is made by Kubeshop — a first of its kind open-source accelerator focused on the cloud native ecosystem 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 8e178c6..16e818d 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 @@ -5,4 +5,4 @@ URL Source: https://botkube.io/learn-main-topic/errors Markdown Content: [![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](#) -Botkube is made by Kubeshop 
— a first of its kind open-source accelerator focused on the cloud native ecosystem +Botkube is made by Kubeshop — a first of its kind open-source accelerator focused on the cloud native ecosystem 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 82dbf13..9541cb7 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 @@ -5,4 +5,4 @@ URL Source: https://botkube.io/learn-main-topic/monitoring-kubernetes Markdown Content: [![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](#) -Botkube is made by Kubeshop 
— a first of its kind open-source accelerator focused on the cloud native ecosystem +Botkube is made by Kubeshop — a first of its kind open-source accelerator focused on the cloud native ecosystem 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 6d44c99..05fd74d 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 @@ -5,4 +5,4 @@ URL Source: https://botkube.io/learn-main-topic/use-cases Markdown Content: [![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](#) -Botkube is made by Kubeshop 
— a first of its kind open-source accelerator focused on the cloud native ecosystem +Botkube is made by Kubeshop — a first of its kind open-source accelerator focused on the cloud native ecosystem diff --git a/hack/assistant-setup/content/botkube.io__learn.md b/hack/assistant-setup/content/botkube.io__learn.md index 1e834cc..eb33607 100644 --- a/hack/assistant-setup/content/botkube.io__learn.md +++ b/hack/assistant-setup/content/botkube.io__learn.md @@ -5,4 +5,4 @@ URL Source: https://botkube.io/learn Markdown Content: [![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](#) -Botkube is made by Kubeshop 
— a first of its kind open-source accelerator focused on the cloud native ecosystem +Botkube is made by Kubeshop — a first of its kind open-source accelerator focused on the cloud native ecosystem diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-health-check.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-health-check.md new file mode 100644 index 0000000..4ac8c82 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-health-check.md @@ -0,0 +1,69 @@ +Title: Kubernetes Health Checks: Cluster Scanning Best Practices + +URL Source: https://botkube.io/learn/kubernetes-health-check + +Markdown Content: +Kubernetes, the powerhouse behind modern container orchestration, demands meticulous health checks to ensure smooth sailing for your applications. These checkups are the unsung heroes, detecting lurking issues before they escalate into major disruptions. But where to begin? How do you navigate the labyrinth of logs, metrics, and configurations? + +Enter the era of AI-powered assistants, revolutionizing the way we approach Kubernetes health checks. We'll delve into the intricacies of cluster scans, harnessing the power of AI to analyze your infrastructure's vital signs. Discover how these intelligent assistants identify potential bottlenecks, security vulnerabilities, and resource misconfigurations. Get ready to elevate your Kubernetes expertise and empower yourself with the tools to keep your applications running at peak performance. + +What is a k8s Health Check? +--------------------------- + +In the world of Kubernetes (often shortened to k8s), a health check is like a doctor's visit for your applications. It's a set of probes and configurations that monitor the well-being of your containers, pods, and services, ensuring they're running smoothly and ready to handle traffic. These checks help identify issues like unresponsive applications, resource constraints, or misconfigurations before they escalate into major problems. Performing a Kubernetes cluster scan is the first step towards a comprehensive health checkup, offering a detailed snapshot of your infrastructure's vital signs and potential areas for improvement. + +Performing a Kubernetes Cluster Scan +------------------------------------ + +We do not want to bury the easiest way to get a status check on Kubernetes. Botkube's new AI assistant has automated most of the heavy-lifting to this process. Watch our video below of starting a cluster scan directly from Slack and performing health checks automatically. + +After Botkube is setup, type **'@botkube ai scan'** to start the process. + +### What Does the k8s Cluster Scan Do? + +Botkube's AI assistant takes cluster scanning to a new level, going beyond simply prompting a generic LLM with raw cluster data. It utilizes a sophisticated process that combines in-depth analysis with intelligent interpretation to provide actionable insights. Here's how it works: + +1. **In-Depth Cluster Analysis:** The assistant harnesses the power of kubectl, the command-line tool for Kubernetes, to perform a meticulous examination of your cluster's logs. This involves diving into individual nodes, pods, namespaces, and services to uncover hidden issues, warnings, or errors that may be lurking beneath the surface. +2. **Intelligent Issue Interpretation:** Any identified issues are then fed into a trained LLM, often ChatGPT 4.o, for further analysis. The AI assistant doesn't stop at a single query; it persistently probes the LLM, seeking root causes, potential solutions, and best practices to address the discovered problems. +3. **Comprehensive Summary Generation:** The assistant compiles all the gathered information, including insights from the LLM and its own analysis, into a comprehensive cluster scan summary. This summary is not just a dry list of errors; it's a carefully crafted report designed to be both informative and actionable. +4. **Customizable Delivery:** The final step is delivering the summary in a format that works for you. Botkube's AI assistant seamlessly integrates with popular communication platforms like Slack, Teams, or Discord, providing a user-friendly way to receive and act upon the cluster scan results. + +In the next section, we'll break down the different sections of the Botkube AI cluster health checkup, shedding light on the specific insights and recommendations you can expect from this powerful tool. + +The Different Sections of the Cluster Scan +------------------------------------------ + +To provide the most actionable and valuable insights, we've distilled the cluster scan results into the following key sections, focusing on potential risks, resource optimization, and configuration best practices. + +### 1 - Summary & Pod Health + +As you can see in the screenshot below, the first part of the scan results focuses on summarizing issues. It also gives statistics related to Pod status. Below we see that the readiness probe fails on some of my pods with the [CrashLoopBackOff](https://botkube.io/learn/how-to-debug-crashloopbackoff) state. This is a very common issue that the AI will suggest fixes to later on in the message. + +![Image 1: Summary and Pod Health Section in Slack Message](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/66699475f1156384c7304236_AD_4nXeHgfJCM4se2T97EoCIAa_sxk27yAq7B3bc6236NAcXgnhBOMIQwNc8H7uQMvdu_2BIKVTRYnl04l1MVRSW4Iai1C7ep6SnA6j0S4aa4oO40iLNzGc2AKifMXWU2O7GG26h5NKM3oaA3qsORjmf2W2Zh4g.png) + +### 2- Resource Utilization, Configuration, and Networking + +The next section of the report dives into the heart of your cluster's performance and stability. It meticulously examines resource utilization, flagging potential [out-of-memory (OOM) issues](https://botkube.io/learn/what-is-oomkilled), under-provisioned cores, or any other bottlenecks that could hinder optimal performance. Additionally, it scrutinizes cluster configuration and networking, identifying misconfigurations or potential vulnerabilities that could impact the overall health of your infrastructure. + +In the screenshot below, you can see a clean bill of health, indicating no major issues were detected during this scan. + +![Image 2: k8s cluster status coming from Slack](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/66699475b7b8aa05723a2d89_AD_4nXdRF7Sfm3_bX7R6UeRajeAMlt8A2ZBsnNuLepsDtsYZNYKjHhENuMmycBwbSnog5ZoA3EyGr7aPC4nhRqGWZstJP3HPLEvoPtngWAZd32OBHI7BrGCMTVr8O9SPQehUYwkCjOhpw4c3oRCmUmgxnLYp-W8Y.png) + +### 3- Detailed Checks + +Next, the report shows you more detailed reports on some of the issues it found during the process. You can see from the screenshot from our example scan that it gives us more detail on the pods that were in the crashbackloop state. + +![Image 3: Detailed checks for Pod readiness](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/666994754c364089e35b6d1d_AD_4nXc6JGxQuYPfVZyduDPZpDn73fqY-pUdztT2-MwzIMd77NVrl7d-JmFXhYpBC5uy_ZAPaXbOabgiJb6fdkC9w2DPBw0TMnLD-Y70IvbcfwbzGqfIg_Rnllv6wMSLdDT5M7ZfFE0AZHL-an8UnGgxxsCo99o.png) + +### 4 - Recommendations + +Finally, the most actionable section of the cluster review, the recommendations. This section should take into account all the previous sections/issues and give actionable steps to improve your Kubernetes cluster. + +![Image 4: k8s Health Checkup recommendations ](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/66699475e801b788a58574ba_AD_4nXeujLJDl-jVw3T_NBoPUTv0ARArCN8oZJtNLtfhMZLmtlHdy8c7rNTfuhuN66MD8RYiFQZ1Ura5AizPG5k3sRfKd8z50OQrQLlzB1UWhaQQs64IvaTYeRr20lVfC1S94YoBz9Yn1lo5zelB1tp-icpqSEjZ.png) + +Conclusion +---------- + +In this exploration of Kubernetes health checks, we've defined the concept, highlighted the significance of cluster scans, and delved into the inner workings of Botkube's AI-powered cluster scan report. From in-depth log analysis to intelligent interpretation and comprehensive summaries, you've gained a deeper understanding of how to proactively monitor and maintain the health of your Kubernetes infrastructure. Armed with this knowledge, you're better equipped to detect potential issues, optimize resource utilization, and ensure the smooth operation of your applications. Embrace the power of AI-assisted cluster scans and unlock the full potential of your Kubernetes environment. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__news.md b/hack/assistant-setup/content/botkube.io__news.md index 9bf391d..eae4eec 100644 --- a/hack/assistant-setup/content/botkube.io__news.md +++ b/hack/assistant-setup/content/botkube.io__news.md @@ -33,6 +33,6 @@ Stay in the Loop Join the Botkube Community in one of these channels -[](https://github.com/kubeshop/botkube)[](https://twitter.com/botkube_io)[](https://www.linkedin.com/showcase/botkube/)[](https://www.youtube.com/playlist?list=PL2Vye-us8_x_5eqYQTBq7ZywupscaW5yA)[](https://join.botkube.io/) +[](https://github.com/kubeshop/botkube)[](https://twitter.com/botkube_io)[](https://www.linkedin.com/showcase/botkube/)[](https://www.youtube.com/playlist?list=PL2Vye-us8_x_5eqYQTBq7ZywupscaW5yA)[](https://api.botkube.io/routers/slack/v1/install) Subscribe to our monthly newsletter to stay up to date with all-things Botkube. diff --git a/hack/assistant-setup/content/botkube.io__privacy-policy.md b/hack/assistant-setup/content/botkube.io__privacy-policy.md index ccace11..ceb6d9c 100644 --- a/hack/assistant-setup/content/botkube.io__privacy-policy.md +++ b/hack/assistant-setup/content/botkube.io__privacy-policy.md @@ -257,5 +257,3 @@ We take data security seriously, and have implemented appropriate technical and ### Conclusion At Botkube, we are committed to protecting the privacy and personal data of our users. We will ensure that all data deletion requests are handled in a timely and secure manner, and that personal data is deleted in accordance with applicable data protection regulations. - -‍ diff --git a/hack/assistant-setup/content/botkube.io__slack-app.md b/hack/assistant-setup/content/botkube.io__slack-app.md index 027d0d0..880844e 100644 --- a/hack/assistant-setup/content/botkube.io__slack-app.md +++ b/hack/assistant-setup/content/botkube.io__slack-app.md @@ -3,11 +3,12 @@ Title: The Botkube Cloud App for Slack URL Source: https://botkube.io/slack-app Markdown Content: -[![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) +![Image 1](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/64e8e512edbae7755379b2fe_bk-slack-logo-hero-bg.webp) -![Image 2](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/64e8e512edbae7755379b2fe_bk-slack-logo-hero-bg.webp) +Cloud App for Slack +------------------- -![Image 3](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500bcab958c3be57a5523a5_slack-logo-color.svg) +![Image 2](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500bcab958c3be57a5523a5_slack-logo-color.svg) #### Cloud App for Slack @@ -16,61 +17,45 @@ The Botkube Cloud App for Slack uses Botkube Cloud services to manage channels a Installing Botkube in Slack --------------------------- -1. +1 -[![Image 4](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c008d898dab566f70d85_install-1.svg)![Image 5](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 3](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c008d898dab566f70d85_install-1.svg) ![Image 4](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) Go to Botkube Cloud
 [Web App](https://app.botkube.io/) and click
on New Instance button. -2. +2 -[![Image 6](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c1702080a8b5a26efb6d_install-2.svg)![Image 7](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 5](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c1702080a8b5a26efb6d_install-2.svg) ![Image 6](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)Fill in the Instance Display Name and click Next button. -Fill in the Instance Display Name and click Next button. +3 -3. +[![Image 7](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c17b5527fae1a4c5bc57_install-3.svg) ![Image 8](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)Click Add platform dropdown, and select Slack option. -[![Image 8](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c17b5527fae1a4c5bc57_install-3.svg)![Image 9](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +4 -Click Add platform dropdown, and select Slack option. +[![Image 9](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c191387a00b2b474e1b3_install-5.svg) ![Image 10](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)Click Add to Slack button to add Cloud integration for Slack to your Slack workspace. -4. +5 -[![Image 10](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c191387a00b2b474e1b3_install-5.svg)![Image 11](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 11](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c4fab232b58125653577_install-6.svg) ![Image 12](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)Click Allow to grant permission for Botkube Cloud App for Slack to access your Slack workspace. -Click Add to Slack button to add Cloud integration for Slack to your Slack workspace. +6 -5. +[![Image 13](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c505324fd1b24eeb1ab6_install-7.svg) ![Image 14](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)Provide the details as described follows and click Next button. -[![Image 12](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c4fab232b58125653577_install-6.svg)![Image 13](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +7 -Click Allow to grant permission for Botkube Cloud App for Slack to access your Slack workspace. +[![Image 15](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c510d21725cf9c03a0c9_install-8.svg) ![Image 16](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)Add plugins you want 
to enable in your Botkube instance and click Next button. -6. +8 -[![Image 14](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c505324fd1b24eeb1ab6_install-7.svg)![Image 15](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 17](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c51cd898dab566fcb743_install-9.svg) ![Image 18](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)Include optional default aliases and default actions and click Create button to create Botkube Cloud instance. -Provide the details as described follows and click Next button. +9 -7. - -[![Image 16](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c510d21725cf9c03a0c9_install-8.svg)![Image 17](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) - -Add plugins you want 
to enable in your Botkube instance and click Next button. - -8. - -[![Image 18](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c51cd898dab566fcb743_install-9.svg)![Image 19](https://cdn.prod.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](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c528a593ecc0b3dcfa98_install-10.svg)![Image 21](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) - -Follow the instructions 
in the summary page to deploy Botkube into your environment. +[![Image 19](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/6500c528a593ecc0b3dcfa98_install-10.svg) ![Image 20](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)Follow the instructions 
in the summary page to deploy Botkube into your environment. #### Prerequisites @@ -83,34 +68,32 @@ NOTE: If you downgrade a paid subscription to the Free plan, you will not be ab Steps to get started with Botkube --------------------------------- -1. +1 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](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b312e6823f3bf4930026a_step1-cloud-help_pr.svg)![Image 23](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 21](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b312e6823f3bf4930026a_step1-cloud-help_pr.svg) ![Image 22](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) -2. +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](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b321b09f2a16899841a41_step2-cloud-instance_pr.svg)![Image 25](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 23](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b321b09f2a16899841a41_step2-cloud-instance_pr.svg) ![Image 24](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) -3. +3 Once a Botkube command is executed, it will be handled on target Kubernetes cluster specified with \--cluster-name flag. However, 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}. 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](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b3312250c2fba277c8242_step3-cloud-set-default_pr.svg)![Image 27](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)[![Image 28](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b338d0d105309da63525e_step3-5-cloud-command-all-clusters_pr.svg)![Image 29](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) - -4. +4 1\. Go to Botkube Cloud instances page and click Manage button of the instance you want to remove. -[![Image 30](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b3581864c2eaa967f7417_step4-cloud_list_manage_pr.svg)![Image 31](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 25](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b3581864c2eaa967f7417_step4-cloud_list_manage_pr.svg) ![Image 26](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) -5. +5 2\. Click Delete instance button, type instance name in the popup and click Delete instance. -[![Image 32](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b35df6390bea044f2eb3b_step5-cloud_delete_pr.svg)![Image 33](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) +[![Image 27](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650b35df6390bea044f2eb3b_step5-cloud_delete_pr.svg) ![Image 28](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) diff --git a/hack/assistant-setup/content/botkube.io__support.md b/hack/assistant-setup/content/botkube.io__support.md index 5497a76..23bdfca 100644 --- a/hack/assistant-setup/content/botkube.io__support.md +++ b/hack/assistant-setup/content/botkube.io__support.md @@ -19,50 +19,26 @@ Book a meeting with Botkube’s Product Manager, Blair Rampling to help you get FAQ --- -Can I integrate Botkube with other tools I use? - -![Image 4](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +#### Can I integrate Botkube with other tools I use? 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](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +#### Can I customize the notifications I receive from Botkube? 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](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +#### What messaging platforms does Botkube work with? 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](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +#### How do I install Botkube? (Link to installation guide) 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](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) +#### What is Botkube and what does it do? 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. -![Image 9: Monitoring Kubernetes notifications in chat platforms](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif) - -### Need help with Botkube? - -We're happy to assist! - -The quickest way to receive help regarding onboarding, configuration issues,  or anything else is directly through our web app. Once logged in to [Botkube's Dashboard](http://app.botkube.io/) - -, 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 10](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/64de5389c7d816d1f6530501_botkube-status-icon.svg) - -Check the status of Botkube [here.](https://status.botkube.io/) - Open Source with Commercial Support ----------------------------------- @@ -75,11 +51,11 @@ We make sure that we provide you with a tailored plan that adapts and scales bas Preferred partner for Professional Services ------------------------------------------- -![Image 11](https://cdn.prod.website-files.com/62db9be2f8784874ca1d38f9/635ac53661d8b0db3823b3be_infracloud-logo.svg) +![Image 4](https://cdn.prod.website-files.com/62db9be2f8784874ca1d38f9/635ac53661d8b0db3823b3be_infracloud-logo.svg) Unleashing growth by helping companies adopt cloud-native technologies with their products and services. -![Image 12](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/635ae205469f133b0890a773_pro-service-img.svg) +![Image 5](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/635ae205469f133b0890a773_pro-service-img.svg) ### Your extended team for all things related to Cloud Native & DevOps @@ -98,7 +74,7 @@ Managed Services For Kubernetes Stay in the Loop ---------------- -![Image 13: Kusk Kubernetes ](https://cdn.prod.website-files.com/633705de6adaa38599d8e258/636d3117b8612105c60e0bd9_botkube-front-right.svg) +![Image 6: Kusk Kubernetes ](https://cdn.prod.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__tags__ai.md b/hack/assistant-setup/content/botkube.io__tags__ai.md index cdeef63..a0407e6 100644 --- a/hack/assistant-setup/content/botkube.io__tags__ai.md +++ b/hack/assistant-setup/content/botkube.io__tags__ai.md @@ -52,19 +52,21 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/66606d276e2694f36bd840eb_K8s-post-mortem%2BRCAs.png) Jun 4, 2024 10 read ### Streamline Kubernetes Post-Mortems with Botkube's AI Assistant One of the most time-consuming yet essential tasks that DevOps teams face is the Root Cause Analysis (RCA) and generation of Post Mortem Reports after incidents.](https://botkube.io/blog/kubernetes-post-mortems) +[![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/666b47533624fe288ca8fbbc_BLOG_Thumbnail_Announcement.png) Jun 13, 2024 3min read ### Improve Your Kubernetes Health Checks with Botkube Assistant's Cluster Scan Transform Kubernetes monitoring with Botkube Assistants cluster scan. Get real-time insights, detailed analysis, and actionable recommendations to optimize performance and reduce downtime.](https://botkube.io/blog/improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan) -[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6644e5d498e2ed722f5424d6_BLOG_Thumbnail%20(7).png) May 15, 2024 4min read ### Start Troubleshooting K8s Faster with Botkube’s Latest Improvements Learn about the latest v1.11 release, including an update to the AI-powered Botkube Assistant to view current environment configurations, set-up tasks, and more.](https://botkube.io/blog/start-troubleshooting-k8s-faster-with-botkubes-latest-improvements) +[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/66606d276e2694f36bd840eb_K8s-post-mortem%2BRCAs.png) Jun 4, 2024 10 read ### Streamline Kubernetes Post-Mortems with Botkube's AI Assistant One of the most time-consuming yet essential tasks that DevOps teams face is the Root Cause Analysis (RCA) and generation of Post Mortem Reports after incidents.](https://botkube.io/blog/kubernetes-post-mortems) -[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7d7f3f6390196bf27e83_UC%20(1).png) May 8, 2024 read ### Simplify Kubernetes Security Troubleshooting with AI Learn how Botkube can streamline troubleshooting and help overcome common Kubernetes PSA-related issues](https://botkube.io/blog/simplify-kubernetes-security-troubleshooting-with-ai) +[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6644e5d498e2ed722f5424d6_BLOG_Thumbnail%20(7).png) May 15, 2024 4min read ### Start Troubleshooting K8s Faster with Botkube’s Latest Improvements Learn about the latest v1.11 release, including an update to the AI-powered Botkube Assistant to view current environment configurations, set-up tasks, and more.](https://botkube.io/blog/start-troubleshooting-k8s-faster-with-botkubes-latest-improvements) -[![Image 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b8809695cf669f14f2a54_Level%20Up%20SRE%20Workflow%20Automating%20Manual%20Tasks%20with%20Botkube%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 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7d7f3f6390196bf27e83_UC%20(1).png) May 8, 2024 read ### Simplify Kubernetes Security Troubleshooting with AI Learn how Botkube can streamline troubleshooting and help overcome common Kubernetes PSA-related issues](https://botkube.io/blog/simplify-kubernetes-security-troubleshooting-with-ai) -[![Image 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64a70cf0a7f079f477b8a7c9_Botkube%20BLOG%20Thumbnail%20(2).png) Mar 11, 2024 5 mins 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 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b8809695cf669f14f2a54_Level%20Up%20SRE%20Workflow%20Automating%20Manual%20Tasks%20with%20Botkube%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 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7c6f88f3facaf5490a44_BLOG_Thumbnail.png) Mar 6, 2024 5 mins read ### Four 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 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64a70cf0a7f079f477b8a7c9_Botkube%20BLOG%20Thumbnail%20(2).png) Mar 11, 2024 5 mins 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 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b88a8597c3abe0e852fb8_Announ%20(1).png) Mar 6, 2024 5min read ### Real-Time Platform Engineer Advice with Botkube's AI Assistant 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.](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) +[![Image 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7c6f88f3facaf5490a44_BLOG_Thumbnail.png) Mar 6, 2024 5 mins read ### Four 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 9](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b88a8597c3abe0e852fb8_Announ%20(1).png) Mar 6, 2024 5min read ### Real-Time Platform Engineer Advice with Botkube's AI Assistant 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.](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) < @@ -72,4 +74,4 @@ Tag: \> -[![Image 9: 2 Ways AI Assistants Are Changing Kubernetes Troubleshooting](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/662677b3a13af173215d9bb4_d428b6a6-ai-changing-kubernetes-troubleshooting-1024x576.jpg) Apr 8, 2024 7 min read ### 2 Ways AI Assistants Are Changing Kubernetes Troubleshooting AI that mimics how humans approach troubleshooting can democratize and improve how people identify and fix Kubernetes issues.](https://thenewstack.io/2-ways-ai-assistants-are-changing-kubernetes-troubleshooting/) +[![Image 10: 2 Ways AI Assistants Are Changing Kubernetes Troubleshooting](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/662677b3a13af173215d9bb4_d428b6a6-ai-changing-kubernetes-troubleshooting-1024x576.jpg) Apr 8, 2024 7 min read ### 2 Ways AI Assistants Are Changing Kubernetes Troubleshooting AI that mimics how humans approach troubleshooting can democratize and improve how people identify and fix Kubernetes issues.](https://thenewstack.io/2-ways-ai-assistants-are-changing-kubernetes-troubleshooting/) diff --git a/hack/assistant-setup/content/botkube.io__tags__aiops.md b/hack/assistant-setup/content/botkube.io__tags__aiops.md index 5cb7395..1c09d39 100644 --- a/hack/assistant-setup/content/botkube.io__tags__aiops.md +++ b/hack/assistant-setup/content/botkube.io__tags__aiops.md @@ -52,17 +52,19 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6644e5d498e2ed722f5424d6_BLOG_Thumbnail%20(7).png) May 15, 2024 4min read ### Start Troubleshooting K8s Faster with Botkube’s Latest Improvements Learn about the latest v1.11 release, including an update to the AI-powered Botkube Assistant to view current environment configurations, set-up tasks, and more.](https://botkube.io/blog/start-troubleshooting-k8s-faster-with-botkubes-latest-improvements) +[![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/666b47533624fe288ca8fbbc_BLOG_Thumbnail_Announcement.png) Jun 13, 2024 3min read ### Improve Your Kubernetes Health Checks with Botkube Assistant's Cluster Scan Transform Kubernetes monitoring with Botkube Assistants cluster scan. Get real-time insights, detailed analysis, and actionable recommendations to optimize performance and reduce downtime.](https://botkube.io/blog/improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan) -[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7d7f3f6390196bf27e83_UC%20(1).png) May 8, 2024 read ### Simplify Kubernetes Security Troubleshooting with AI Learn how Botkube can streamline troubleshooting and help overcome common Kubernetes PSA-related issues](https://botkube.io/blog/simplify-kubernetes-security-troubleshooting-with-ai) +[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6644e5d498e2ed722f5424d6_BLOG_Thumbnail%20(7).png) May 15, 2024 4min read ### Start Troubleshooting K8s Faster with Botkube’s Latest Improvements Learn about the latest v1.11 release, including an update to the AI-powered Botkube Assistant to view current environment configurations, set-up tasks, and more.](https://botkube.io/blog/start-troubleshooting-k8s-faster-with-botkubes-latest-improvements) -[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b8809695cf669f14f2a54_Level%20Up%20SRE%20Workflow%20Automating%20Manual%20Tasks%20with%20Botkube%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 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7d7f3f6390196bf27e83_UC%20(1).png) May 8, 2024 read ### Simplify Kubernetes Security Troubleshooting with AI Learn how Botkube can streamline troubleshooting and help overcome common Kubernetes PSA-related issues](https://botkube.io/blog/simplify-kubernetes-security-troubleshooting-with-ai) -[![Image 5](https://cdn.prod.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 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b8809695cf669f14f2a54_Level%20Up%20SRE%20Workflow%20Automating%20Manual%20Tasks%20with%20Botkube%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 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64a70cf0a7f079f477b8a7c9_Botkube%20BLOG%20Thumbnail%20(2).png) Mar 11, 2024 5 mins 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 6](https://cdn.prod.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 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b88a8597c3abe0e852fb8_Announ%20(1).png) Mar 6, 2024 5min read ### Real-Time Platform Engineer Advice with Botkube's AI Assistant 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.](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) +[![Image 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64a70cf0a7f079f477b8a7c9_Botkube%20BLOG%20Thumbnail%20(2).png) Mar 11, 2024 5 mins 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 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b88a8597c3abe0e852fb8_Announ%20(1).png) Mar 6, 2024 5min read ### Real-Time Platform Engineer Advice with Botkube's AI Assistant 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.](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) < @@ -70,4 +72,4 @@ Tag: \> -[![Image 8: 2 Ways AI Assistants Are Changing Kubernetes Troubleshooting](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/662677b3a13af173215d9bb4_d428b6a6-ai-changing-kubernetes-troubleshooting-1024x576.jpg) Apr 8, 2024 7 min read ### 2 Ways AI Assistants Are Changing Kubernetes Troubleshooting AI that mimics how humans approach troubleshooting can democratize and improve how people identify and fix Kubernetes issues.](https://thenewstack.io/2-ways-ai-assistants-are-changing-kubernetes-troubleshooting/) +[![Image 9: 2 Ways AI Assistants Are Changing Kubernetes Troubleshooting](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/662677b3a13af173215d9bb4_d428b6a6-ai-changing-kubernetes-troubleshooting-1024x576.jpg) Apr 8, 2024 7 min read ### 2 Ways AI Assistants Are Changing Kubernetes Troubleshooting AI that mimics how humans approach troubleshooting can democratize and improve how people identify and fix Kubernetes issues.](https://thenewstack.io/2-ways-ai-assistants-are-changing-kubernetes-troubleshooting/) 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 25c3a16..cbcd5be 100644 --- a/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md +++ b/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md @@ -52,31 +52,33 @@ Oops! Something went wrong while submitting the form. Tag: ---- -[![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6662eb9c54425e656e6f3689_PARTNERSHIPS_Thumbnail%20(1).png) Jun 7, 2024 3min read ### Take Control of K8s Incident Management Alerts with Botkube and PagerDuty Customize Botkube alerts to automatically create PagerDuty tickets, streamline incident management, reduce manual work, and improve response times.](https://botkube.io/blog/take-control-of-k8s-incident-management-alerts-with-botkube-and-pagerduty) +[![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/666b47533624fe288ca8fbbc_BLOG_Thumbnail_Announcement.png) Jun 13, 2024 3min read ### Improve Your Kubernetes Health Checks with Botkube Assistant's Cluster Scan Transform Kubernetes monitoring with Botkube Assistants cluster scan. Get real-time insights, detailed analysis, and actionable recommendations to optimize performance and reduce downtime.](https://botkube.io/blog/improve-your-kubernetes-health-checks-with-botkubes-ai-powered-cluster-scan) -[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7c6f88f3facaf5490a44_BLOG_Thumbnail.png) Mar 6, 2024 5 mins read ### Four 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 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6662eb9c54425e656e6f3689_PARTNERSHIPS_Thumbnail%20(1).png) Jun 7, 2024 3min read ### Take Control of K8s Incident Management Alerts with Botkube and PagerDuty Customize Botkube alerts to automatically create PagerDuty tickets, streamline incident management, reduce manual work, and improve response times.](https://botkube.io/blog/take-control-of-k8s-incident-management-alerts-with-botkube-and-pagerduty) -[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b88a8597c3abe0e852fb8_Announ%20(1).png) Mar 6, 2024 5min read ### Real-Time Platform Engineer Advice with Botkube's AI Assistant 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.](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) +[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/656795982e12e17904b3fe13_Botkube%20BLOG%20Thumbnail%20(7).png) May 20, 2024 5 minutes read ### Revolutionize Kubernetes Troubleshooting with Microsoft Teams and Botkube Learn more about Botkube's new and improved Microsoft Teams support!](https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube) -[![Image 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b87600c0bddca44ba8b4c_Tutor%20(1).png) Feb 8, 2024 5 mins read ### Empowering Your Kubernetes Multi-Cluster Observability with Intelligent Monitoring Discover how Botkube optimizes multi-cluster Kubernetes observability with automation, real time alerts and more..](https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring) +[![Image 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7c6f88f3facaf5490a44_BLOG_Thumbnail.png) Mar 6, 2024 5 mins read ### Four 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 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/65aecbf230cfa0a0cbf61fe7_Botkube_cover%20for%20blog_onsite_Tutorial.png) Jan 19, 2024 8min read ### Streamlining Kubernetes Management: A Closer Look at Botkube ChatOps Learn about Botkube from Rohit Ghumare, Google Developer Expert – Google Cloud and CNCF Ambassador.](https://botkube.io/blog/streamlining-kubernetes-management-a-closer-look-at-botkube-chatops) +[![Image 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b88a8597c3abe0e852fb8_Announ%20(1).png) Mar 6, 2024 5min read ### Real-Time Platform Engineer Advice with Botkube's AI Assistant 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.](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) -[![Image 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7c6f88f3facaf5490a44_BLOG_Thumbnail.png) Jan 16, 2024 10 minutes read ### 5 Essential DevOps Tasks to Automate Optimize K8s Management Check out these five key Kubernetes tasks that Botkube can optimize and automate!](https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate) +[![Image 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b87600c0bddca44ba8b4c_Tutor%20(1).png) Feb 8, 2024 5 mins read ### Empowering Your Kubernetes Multi-Cluster Observability with Intelligent Monitoring Discover how Botkube optimizes multi-cluster Kubernetes observability with automation, real time alerts and more..](https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring) -[![Image 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/65a0752a25015c7f9b034859_Botkube%20BLOG%20Thumbnail%20(7).png) Jan 11, 2024 10 mins read ### 5 Essential Kubernetes Troubleshooting + Monitoring Tasks to Automate Learn how to simplify DevOps tasks directly within your favorite communication platform like Slack and Microsoft Teams](https://botkube.io/blog/five-essential-kubernetes-tasks) +[![Image 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/65aecbf230cfa0a0cbf61fe7_Botkube_cover%20for%20blog_onsite_Tutorial.png) Jan 19, 2024 8min read ### Streamlining Kubernetes Management: A Closer Look at Botkube ChatOps Learn about Botkube from Rohit Ghumare, Google Developer Expert – Google Cloud and CNCF Ambassador.](https://botkube.io/blog/streamlining-kubernetes-management-a-closer-look-at-botkube-chatops) -[![Image 9](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6579542d18e44144c36b5735_thumbnail.jpg) Dec 14, 2023 6 minutes read ### Microsoft Teams Integration for Botkube: A Technical Journey Discover the technical journey behind enhancing Microsoft Teams integration for Botkube. Learn about user-inspired improvements, system design for the refined multi-cluster solution.](https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey) +[![Image 9](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7c6f88f3facaf5490a44_BLOG_Thumbnail.png) Jan 16, 2024 10 minutes read ### 5 Essential DevOps Tasks to Automate Optimize K8s Management Check out these five key Kubernetes tasks that Botkube can optimize and automate!](https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate) -[![Image 10](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/656795982e12e17904b3fe13_Botkube%20BLOG%20Thumbnail%20(7).png) Nov 29, 2023 5 minutes read ### Revolutionize Kubernetes Troubleshooting with Microsoft Teams and Botkube Learn more about Botkube's new and improved Microsoft Teams support!](https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube) +[![Image 10](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/65a0752a25015c7f9b034859_Botkube%20BLOG%20Thumbnail%20(7).png) Jan 11, 2024 10 mins read ### 5 Essential Kubernetes Troubleshooting + Monitoring Tasks to Automate Learn how to simplify DevOps tasks directly within your favorite communication platform like Slack and Microsoft Teams](https://botkube.io/blog/five-essential-kubernetes-tasks) -[![Image 11](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/650e09ff5316cd298f191b0a_Blog_Thumbnail.jpg) Sep 22, 2023 5 minutes read ### Argo & Botkube: A Match Made in Heaven? Argo CD now integrates with Botkube, allowing users to receive and interact with notifications in Slack, Discord, and more.](https://botkube.io/blog/argo-cd-botkube-integration) +[![Image 11](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6579542d18e44144c36b5735_thumbnail.jpg) Dec 14, 2023 6 minutes read ### Microsoft Teams Integration for Botkube: A Technical Journey Discover the technical journey behind enhancing Microsoft Teams integration for Botkube. Learn about user-inspired improvements, system design for the refined multi-cluster solution.](https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey) -[![Image 12](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64f21dfb51c3be1367d4b8d1_fluxtutorial.png) Sep 1, 2023 10 mins read ### Tutorial: Streamlining GitOps with the Botkube Flux Plugin Learn how to set up Botkube with Flux and GitHub-events plugins in this step-by-step tutorial. Configure permissions, insert tokens, and install seamlessly.](https://botkube.io/blog/streamlining-gitops-with-the-botkube-flux-plugin) +[![Image 12](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/650e09ff5316cd298f191b0a_Blog_Thumbnail.jpg) Sep 22, 2023 5 minutes read ### Argo & Botkube: A Match Made in Heaven? Argo CD now integrates with Botkube, allowing users to receive and interact with notifications in Slack, Discord, and more.](https://botkube.io/blog/argo-cd-botkube-integration) -[![Image 13](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64ecb730a3952f567c41d23f_Botkube%20BLOG%20Thumbnail%20(4).png) Aug 28, 2023 5 mins read ### Introducing Botkube's Integration with Flux As the demand for seamless scalability and efficient teamwork increases, an innovative solution is needed. Enter the Botkube Flux integration to tackle collaboration, automation, and scaling head-on.](https://botkube.io/blog/introducing-botkubes-integration-with-flux) +[![Image 13](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64f21dfb51c3be1367d4b8d1_fluxtutorial.png) Sep 1, 2023 10 mins read ### Tutorial: Streamlining GitOps with the Botkube Flux Plugin Learn how to set up Botkube with Flux and GitHub-events plugins in this step-by-step tutorial. Configure permissions, insert tokens, and install seamlessly.](https://botkube.io/blog/streamlining-gitops-with-the-botkube-flux-plugin) -[![Image 14](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64d509152809af262b5e68c2_Botkube%20BLOG%20Thumbnail.png) Aug 9, 2023 6min read ### Seamlessly Migrate from Botkube Open Source to Cloud With our new CLI migration tool, current open-source users are able to migrate their data and configurations over to Botkube Cloud in minutes.](https://botkube.io/blog/botkube-open-source-to-cloud-migration) +[![Image 14](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64ecb730a3952f567c41d23f_Botkube%20BLOG%20Thumbnail%20(4).png) Aug 28, 2023 5 mins read ### Introducing Botkube's Integration with Flux As the demand for seamless scalability and efficient teamwork increases, an innovative solution is needed. Enter the Botkube Flux integration to tackle collaboration, automation, and scaling head-on.](https://botkube.io/blog/introducing-botkubes-integration-with-flux) + +[![Image 15](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/64d509152809af262b5e68c2_Botkube%20BLOG%20Thumbnail.png) Aug 9, 2023 6min read ### Seamlessly Migrate from Botkube Open Source to Cloud With our new CLI migration tool, current open-source users are able to migrate their data and configurations over to Botkube Cloud in minutes.](https://botkube.io/blog/botkube-open-source-to-cloud-migration) < diff --git a/hack/assistant-setup/content/botkube.io__tags__kubecon.md b/hack/assistant-setup/content/botkube.io__tags__kubecon.md index d75a1f8..97c80ad 100644 --- a/hack/assistant-setup/content/botkube.io__tags__kubecon.md +++ b/hack/assistant-setup/content/botkube.io__tags__kubecon.md @@ -54,10 +54,10 @@ Tag: [![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6451f12eb912157ceaf7fbb3_bk-amsterdam.png) May 4, 2023 5 minutes read ### Botkube takes on Amsterdam: A Kubecon Recap The Kubecon Amsterdam conference was a wild ride, filled with exciting announcements, insightful talks, and countless networking opportunities.](https://botkube.io/blog/botkube-takes-on-amsterdam-a-kubecon-recap) -< +[<](#) -1 +[1](#) -\> +[\>](#) No items found. diff --git a/hack/assistant-setup/content/botkube.io__tags__kubernetes.md b/hack/assistant-setup/content/botkube.io__tags__kubernetes.md index 8571004..f0b2d64 100644 --- a/hack/assistant-setup/content/botkube.io__tags__kubernetes.md +++ b/hack/assistant-setup/content/botkube.io__tags__kubernetes.md @@ -54,21 +54,21 @@ Tag: [![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/664c8bed801d7ed2898141ba_PARTNERSHIPS_Thumbnail.png) May 21, 2024 2min read ### Botkube is Now Verified in Microsoft AppSource! It's official: Botkube has undergone security and compliance checks by Microsoft to become verified in the AppSource Marketplace—strengthening user experience and our partnership with Microsoft.](https://botkube.io/blog/botkube-is-now-verified-in-microsoft-appsource) -[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6644e5d498e2ed722f5424d6_BLOG_Thumbnail%20(7).png) May 15, 2024 4min read ### Start Troubleshooting K8s Faster with Botkube’s Latest Improvements Learn about the latest v1.11 release, including an update to the AI-powered Botkube Assistant to view current environment configurations, set-up tasks, and more.](https://botkube.io/blog/start-troubleshooting-k8s-faster-with-botkubes-latest-improvements) +[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/656795982e12e17904b3fe13_Botkube%20BLOG%20Thumbnail%20(7).png) May 20, 2024 5 minutes read ### Revolutionize Kubernetes Troubleshooting with Microsoft Teams and Botkube Learn more about Botkube's new and improved Microsoft Teams support!](https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube) -[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7d7f3f6390196bf27e83_UC%20(1).png) May 8, 2024 read ### Simplify Kubernetes Security Troubleshooting with AI Learn how Botkube can streamline troubleshooting and help overcome common Kubernetes PSA-related issues](https://botkube.io/blog/simplify-kubernetes-security-troubleshooting-with-ai) +[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6540077fe681eba27afc9f78_Blog_Thumbnail%20(2).jpg) May 20, 2024 10 minutes read ### Maximize Your DevOps Teams Efficiency with Botkube + Microsoft Teams Get Botkube up and running with Microsoft Teams in less than 5 mins with this walk-through tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) -[![Image 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b8809695cf669f14f2a54_Level%20Up%20SRE%20Workflow%20Automating%20Manual%20Tasks%20with%20Botkube%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 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6644e5d498e2ed722f5424d6_BLOG_Thumbnail%20(7).png) May 15, 2024 4min read ### Start Troubleshooting K8s Faster with Botkube’s Latest Improvements Learn about the latest v1.11 release, including an update to the AI-powered Botkube Assistant to view current environment configurations, set-up tasks, and more.](https://botkube.io/blog/start-troubleshooting-k8s-faster-with-botkubes-latest-improvements) -[![Image 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b87600c0bddca44ba8b4c_Tutor%20(1).png) Feb 8, 2024 5 mins read ### Empowering Your Kubernetes Multi-Cluster Observability with Intelligent Monitoring Discover how Botkube optimizes multi-cluster Kubernetes observability with automation, real time alerts and more..](https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring) +[![Image 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7d7f3f6390196bf27e83_UC%20(1).png) May 8, 2024 read ### Simplify Kubernetes Security Troubleshooting with AI Learn how Botkube can streamline troubleshooting and help overcome common Kubernetes PSA-related issues](https://botkube.io/blog/simplify-kubernetes-security-troubleshooting-with-ai) -[![Image 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7c6f88f3facaf5490a44_BLOG_Thumbnail.png) Jan 16, 2024 10 minutes read ### 5 Essential DevOps Tasks to Automate Optimize K8s Management Check out these five key Kubernetes tasks that Botkube can optimize and automate!](https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate) +[![Image 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b8809695cf669f14f2a54_Level%20Up%20SRE%20Workflow%20Automating%20Manual%20Tasks%20with%20Botkube%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 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6579542d18e44144c36b5735_thumbnail.jpg) Dec 14, 2023 6 minutes read ### Microsoft Teams Integration for Botkube: A Technical Journey Discover the technical journey behind enhancing Microsoft Teams integration for Botkube. Learn about user-inspired improvements, system design for the refined multi-cluster solution.](https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey) +[![Image 8](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b87600c0bddca44ba8b4c_Tutor%20(1).png) Feb 8, 2024 5 mins read ### Empowering Your Kubernetes Multi-Cluster Observability with Intelligent Monitoring Discover how Botkube optimizes multi-cluster Kubernetes observability with automation, real time alerts and more..](https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring) -[![Image 9](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/656795982e12e17904b3fe13_Botkube%20BLOG%20Thumbnail%20(7).png) Nov 29, 2023 5 minutes read ### Revolutionize Kubernetes Troubleshooting with Microsoft Teams and Botkube Learn more about Botkube's new and improved Microsoft Teams support!](https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube) +[![Image 9](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/663b7c6f88f3facaf5490a44_BLOG_Thumbnail.png) Jan 16, 2024 10 minutes read ### 5 Essential DevOps Tasks to Automate Optimize K8s Management Check out these five key Kubernetes tasks that Botkube can optimize and automate!](https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate) -[![Image 10](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6540077fe681eba27afc9f78_Blog_Thumbnail%20(2).jpg) Nov 29, 2023 10 minutes read ### Maximize Your DevOps Teams Efficiency with Botkube + Microsoft Teams Get Botkube up and running with Microsoft Teams in less than 5 mins with this walk-through tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) +[![Image 10](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6579542d18e44144c36b5735_thumbnail.jpg) Dec 14, 2023 6 minutes read ### Microsoft Teams Integration for Botkube: A Technical Journey Discover the technical journey behind enhancing Microsoft Teams integration for Botkube. Learn about user-inspired improvements, system design for the refined multi-cluster solution.](https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey) [![Image 11](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6549524dce34941644b6b252_Botkube%20BLOG%20Thumbnail%20(OLD).jpg) Nov 6, 2023 3 minutes read ### Get Botkube Running in Under 3 Minutes the New Slack App Life is short, install quickly - Learn how to get started with Botkube and Slack](https://botkube.io/blog/get-botkube-running-in-under-3-minutes-the-new-slack-app) 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 f5ea76f..2243b84 100644 --- a/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md +++ b/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md @@ -56,11 +56,11 @@ Tag: [![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/664c8bed801d7ed2898141ba_PARTNERSHIPS_Thumbnail.png) May 21, 2024 2min read ### Botkube is Now Verified in Microsoft AppSource! It's official: Botkube has undergone security and compliance checks by Microsoft to become verified in the AppSource Marketplace—strengthening user experience and our partnership with Microsoft.](https://botkube.io/blog/botkube-is-now-verified-in-microsoft-appsource) -[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6579542d18e44144c36b5735_thumbnail.jpg) Dec 14, 2023 6 minutes read ### Microsoft Teams Integration for Botkube: A Technical Journey Discover the technical journey behind enhancing Microsoft Teams integration for Botkube. Learn about user-inspired improvements, system design for the refined multi-cluster solution.](https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey) +[![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/656795982e12e17904b3fe13_Botkube%20BLOG%20Thumbnail%20(7).png) May 20, 2024 5 minutes read ### Revolutionize Kubernetes Troubleshooting with Microsoft Teams and Botkube Learn more about Botkube's new and improved Microsoft Teams support!](https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube) -[![Image 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/656795982e12e17904b3fe13_Botkube%20BLOG%20Thumbnail%20(7).png) Nov 29, 2023 5 minutes read ### Revolutionize Kubernetes Troubleshooting with Microsoft Teams and Botkube Learn more about Botkube's new and improved Microsoft Teams support!](https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube) +[![Image 5](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6540077fe681eba27afc9f78_Blog_Thumbnail%20(2).jpg) May 20, 2024 10 minutes read ### Maximize Your DevOps Teams Efficiency with Botkube + Microsoft Teams Get Botkube up and running with Microsoft Teams in less than 5 mins with this walk-through tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) -[![Image 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6540077fe681eba27afc9f78_Blog_Thumbnail%20(2).jpg) Nov 29, 2023 10 minutes read ### Maximize Your DevOps Teams Efficiency with Botkube + Microsoft Teams Get Botkube up and running with Microsoft Teams in less than 5 mins with this walk-through tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) +[![Image 6](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6579542d18e44144c36b5735_thumbnail.jpg) Dec 14, 2023 6 minutes read ### Microsoft Teams Integration for Botkube: A Technical Journey Discover the technical journey behind enhancing Microsoft Teams integration for Botkube. Learn about user-inspired improvements, system design for the refined multi-cluster solution.](https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey) [![Image 7](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6564ee17a4dfd5171531b84d_Blog_Thumbnail%20(33).png) Nov 27, 2023 4min read ### Rapid Onboarding of Microsoft Teams and Slack This release marks a milestone in providing a smoother and faster path to Kubernetes monitoring and management with upgraded integrations of Slack and Microsoft Teams.](https://botkube.io/blog/botkube-1-6-release) diff --git a/hack/assistant-setup/content/botkube.io__tags__tutorial.md b/hack/assistant-setup/content/botkube.io__tags__tutorial.md index 6c33216..4fcbb34 100644 --- a/hack/assistant-setup/content/botkube.io__tags__tutorial.md +++ b/hack/assistant-setup/content/botkube.io__tags__tutorial.md @@ -54,7 +54,7 @@ Tag: [![Image 2](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/66606d276e2694f36bd840eb_K8s-post-mortem%2BRCAs.png) Jun 4, 2024 10 read ### Streamline Kubernetes Post-Mortems with Botkube's AI Assistant One of the most time-consuming yet essential tasks that DevOps teams face is the Root Cause Analysis (RCA) and generation of Post Mortem Reports after incidents.](https://botkube.io/blog/kubernetes-post-mortems) -[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6540077fe681eba27afc9f78_Blog_Thumbnail%20(2).jpg) Nov 29, 2023 10 minutes read ### Maximize Your DevOps Teams Efficiency with Botkube + Microsoft Teams Get Botkube up and running with Microsoft Teams in less than 5 mins with this walk-through tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) +[![Image 3](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6540077fe681eba27afc9f78_Blog_Thumbnail%20(2).jpg) May 20, 2024 10 minutes read ### Maximize Your DevOps Teams Efficiency with Botkube + Microsoft Teams Get Botkube up and running with Microsoft Teams in less than 5 mins with this walk-through tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) [![Image 4](https://cdn.prod.website-files.com/634fabb21508d6c9db9bc46f/6540077fe681eba27afc9f78_Blog_Thumbnail%20(2).jpg) Oct 30, 2023 15 min read ### Integrating Microsoft Teams with Azure for K8s Deployments Botkube is entering the MS teams world](https://botkube.io/blog/integrating-microsoft-teams-with-azure-for-kubernetes-deployments) diff --git a/hack/assistant-setup/content/botkube.io__terms-and-conditions.md b/hack/assistant-setup/content/botkube.io__terms-and-conditions.md index 96a48a9..41b7668 100644 --- a/hack/assistant-setup/content/botkube.io__terms-and-conditions.md +++ b/hack/assistant-setup/content/botkube.io__terms-and-conditions.md @@ -3,7 +3,10 @@ Title: Terms and Conditions URL Source: https://botkube.io/terms-and-conditions Markdown Content: -Last updated March 8,2023 +Botkube Terms and Conditions +---------------------------- + +_Last updated March 8,2023_ ### TABLE OF CONTENTS @@ -187,12 +190,8 @@ You hereby waive any and all defenses You may have based on the electronic form In order to resolve a complaint regarding the Services or to receive further information regarding use of the Services, please contact Us at: -Kubernetes Innovation Labs LLC - -20 Brynwood Ln, Greenwich, CT 06831, USA - -Greenwich, CT 06831 - -United States - -[frontdesk@kubeshop.io](mailto:frontdesk@kubeshop.io) +Kubernetes Innovation Labs LLC +20 Brynwood Ln, Greenwich, CT 06831, USA +Greenwich, CT 06831 +United States +‍[frontdesk@kubeshop.io](mailto:frontdesk@kubeshop.io) 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 edc3009..773c1be 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 @@ -24,7 +24,9 @@ $ botkube login # Login into Botkube Cloud $ botkube migrate # Automatically mig ### Options[​](#options "Direct link to Options") - -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) +``` ### SEE ALSO[​](#see-also "Direct link to SEE ALSO") 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 027e6dc..8a7776a 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 @@ -10,11 +10,15 @@ This command consists of multiple subcommands for working with Botkube configura ### 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 "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) +``` + -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") 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 1105f6d..fdbbcb0 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 @@ -10,19 +10,27 @@ botkube config get[​](#botkube-config-get "Direct link to botkube config get") Displays Botkube configuration - botkube config get [flags] +``` +botkube config get [flags] +``` ### Examples[​](#examples "Direct link to Examples") - # Show configuration for currently installed Botkubebotkube config get# Show configuration in JSON formatbotkube config get -ojson# Save configuration in filebotkube config get > config.yaml +``` +# Show configuration for currently installed Botkubebotkube config get# Show configuration in JSON formatbotkube config get -ojson# Save configuration in filebotkube config get > config.yaml +``` ### Options[​](#options "Direct link to Options") - --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") +``` + --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 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) +``` + -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") 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 8569aaa..9c62af8 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,14 @@ 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 be224b7..92be8ff 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 @@ -8,19 +8,27 @@ botkube login[​](#botkube-login "Direct link to botkube login") Login to a Botkube Cloud - botkube login [OPTIONS] [flags] +``` +botkube login [OPTIONS] [flags] +``` ### Examples[​](#examples "Direct link to Examples") - # start interactive setupbotkube login +``` +# start interactive setupbotkube login +``` ### Options[​](#options "Direct link to Options") - --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") +``` + --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 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) +``` + -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") 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 6ca5b3e..2bce6e5 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 @@ -9,6 +9,10 @@ Use label selector to choose which Botkube pod you want to migrate. By default i $ botkube migrate --label app=botkube --instance-name botkube-slack # Creates new Botkube Cloud instance with name botkube-slack and migrates pod with label app=botkube to it - -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 622b51d..ca09b82 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 @@ -10,11 +10,15 @@ Configure collection of anonymous analytics ### 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 "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) +``` + -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") 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 e38b6be..6a76455 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 @@ -10,19 +10,27 @@ botkube telemetry disable[​](#botkube-telemetry-disable "Direct link to botkub Disable Botkube telemetry - botkube telemetry disable [flags] +``` +botkube telemetry disable [flags] +``` ### Examples[​](#examples "Direct link to Examples") - # 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 +``` +# 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 +``` ### Options[​](#options "Direct link to Options") - -h, --help help for disable +``` + -h, --help help for disable +``` ### 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) +``` + -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") 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 d05a1ae..b6e2d74 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 @@ -10,19 +10,27 @@ botkube telemetry enable[​](#botkube-telemetry-enable "Direct link to botkube Enable Botkube telemetry - botkube telemetry enable [flags] +``` +botkube telemetry enable [flags] +``` ### Examples[​](#examples "Direct link to Examples") - # 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 +``` +# 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 +``` ### Options[​](#options "Direct link to Options") - -h, --help help for enable +``` + -h, --help help for enable +``` ### 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) +``` + -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") 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 2f71c31..803f311 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 @@ -14,19 +14,27 @@ uninstall Botkube from cluster Use this command to uninstall the Botkube agent. - botkube uninstall [OPTIONS] [flags] +``` +botkube uninstall [OPTIONS] [flags] +``` ### Examples[​](#examples "Direct link to Examples") - # Uninstall default Botkube Helm releasebotkube uninstall# Uninstall specific Botkube Helm releasebotkube uninstall --release-name botkube-dev +``` +# Uninstall default Botkube Helm releasebotkube uninstall# Uninstall specific Botkube Helm releasebotkube uninstall --release-name botkube-dev +``` ### Options[​](#options "Direct link to Options") - -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) +``` + -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 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) +``` + -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") 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 605437b..c03af39 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 @@ -17,15 +17,21 @@ Print the CLI version ### Examples[​](#examples "Direct link to Examples") - botkube versionbotkube version -o=jsonbotkube version -o=yamlbotkube version -o=short +``` +botkube versionbotkube version -o=jsonbotkube version -o=yamlbotkube version -o=short +``` ### Options[​](#options "Direct link to Options") - -h, --help help for version -o, --output string Output format. One of: json | pretty | short | yaml (default "pretty") +``` + -h, --help help for version -o, --output string Output format. One of: json | pretty | short | yaml (default "pretty") +``` ### 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) +``` + -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") 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 4b4442d..f56b33e 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 @@ -1,10 +1,13 @@ -Title: Getting Started | Botkube +Title: Botkube URL Source: https://docs.botkube.io/cli/getting-started Markdown Content: Version: 1.12 +Getting Started +--------------- + 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 "Direct link to Installation") @@ -20,13 +23,17 @@ 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.12.0/botkube-darwin-arm64chmod +x botkube && mv botkube /usr/local/bin/botkube +``` +curl -Lo botkube https://github.com/kubeshop/botkube/releases/download/v1.12.0/botkube-darwin-arm64chmod +x botkube && mv botkube /usr/local/bin/botkube +``` First use[​](#first-use "Direct link to First use") --------------------------------------------------- @@ -42,7 +49,9 @@ 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__community__contribute.md b/hack/assistant-setup/content/docs.botkube.io__community__contribute.md index 8753d98..a176edd 100644 --- a/hack/assistant-setup/content/docs.botkube.io__community__contribute.md +++ b/hack/assistant-setup/content/docs.botkube.io__community__contribute.md @@ -39,7 +39,9 @@ This section describes how to build and run Botkube from source code. Use the following command to clone it: - git clone https://github.com/kubeshop/botkube.git + ``` + git clone https://github.com/kubeshop/botkube.git + ``` ### Build and install on Kubernetes[​](#build-and-install-on-kubernetes "Direct link to Build and install on Kubernetes") @@ -54,7 +56,9 @@ This section describes how to build and run Botkube from source code. 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 + ``` + 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. @@ -68,13 +72,17 @@ This section describes how to build and run Botkube from source code. > **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 + ``` + 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} + ``` + 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. @@ -85,25 +93,35 @@ 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 + ``` + 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: @@ -119,17 +137,23 @@ For faster development, you can also build and run Botkube outside K8s cluster. 1. Start fake plugins server to serve binaries from `dist` folder: - go run test/helpers/plugin_server.go + ``` + 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 + ``` + # 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. @@ -147,7 +171,9 @@ Making A Change[​](#making-a-change "Direct link to Making A Change") * To avoid build failures in CI, install [`golangci-lint`](https://golangci-lint.run/welcome/install/) and run: - # From project root directorymake lint-fix + ``` + # From project root directorymake lint-fix + ``` This will run the `golangci-lint` tool to lint the Go code. 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 6f60cbf..3ffae2f 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 @@ -23,19 +23,27 @@ The easiest way to develop Botkube with Elasticsearch notifier enabled is to ins 1. Install ECK custom resource definitions: - kubectl create -f https://download.elastic.co/downloads/eck/2.9.0/crds.yaml + ``` + 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 + ``` + kubectl apply -f https://download.elastic.co/downloads/eck/2.9.0/operator.yaml + ``` 3. Deploy Elasticsearch: - cat < +``` +@Botkube cloud set channel-alias +``` Cleanup[​](#cleanup "Direct link to Cleanup") --------------------------------------------- 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 d2211c0..f822ec8 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 @@ -46,7 +46,9 @@ Follow the steps below to create and install Botkube App for Slack to your Slack * 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 "Direct link to Install Botkube to the Slack workspace") @@ -64,7 +66,9 @@ Follow the steps to obtain the Bot Token: 2. Export Bot for Slack 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 "Direct link to Generate and obtain App-Level Token") @@ -83,7 +87,9 @@ Follow the steps to generate an App-Level Token: 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 "Direct link to Add Botkube user to a Slack channel") @@ -95,7 +101,9 @@ Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluste 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.12.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.12.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: 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 d820c2e..05c4442 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,9 @@ 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.12.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.12.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/self-hosted-configuration). All possible installation parameters are documented [here](https://docs.botkube.io/self-hosted-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 16da383..d551127 100644 --- a/hack/assistant-setup/content/docs.botkube.io__license.md +++ b/hack/assistant-setup/content/docs.botkube.io__license.md @@ -1,8 +1,11 @@ -Title: License | Botkube +Title: Botkube URL Source: https://docs.botkube.io/license/ Markdown Content: +License +------- + MIT License[​](#mit-license "Direct link to MIT License") --------------------------------------------------------- diff --git a/hack/assistant-setup/content/docs.botkube.io__plugins__ai-assistant.md b/hack/assistant-setup/content/docs.botkube.io__plugins__ai-assistant.md index be57093..cee9a86 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__ai-assistant.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__ai-assistant.md @@ -15,17 +15,18 @@ Features[​](#features "Direct link to Features") The plugin provides the following features: * "AI Help" button for Kubernetes event analysis. -* Answering arbitrary questions or instructions. * Kubernetes cluster troubleshooting based on: * `kubectl` commands, * container logs, * Kubernetes events, * resource usage (CPU/memory). +* Kubernetes cluster scan. +* Answering arbitrary questions or instructions. +* Answering questions based on user-supplied documentation. * Answering Botkube questions or instructions based on: * Agent status and configuration, * the latest Botkube documentation and other Botkube content. * Keeping conversation context in the message threads. -* Kubernetes cluster scan. Get started[​](#get-started "Direct link to Get started") --------------------------------------------------------- @@ -73,6 +74,24 @@ Here are a few examples to get you started: The assistant can help you troubleshoot the Kubernetes cluster by performing a cluster-wide scan for any potential issues, such as failing pods, high resource usage, or any other anomalies. To start the scan, use the `@Botkube ai scan` command. +### User-supplied documentation[​](#user-supplied-documentation "Direct link to User-supplied documentation") + +info + +This feature is only available for Botkube Cloud paid plans. + +Botkube Assistant can use supplied documentation to give better answers, specific to your architecture and processes. For example: architectural documents, onboarding material, runbooks, post-mortems, etc. + +The user-supplied documentation is scoped to a given Botkube Cloud organization. + +#### Manage uploaded files[​](#manage-uploaded-files "Direct link to Manage uploaded files") + +To manage uploaded files, navigate to the ["AI Assistant"](https://app.botkube.io/ai-assistant) tab in Botkube Cloud. From the tab, you can upload files with the **Upload File(s)** button. Supported file formats include: `.doc`, `.docx`, `.md`, `.pdf`, `.txt`. See the [full list](https://platform.openai.com/docs/assistants/tools/file-search/supported-files). + +To delete file(s), select the file(s) you want to delete and click **Delete selected file(s)**. + +Once the files are uploaded, you can ask Botkube AI Assistant questions related to the uploaded content. To learn more, see the [AI questions and instructions](#ai-questions-and-instructions) section. + Configuration[​](#configuration "Direct link to Configuration") --------------------------------------------------------------- diff --git a/hack/assistant-setup/content/docs.botkube.io__plugins__argocd.md b/hack/assistant-setup/content/docs.botkube.io__plugins__argocd.md index 738e574..f7c58f4 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__argocd.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__argocd.md @@ -18,7 +18,9 @@ Get started[​](#get-started "Direct link to Get started") 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 +``` +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: @@ -42,11 +44,15 @@ You can enable the plugin as a part of Botkube instance configuration. 6. Provide at least one ArgoCD application name and namespace in the configuration. 7. Click **Save** button. - 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**. @@ -96,10 +102,14 @@ Configuration Syntax[​](#configuration-syntax "Direct link to Configuration Sy 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 "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__plugins__development__custom-executor.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__custom-executor.md index bb8fe8f..17626be 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__custom-executor.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__custom-executor.md @@ -28,15 +28,21 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") 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 + ``` + 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. @@ -44,7 +50,9 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") 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} + ``` + // 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. @@ -52,7 +60,9 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") 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} + ``` + // 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/plugins/development/interactive-messages) guide. @@ -60,7 +70,9 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") 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} + ``` + // 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. @@ -76,11 +88,15 @@ 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! 🎉 @@ -92,11 +108,15 @@ Passing configuration to your plugin[​](#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"] +``` +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} +``` +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 diff --git a/hack/assistant-setup/content/docs.botkube.io__plugins__development__custom-source.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__custom-source.md index 1bdd7b8..79dccb4 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__custom-source.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__custom-source.md @@ -28,15 +28,21 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") 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 + ``` + 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. @@ -44,7 +50,9 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") 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} + ``` + // 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. @@ -52,7 +60,9 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") 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} + ``` + // 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. @@ -64,12 +74,16 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") * 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} + ``` + // 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} + ``` + // 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") @@ -83,11 +97,15 @@ Instead of GoReleaser, you can use another tool of your choice. The important th 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! 🎉 @@ -99,6 +117,8 @@ Passing configuration to your plugin[​](#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__plugins__development__debugging.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__debugging.md index 4f28292..732703d 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__debugging.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__debugging.md @@ -15,4 +15,6 @@ 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__plugins__development__dependencies.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__dependencies.md index 47b0a0c..6b2b723 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__dependencies.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__dependencies.md @@ -11,7 +11,9 @@ 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} +``` +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: @@ -19,6 +21,8 @@ During Botkube startup, Botkube plugin manager fetches the plugin binaries along 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)) +``` +// 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__plugins__development__interactive-messages.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__interactive-messages.md index 454afb9..0f9753c 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__interactive-messages.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__interactive-messages.md @@ -20,7 +20,9 @@ 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. @@ -30,7 +32,9 @@ The `` and `` should be replaced based on your needs. You rep 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), }, }, },} +``` +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. @@ -42,13 +46,17 @@ Otherwise, each button is rendered in new line with the description on the left 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", }, }, }, }, }, },} +``` +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", }, },} +``` +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. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugins__development__local-testing.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__local-testing.md index d2f698f..c3783ad 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__local-testing.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__local-testing.md @@ -15,14 +15,18 @@ This document describes steps for running Botkube core locally together with a l 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. + ``` + 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 + ``` + # Use https://github.com/vercel/servenpx serve --listen 8080 + ``` note @@ -32,15 +36,21 @@ This document describes steps for running Botkube core locally together with a l 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: @@ -54,8 +64,12 @@ This document describes steps for running Botkube core locally together with a l 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__plugins__development__repo.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__repo.md index b03f860..1e37fdb 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__repo.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__repo.md @@ -14,7 +14,9 @@ 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. @@ -29,7 +31,9 @@ You can create the index file by yourself our use our tool to generate it automa 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: @@ -37,7 +41,9 @@ You can create the index file by yourself our use our tool to generate it automa 4. Generate an index file: - go run github.com/kubeshop/botkube/hack -binaries-path "./dist" -url-base-path "https://example.com" + ``` + go run github.com/kubeshop/botkube/hack -binaries-path "./dist" -url-base-path "https://example.com" + ``` info @@ -55,7 +61,9 @@ A GitHub release allows you to upload additional assets that are later accessibl 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 "Direct link to Automation") @@ -71,7 +79,9 @@ GitHub allows you to serve static pages via GitHub Pages. When you generate the 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. @@ -80,19 +90,27 @@ GitHub allows you to serve static pages via GitHub Pages. When you generate the 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. @@ -105,8 +123,12 @@ You can use [GitHub Actions](https://docs.github.com/en/actions) to publish Botk 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__plugins__development__troubleshooting.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__troubleshooting.md index e61612c..097a5c8 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__troubleshooting.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__troubleshooting.md @@ -15,7 +15,9 @@ You don't get event message on a given communication platform even though the ev * [Enable debugging mode for a given plugin](https://docs.botkube.io/plugins/development/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]" + ``` + 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: @@ -37,7 +39,9 @@ You run a given executor command in a chat window, but you don't get any respons * [Enable debugging mode for a given plugin](https://docs.botkube.io/plugins/development/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 + ``` + 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: @@ -55,7 +59,9 @@ You run a given executor command in a chat window, but you don't get any respons 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 +``` +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** @@ -67,7 +73,9 @@ It means that your plugin exited once it was started by Botkube [plugin manager] 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** @@ -84,4 +92,6 @@ 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__plugins__development__using-kubeconfig.md b/hack/assistant-setup/content/docs.botkube.io__plugins__development__using-kubeconfig.md index 48cfbb7..62d6430 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__development__using-kubeconfig.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__development__using-kubeconfig.md @@ -7,6 +7,10 @@ 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__plugins__exec.md b/hack/assistant-setup/content/docs.botkube.io__plugins__exec.md index 16daa8f..f092798 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__exec.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__exec.md @@ -43,7 +43,9 @@ Usage[​](#usage "Direct link to Usage") 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. @@ -73,13 +75,17 @@ Configuration[​](#configuration "Direct link to Configuration") This plugin supports the following 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.11 +``` +# 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.11 +``` ### Templates[​](#templates "Direct link to 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: # 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.11 - 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: # 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.11 - 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: @@ -95,7 +101,9 @@ The `parser:table:space` template knows how to convert space-separated tables in 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: @@ -117,7 +125,9 @@ By default, the first row is selected and displayed in the message. The `actions 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 "Direct link to Wrapper") @@ -127,7 +137,9 @@ The wrapper template allows adding extra buttons to the CLI output without modif 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 "Direct link to Tutorial") @@ -139,4 +151,6 @@ The tutorial template allows you to define a custom response for a given command 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__plugins__flux.md b/hack/assistant-setup/content/docs.botkube.io__plugins__flux.md index 4ffa46d..a83bf10 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__flux.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__flux.md @@ -18,7 +18,9 @@ One of the plugin capabilities is the `flux diff` command. To use it, you need t 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 +``` +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: @@ -44,7 +46,9 @@ 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 + ``` 8. Click **Save** button. @@ -66,7 +70,9 @@ The Flux plugin supports interactivity (tables, etc.) to simplify running Flux C 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] +``` +@Botkube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch] +``` ![Image 3: flux-diff](https://docs.botkube.io/assets/images/flux-diff-abdd97d5a1b5dd3b64ecf2c1712fa14d.gif) @@ -88,7 +94,9 @@ The diff results are posted on the Slack channel, making it easy for team member To enhance your workflow's efficiency, you can use the [GitHub Events](https://docs.botkube.io/plugins/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. @@ -97,4 +105,6 @@ Configuration[​](#configuration "Direct link to Configuration") 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__plugins__github-events.md b/hack/assistant-setup/content/docs.botkube.io__plugins__github-events.md index d8fad09..a3a894f 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__github-events.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__github-events.md @@ -30,7 +30,9 @@ Configuration[​](#configuration "Direct link to Configuration") 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 +``` +# 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 +``` ### Authentication[​](#authentication "Direct link to Authentication") @@ -74,7 +76,9 @@ For a configured `refreshDuration` we call the [`/repos/{owner}/{repo}/pulls`](h If no matching criteria are specified, all pull requests will be reported. For example: - repositories: - name: owner/repo1 on: pullRequests: [] +``` +repositories: - name: owner/repo1 on: pullRequests: [] +``` To narrow down emitted events, you can specify at least one of the available criteria: @@ -93,7 +97,9 @@ To narrow down emitted events, you can specify at least one of the available cri 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. @@ -111,7 +117,9 @@ The Events API covers various event types. Refer to the [GitHub event types](htt 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. @@ -121,6 +129,8 @@ The available fields for templating differ based on the event type. Refer to the 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__plugins__helm.md b/hack/assistant-setup/content/docs.botkube.io__plugins__helm.md index 0f5b32d..fa98e8f 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__helm.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__helm.md @@ -30,14 +30,18 @@ Usage[​](#usage "Direct link to Usage") To execute `helm` commands, send message in the following format in the channel where Botkube is already added: - @Botkube helm [command] [flags] +``` +@Botkube helm [command] [flags] +``` 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: @@ -73,7 +77,9 @@ Configuration[​](#configuration "Direct link to Configuration") The plugin supports the following configuration: - # Configures the default Namespace for executing Botkube `helm` commands. If not set, uses 'default'.defaultNamespace: "default"# Allowed values are configmap, secret, memory.helmDriver: "secret"# Location for storing Helm configuration.helmConfigDir: "/tmp/helm/"# Location for storing Helm cache.helmCacheDir: "/tmp/helm/.cache" +``` +# Configures the default Namespace for executing Botkube `helm` commands. If not set, uses 'default'.defaultNamespace: "default"# Allowed values are configmap, secret, memory.helmDriver: "secret"# Location for storing Helm configuration.helmConfigDir: "/tmp/helm/"# Location for storing Helm cache.helmCacheDir: "/tmp/helm/.cache" +``` Merging strategy[​](#merging-strategy "Direct link to Merging strategy") ------------------------------------------------------------------------ diff --git a/hack/assistant-setup/content/docs.botkube.io__plugins__keptn.md b/hack/assistant-setup/content/docs.botkube.io__plugins__keptn.md index a5966be..93dae42 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__keptn.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__keptn.md @@ -9,4 +9,6 @@ You can enable the plugin as a part of Botkube instance configuration. Once it is enabled, Botkube Keptn plugin will consume Keptn events and send them to configured platforms as shown below. - # Keptn API Gateway URL.url: "http://api-gateway-nginx.keptn.svc.cluster.local/api"# Keptn API Token to access events through API Gateway.token: ""# Optional Keptn project.project: ""# Optional Keptn Service name under the project.service: ""# Logging configurationlog: # Log level level: info +``` +# Keptn API Gateway URL.url: "http://api-gateway-nginx.keptn.svc.cluster.local/api"# Keptn API Token to access events through API Gateway.token: ""# Optional Keptn project.project: ""# Optional Keptn Service name under the project.service: ""# Logging configurationlog: # Log level level: info +``` diff --git a/hack/assistant-setup/content/docs.botkube.io__plugins__kubectl.md b/hack/assistant-setup/content/docs.botkube.io__plugins__kubectl.md index bc73ecd..1b67745 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__kubectl.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__kubectl.md @@ -27,16 +27,20 @@ You can enable the plugin as a part of Botkube instance configuration. The Kubectl 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.12.0/plugins-index.yaml +``` +plugins: repositories: botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.12.0/plugins-index.yaml +``` -To enable Kubectl executor, add \`\`--set 'executors.k8s-default-tools.botkube/kubectl.enabled=true' `to a given Botkube [`install\` command\](/cli/commands/botkube\_install). +To enable Kubectl executor, add \`\`--set 'executors.k8s-default-tools.botkube/kubectl.enabled=true'` to a given Botkube [`install\` command\](/cli/commands/botkube\_install). Usage[​](#usage "Direct link to Usage") --------------------------------------- To execute the `kubectl` commands, send message in following format in the channel where Botkube is already added: - @Botkube kubectl [verb] [resource] [flags] +``` +@Botkube kubectl [verb] [resource] [flags] +``` ### Aliases[​](#aliases "Direct link to Aliases") @@ -81,7 +85,9 @@ Configuration[​](#configuration "Direct link to Configuration") This plugin supports the following configuration: - # 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"] +``` The default configuration for Helm chart can be found in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. @@ -94,7 +100,9 @@ For all collected `kubectl` executors bindings, configuration properties are ove Consider such configuration in the Botkube self-hosted installation: - 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"] +``` We can see that: diff --git a/hack/assistant-setup/content/docs.botkube.io__plugins__kubernetes.md b/hack/assistant-setup/content/docs.botkube.io__plugins__kubernetes.md index 6ac190b..c9fb368 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__kubernetes.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__kubernetes.md @@ -25,7 +25,9 @@ You can enable the plugin as a part of Botkube instance configuration. 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.12.0/plugins-index.yaml +``` +plugins: repositories: botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.12.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). @@ -55,11 +57,15 @@ 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: [] +``` +namespaces: include: - "dev" - "prod" exclude: [] +``` #### Labels[​](#labels "Direct link to Labels") @@ -67,7 +73,9 @@ Specify exact match for resource labels. The watched resources must have all the **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 "Direct link to Annotations") @@ -75,7 +83,9 @@ Specify exact match for resource annotations. The watched resources must have al **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 "Direct link to Resource name") @@ -87,11 +97,15 @@ 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: [] +``` +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 +``` +name: include: - ".*" # include all resource names... exclude: - "testing-.*" # ...except those that have `testing-` prefix +``` #### Event types[​](#event-types "Direct link to Event types") @@ -107,7 +121,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 "Direct link to Event reason") @@ -117,11 +133,15 @@ 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: [] +``` +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: reason: include: - ".*" # match all event reasons... exclude: - "^BackOff$" # ...except those equal to `BackOff` +``` #### Event message[​](#event-message "Direct link to Event message") @@ -133,11 +153,15 @@ 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: [] +``` +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` +``` +event: message: include: - ".*" # match all event messages... exclude: - "^Back-off.*" # ...except those starting with `Back-off` +``` #### Recommendations[​](#recommendations "Direct link to Recommendations") @@ -149,23 +173,31 @@ 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 "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 +``` ### Syntax[​](#syntax "Direct link to 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: "Describe" commandTpl: "kubectl describe {{ Kind | lower }}{{ if .Namespace }} -n {{ .Namespace }}{{ end }} {{ .Name }}"# Logger configurationlog: level: info disableColors: false +``` +# 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: "Describe" commandTpl: "kubectl describe {{ Kind | lower }}{{ if .Namespace }} -n {{ .Namespace }}{{ end }} {{ .Name }}"# Logger configurationlog: level: info disableColors: false +``` ### Examples[​](#examples "Direct link to Examples") @@ -173,25 +205,35 @@ This section lists all examples for Kubernetes source plugin. #### Recommendation events only[​](#recommendation-events-only "Direct link to Recommendation events only") - # 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 +``` +# 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 +``` #### All events[​](#all-events "Direct link to All events") - # Logging configurationlog: # 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: # 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 +``` +# Logging configurationlog: # 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: # 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 +``` #### Error events[​](#error-events "Direct link to Error events") - # 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: # 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: - 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 +``` +# 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: # 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: - 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 +``` #### Error events for resources with logs[​](#error-events-for-resources-with-logs "Direct link to Error events for resources with logs") Useful together with the [logs automated action](https://docs.botkube.io/features/actions#predefined-actions). - # 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: # 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: - 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) +``` +# 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: # 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: - 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) +``` #### Create events[​](#create-events "Direct link to Create events") - # 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: # 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# 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 +``` +# 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: # 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# 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 +``` Implementation details[​](#implementation-details "Direct link to Implementation details") ------------------------------------------------------------------------------------------ diff --git a/hack/assistant-setup/content/docs.botkube.io__plugins__prometheus.md b/hack/assistant-setup/content/docs.botkube.io__plugins__prometheus.md index 501058e..018eead 100644 --- a/hack/assistant-setup/content/docs.botkube.io__plugins__prometheus.md +++ b/hack/assistant-setup/content/docs.botkube.io__plugins__prometheus.md @@ -9,6 +9,8 @@ You can enable the plugin as a part of Botkube instance configuration. Once it is enabled, Botkube Prometheus plugin will consume Prometheus alerts and send them to configured platforms as shown below. - # Prometheus endpoint without api version and resource.url: "http://localhost:9090"# If set as true, Prometheus source plugin will not send alerts that is created before plugin start time.ignoreOldAlerts: true# Only the alerts that have state provided in this config will be sent as notification. https://pkg.go.dev/github.com/prometheus/prometheus/rules#AlertStatealertStates: ["firing", "pending", "inactive"]# Logging configurationlog: # Log level level: info +``` +# Prometheus endpoint without api version and resource.url: "http://localhost:9090"# If set as true, Prometheus source plugin will not send alerts that is created before plugin start time.ignoreOldAlerts: true# Only the alerts that have state provided in this config will be sent as notification. https://pkg.go.dev/github.com/prometheus/prometheus/rules#AlertStatealertStates: ["firing", "pending", "inactive"]# Logging configurationlog: # Log level level: info +``` For all collected `prometheus` sources 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. diff --git a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration.md b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration.md index 3615ecd..ad52c8b 100644 --- a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration.md +++ b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration.md @@ -19,7 +19,9 @@ The configuration settings are read from two sources: * the configuration files specified by the `BOTKUBE_CONFIG_PATHS` environment variable or `--config/-c` flag. For example: - export BOTKUBE_CONFIG_PATHS="global.yaml,team-b-specific.yaml"# or./botkube --config "global.yaml,team-b-specific.yaml" + ``` + export BOTKUBE_CONFIG_PATHS="global.yaml,team-b-specific.yaml"# or./botkube --config "global.yaml,team-b-specific.yaml" + ``` You can split individual settings into multiple configuration files. The priority will be given to the last (right-most) file specified. Files with `_` name prefix are always read as the last ones. See the [merging strategy](#merging-strategy) section for more details. @@ -49,7 +51,9 @@ If you wish to change the configuration with Helm, create a `/tmp/values.yaml` f * Botkube CLI * Helm CLI - botkube install -f /tmp/values.yaml +``` +botkube install -f /tmp/values.yaml +``` As both Helm release upgrade and some of the `@Botkube` commands modify the same configuration, it is merged during command execution. Whenever you specify a new value in the `/tmp/values.yaml` file, it will override the existing value in the configuration. @@ -59,19 +63,27 @@ Keep in mind that even if you don't specify custom values in the `/tmp/values.ya Consider the following config: - communications: "default-group": socketSlack: enabled: true botToken: "{botToken}" appToken: "{appToken}" channels: "default": name: general notification: disabled: false # default from the Helm chart bindings: sources: - k8s-all-events # default from the Helm chart# (...) +``` +communications: "default-group": socketSlack: enabled: true botToken: "{botToken}" appToken: "{appToken}" channels: "default": name: general notification: disabled: false # default from the Helm chart bindings: sources: - k8s-all-events # default from the Helm chart# (...) +``` Assume that users ran the following commands: - @Botkube edit SourceBindings k8s-err-events, k8s-recommendation-events@Botkube disable notifications +``` +@Botkube edit SourceBindings k8s-err-events, k8s-recommendation-events@Botkube disable notifications +``` Which effectively result in the following config that Botkube sees: - communications: "default-group": socketSlack: enabled: true botToken: "{botToken}" appToken: "{appToken}" channels: "default": name: general notification: disabled: true # set by user command bindings: sources: - k8s-err-events # set by user command - k8s-recommendation-events # set by user command# (...) +``` +communications: "default-group": socketSlack: enabled: true botToken: "{botToken}" appToken: "{appToken}" channels: "default": name: general notification: disabled: true # set by user command bindings: sources: - k8s-err-events # set by user command - k8s-recommendation-events # set by user command# (...) +``` To persist the configuration that users provided, and not overwrite notification and source bindings values, run Helm upgrade with: - communications: "default-group": socketSlack: channels: "default": name: general notification: null # explicitly not use defaults from Helm chart bindings: sources: null # explicitly not use defaults from Helm chart# (...) other values +``` +communications: "default-group": socketSlack: channels: "default": name: general notification: null # explicitly not use defaults from Helm chart bindings: sources: null # explicitly not use defaults from Helm chart# (...) other values +``` The following properties need such `null` value during upgrade, if you want to keep the previous configuration: @@ -90,7 +102,9 @@ To construct the environment variable name, take any property from the configura For example, such configuration property from YAML: - settings: kubectl: defaultNamespace: "NAMESPACE" +``` +settings: kubectl: defaultNamespace: "NAMESPACE" +``` is mapped to the `BOTKUBE_SETTINGS_KUBECTL_DEFAULT__NAMESPACE` environment variable. @@ -107,18 +121,32 @@ Botkube allows you to split individual settings into multiple configuration file * Objects are merged together and primitive fields are overridden. For example: - # a.yaml - first filesettings: clusterName: dev-cluster kubectl: enabled: false + ``` + # a.yaml - first filesettings: clusterName: dev-cluster kubectl: enabled: false + ``` - # _a.yaml - second file with `_` prefixsettings: clusterName: demo-cluster + ``` + # _a.yaml - second file with `_` prefixsettings: clusterName: demo-cluster + ``` - # b.yaml - third filesettings: kubectl: enabled: true + ``` + # b.yaml - third filesettings: kubectl: enabled: true + ``` - # resultsettings: clusterName: demo-cluster kubectl: enabled: true + ``` + # resultsettings: clusterName: demo-cluster kubectl: enabled: true + ``` * The arrays items are not merged, they are overridden. For example: - # a.yamlsettings: kubectl: enabled: true commands: verbs: ["api-resources", "api-versions", "cluster-info", "describe", "diff", "explain", "get", "logs", "top", "auth"] + ``` + # a.yamlsettings: kubectl: enabled: true commands: verbs: ["api-resources", "api-versions", "cluster-info", "describe", "diff", "explain", "get", "logs", "top", "auth"] + ``` - # b.yamlsettings: kubectl: commands: verbs: ["get", "logs", "top", "auth"] + ``` + # b.yamlsettings: kubectl: commands: verbs: ["get", "logs", "top", "auth"] + ``` - # resultsettings: kubectl: enabled: true commands: verbs: ["get", "logs", "top", "auth"] + ``` + # resultsettings: kubectl: enabled: true commands: verbs: ["get", "logs", "top", "auth"] + ``` diff --git a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__communication.md b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__communication.md index deee35c..d1a5fff 100644 --- a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__communication.md +++ b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__communication.md @@ -29,7 +29,9 @@ The purpose of the communication group is to allow using multiple workspaces, e. Consider the following configuration: - communications: "first-group": # Your own alias of a given communication group socketSlack: enabled: true botToken: "{SLACK_BOT_TOKEN_1}" # Bot token for Botkube App for Slack installed in Workspace 1 appToken: "{SLACK_APP_TOKEN_1}" # App token for Botkube App for Slack installed in Workspace 1 channels: "general": # Your own alias for the channel configuration name: general bindings: executors: # Executors configuration for a given channel - k8s-default-tools sources: # Notification sources configuration for a given channel - k8s-events "random": # Your own alias for the channel configuration name: random bindings: executors: [] # Executors configuration for a given channel sources: # Notification sources configuration for a given channel - k8s-events "second-group": # Your own alias of a given communication group socketSlack: enabled: true botToken: "{SLACK_BOT_TOKEN_2}" # Bot token for Botkube App for Slack installed in Workspace 2 appToken: "{SLACK_APP_TOKEN_2}" # App token for Botkube App for Slack installed in Workspace 2 channels: "primary-channel": # Your own alias for the channel configuration name: general notification: # If true, the notifications are not sent to the channel. They can be enabled with `@Botkube` command anytime. disabled: true bindings: executors: # Executors configuration for a given channel - k8s-default-tools sources: # Notification sources configuration for a given channel - k8s-events +``` +communications: "first-group": # Your own alias of a given communication group socketSlack: enabled: true botToken: "{SLACK_BOT_TOKEN_1}" # Bot token for Botkube App for Slack installed in Workspace 1 appToken: "{SLACK_APP_TOKEN_1}" # App token for Botkube App for Slack installed in Workspace 1 channels: "general": # Your own alias for the channel configuration name: general bindings: executors: # Executors configuration for a given channel - k8s-default-tools sources: # Notification sources configuration for a given channel - k8s-events "random": # Your own alias for the channel configuration name: random bindings: executors: [] # Executors configuration for a given channel sources: # Notification sources configuration for a given channel - k8s-events "second-group": # Your own alias of a given communication group socketSlack: enabled: true botToken: "{SLACK_BOT_TOKEN_2}" # Bot token for Botkube App for Slack installed in Workspace 2 appToken: "{SLACK_APP_TOKEN_2}" # App token for Botkube App for Slack installed in Workspace 2 channels: "primary-channel": # Your own alias for the channel configuration name: general notification: # If true, the notifications are not sent to the channel. They can be enabled with `@Botkube` command anytime. disabled: true bindings: executors: # Executors configuration for a given channel - k8s-default-tools sources: # Notification sources configuration for a given channel - k8s-events +``` The example YAML configuration definition results in the following configuration. @@ -57,6 +59,8 @@ Syntax[​](#syntax "Direct link to Syntax") Each communication platform has specific options, however they share a similar syntax for consistency. For example, bot integrations such as Slack, Mattermost or Discord have multichannel support, that is you can configure multiple channels with separate bindings. Same with Elasticsearch - you can forward notifications to multiple Elasticsearch indices, according to the sources configuration. - # Map of communication groups. Communication group contains settings for multiple communication platforms.# The property name under `communications` object is an alias for a given configuration group. You can define multiple communication groups with different names.# @default -- See the `values.yaml` file for full object.### Format: communications.{alias}communications: "default-group": ## Settings for Slack with Socket Mode. socketSlack: # If true, enables bot for Slack. enabled: false # Map of configured channels. The property name under `channels` object is an alias for a given configuration. # ## Format: channels.{alias} channels: "default": # Slack channel name without '#' prefix where you have added Botkube and want to receive notifications in. name: "SLACK_CHANNEL" bindings: # Executors configuration for a given channel. executors: - k8s-default-tools # Notification sources configuration for a given channel. sources: - k8s-err-events - k8s-recommendation-events # Bot for Slack token for your own app for Slack. # [Ref doc](https://api.slack.com/authentication/token-types). botToken: "" # Slack app-level token for your own app for Slack. # [Ref doc](https://api.slack.com/authentication/token-types). appToken: "" ## Settings for Mattermost. mattermost: # If true, enables Mattermost bot. enabled: false # User in Mattermost which belongs the specified Personal Access token. botName: "Botkube" # The URL (including http/https schema) where Mattermost is running. e.g https://example.com:9243 url: "MATTERMOST_SERVER_URL" # Personal Access token generated by Botkube user. token: "MATTERMOST_TOKEN" # The Mattermost Team name where Botkube is added. team: "MATTERMOST_TEAM" # Map of configured channels. The property name under `channels` object is an alias for a given configuration. # ## Format: channels.{alias} channels: "default": # The Mattermost channel name for receiving Botkube alerts. # The Botkube user needs to be added to it. name: "MATTERMOST_CHANNEL" notification: # If true, the notifications are not sent to the channel. They can be enabled with `@Botkube` command anytime. disabled: false bindings: # Executors configuration for a given channel. executors: - k8s-default-tools # Notification sources configuration for a given channel. sources: - k8s-err-events - k8s-recommendation-events ## Settings for Discord. discord: # If true, enables Discord bot. enabled: false # Botkube Bot Token. token: "DISCORD_TOKEN" # Botkube Application Client ID. botID: "DISCORD_BOT_ID" # Map of configured channels. The property name under `channels` object is an alias for a given configuration. # ## Format: channels.{alias} channels: "default": # Discord channel ID for receiving Botkube alerts. # The Botkube user needs to be added to it. id: "DISCORD_CHANNEL_ID" notification: # If true, the notifications are not sent to the channel. They can be enabled with `@Botkube` command anytime. disabled: false bindings: # Executors configuration for a given channel. executors: - k8s-default-tools # Notification sources configuration for a given channel. sources: - k8s-err-events - k8s-recommendation-events ## Settings for Elasticsearch. elasticsearch: # If true, enables Elasticsearch. enabled: false awsSigning: # If true, enables awsSigning using IAM for Elasticsearch hosted on AWS. Make sure AWS environment variables are set. # [Ref doc](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html). enabled: false # AWS region where Elasticsearch is deployed. awsRegion: "us-east-1" # AWS IAM Role arn to assume for credentials, use this only if you don't want to use the EC2 instance role or not running on AWS instance. roleArn: "" # The server URL, e.g https://example.com:9243 server: "ELASTICSEARCH_ADDRESS" # Basic Auth username. username: "ELASTICSEARCH_USERNAME" # Basic Auth password. password: "ELASTICSEARCH_PASSWORD" # If true, skips the verification of TLS certificate of the Elastic nodes. # It's useful for clusters with self-signed certificates. skipTLSVerify: false # Specify the log level for Elasticsearch client. Leave empty to disable logging. ## Possible values: "info", "error", "trace". ## - "info": Logs information level messages. ## - "error": Logs information and error level messages. ## - "trace": Logs information, error, and trace level messages. ## To disable logging, simply leave the logLevel empty or remove the line. logLevel: "" # Map of configured indices. The `indices` property name is an alias for a given configuration. # ## Format: indices.{alias} indices: "default": # Configures Elasticsearch index settings. name: botkube type: botkube-event shards: 1 replicas: 0 bindings: # Notification sources configuration for a given index. sources: - k8s-err-events - k8s-recommendation-events ## Settings for Webhook. webhook: # If true, enables Webhook. enabled: false # The Webhook URL, e.g.: https://example.com:80 url: "WEBHOOK_URL" bindings: # Notification sources configuration for the webhook. sources: - k8s-err-events - k8s-recommendation-events +``` +# Map of communication groups. Communication group contains settings for multiple communication platforms.# The property name under `communications` object is an alias for a given configuration group. You can define multiple communication groups with different names.# @default -- See the `values.yaml` file for full object.### Format: communications.{alias}communications: "default-group": ## Settings for Slack with Socket Mode. socketSlack: # If true, enables bot for Slack. enabled: false # Map of configured channels. The property name under `channels` object is an alias for a given configuration. # ## Format: channels.{alias} channels: "default": # Slack channel name without '#' prefix where you have added Botkube and want to receive notifications in. name: "SLACK_CHANNEL" bindings: # Executors configuration for a given channel. executors: - k8s-default-tools # Notification sources configuration for a given channel. sources: - k8s-err-events - k8s-recommendation-events # Bot for Slack token for your own app for Slack. # [Ref doc](https://api.slack.com/authentication/token-types). botToken: "" # Slack app-level token for your own app for Slack. # [Ref doc](https://api.slack.com/authentication/token-types). appToken: "" ## Settings for Mattermost. mattermost: # If true, enables Mattermost bot. enabled: false # User in Mattermost which belongs the specified Personal Access token. botName: "Botkube" # The URL (including http/https schema) where Mattermost is running. e.g https://example.com:9243 url: "MATTERMOST_SERVER_URL" # Personal Access token generated by Botkube user. token: "MATTERMOST_TOKEN" # The Mattermost Team name where Botkube is added. team: "MATTERMOST_TEAM" # Map of configured channels. The property name under `channels` object is an alias for a given configuration. # ## Format: channels.{alias} channels: "default": # The Mattermost channel name for receiving Botkube alerts. # The Botkube user needs to be added to it. name: "MATTERMOST_CHANNEL" notification: # If true, the notifications are not sent to the channel. They can be enabled with `@Botkube` command anytime. disabled: false bindings: # Executors configuration for a given channel. executors: - k8s-default-tools # Notification sources configuration for a given channel. sources: - k8s-err-events - k8s-recommendation-events ## Settings for Discord. discord: # If true, enables Discord bot. enabled: false # Botkube Bot Token. token: "DISCORD_TOKEN" # Botkube Application Client ID. botID: "DISCORD_BOT_ID" # Map of configured channels. The property name under `channels` object is an alias for a given configuration. # ## Format: channels.{alias} channels: "default": # Discord channel ID for receiving Botkube alerts. # The Botkube user needs to be added to it. id: "DISCORD_CHANNEL_ID" notification: # If true, the notifications are not sent to the channel. They can be enabled with `@Botkube` command anytime. disabled: false bindings: # Executors configuration for a given channel. executors: - k8s-default-tools # Notification sources configuration for a given channel. sources: - k8s-err-events - k8s-recommendation-events ## Settings for Elasticsearch. elasticsearch: # If true, enables Elasticsearch. enabled: false awsSigning: # If true, enables awsSigning using IAM for Elasticsearch hosted on AWS. Make sure AWS environment variables are set. # [Ref doc](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html). enabled: false # AWS region where Elasticsearch is deployed. awsRegion: "us-east-1" # AWS IAM Role arn to assume for credentials, use this only if you don't want to use the EC2 instance role or not running on AWS instance. roleArn: "" # The server URL, e.g https://example.com:9243 server: "ELASTICSEARCH_ADDRESS" # Basic Auth username. username: "ELASTICSEARCH_USERNAME" # Basic Auth password. password: "ELASTICSEARCH_PASSWORD" # If true, skips the verification of TLS certificate of the Elastic nodes. # It's useful for clusters with self-signed certificates. skipTLSVerify: false # Specify the log level for Elasticsearch client. Leave empty to disable logging. ## Possible values: "info", "error", "trace". ## - "info": Logs information level messages. ## - "error": Logs information and error level messages. ## - "trace": Logs information, error, and trace level messages. ## To disable logging, simply leave the logLevel empty or remove the line. logLevel: "" # Map of configured indices. The `indices` property name is an alias for a given configuration. # ## Format: indices.{alias} indices: "default": # Configures Elasticsearch index settings. name: botkube type: botkube-event shards: 1 replicas: 0 bindings: # Notification sources configuration for a given index. sources: - k8s-err-events - k8s-recommendation-events ## Settings for Webhook. webhook: # If true, enables Webhook. enabled: false # The Webhook URL, e.g.: https://example.com:80 url: "WEBHOOK_URL" bindings: # Notification sources configuration for the webhook. sources: - k8s-err-events - k8s-recommendation-events +``` The default configuration for Helm chart can be found in [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml). diff --git a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__communication__vault-csi.md b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__communication__vault-csi.md index 189e2e7..e57ce36 100644 --- a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__communication__vault-csi.md +++ b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__communication__vault-csi.md @@ -16,7 +16,9 @@ Prerequisites[​](#prerequisites "Direct link to Prerequisites") For example, to run [K3s](https://k3s.io/) using [Lima](https://github.com/lima-vm/lima), run: - limactl start template://k3s + ``` + limactl start template://k3s + ``` * [Socket Slack integration installed](https://docs.botkube.io/installation/slack/socket-slack). @@ -32,32 +34,52 @@ This instruction guides you through the installation of Botkube and Vault on a K 1. Install Vault with CSI enabled: - helm repo add hashicorp https://helm.releases.hashicorp.comhelm repo updatehelm install vault hashicorp/vault --namespace default \ --set "server.dev.enabled=true" \ --set "injector.enabled=false" \ --set "csi.enabled=true" + ``` + helm repo add hashicorp https://helm.releases.hashicorp.comhelm repo updatehelm install vault hashicorp/vault --namespace default \ --set "server.dev.enabled=true" \ --set "injector.enabled=false" \ --set "csi.enabled=true" + ``` 2. Add Slack token in Vault: - # Exec to podkubectl exec -n default -it vault-0 -- /bin/sh + ``` + # Exec to podkubectl exec -n default -it vault-0 -- /bin/sh + ``` - # Write the token to Vaultvault kv put -mount=secret slack-app-token token=xapp-...vault kv put -mount=secret slack-bot-token token=xoxb-... + ``` + # Write the token to Vaultvault kv put -mount=secret slack-app-token token=xapp-...vault kv put -mount=secret slack-bot-token token=xoxb-... + ``` 3. Enable Vault's Kubernetes authentication: - vault auth enable kubernetesvault write auth/kubernetes/config \ kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" + ``` + vault auth enable kubernetesvault write auth/kubernetes/config \ kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" + ``` - vault policy write internal-app - < /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__self-hosted-configuration__executor.md b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__executor.md index cf08f6e..a054d19 100644 --- a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__executor.md +++ b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__executor.md @@ -11,19 +11,27 @@ This document is applicable only for self-hosted installations. For Botkube Clou The executor configuration allows you to define multiple executor configurations that can be later referred in [communication](https://docs.botkube.io/self-hosted-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: {} +``` +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. @@ -43,11 +51,15 @@ 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 "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.12.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.12.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 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.12.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.12.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__self-hosted-configuration__general.md b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__general.md index 7032884..d89c40b 100644 --- a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__general.md +++ b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__general.md @@ -5,4 +5,6 @@ URL Source: https://docs.botkube.io/self-hosted-configuration/general Markdown Content: The general settings holds a general configuration for the Botkube Agent. 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__self-hosted-configuration__source.md b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__source.md index 69c161c..2a06d72 100644 --- a/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__source.md +++ b/hack/assistant-setup/content/docs.botkube.io__self-hosted-configuration__source.md @@ -11,19 +11,27 @@ This document is applicable only for self-hosted installations. For Botkube Clou The source configuration allows you to define multiple source configurations that can be later referred in [communication](https://docs.botkube.io/self-hosted-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: {} +``` +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. @@ -43,11 +51,15 @@ 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 "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.12.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.12.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__telemetry.md b/hack/assistant-setup/content/docs.botkube.io__telemetry.md index 441bece..4feb5e2 100644 --- a/hack/assistant-setup/content/docs.botkube.io__telemetry.md +++ b/hack/assistant-setup/content/docs.botkube.io__telemetry.md @@ -44,7 +44,9 @@ To disable sending the anonymous analytics, provide the `analytics.disable: true 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__troubleshooting__common-problems.md b/hack/assistant-setup/content/docs.botkube.io__troubleshooting__common-problems.md index db4707c..3195f0a 100644 --- a/hack/assistant-setup/content/docs.botkube.io__troubleshooting__common-problems.md +++ b/hack/assistant-setup/content/docs.botkube.io__troubleshooting__common-problems.md @@ -14,7 +14,9 @@ Incompatible plugin API version[​](#incompatible-plugin-api-version "Direct li * In [Botkube agent logs](https://docs.botkube.io/troubleshooting/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** @@ -28,7 +30,9 @@ Incompatible plugin API version[​](#incompatible-plugin-api-version "Direct li 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 "Direct link to Helm chart loading error") ------------------------------------------------------------------------------------------------ @@ -37,11 +41,15 @@ Helm chart loading error[​](#helm-chart-loading-error "Direct link to Helm cha * You encounter the following errors when running the `botkube install` command: - Error: while loading Helm chart: Chart.yaml file is missing + ``` + 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: file 'botkube' does not appear to be a gzipped archive; got 'application/octet-stream' + ``` **Solution** diff --git a/hack/assistant-setup/content/docs.botkube.io__troubleshooting__diagnostics.md b/hack/assistant-setup/content/docs.botkube.io__troubleshooting__diagnostics.md index 4d2625a..152c595 100644 --- a/hack/assistant-setup/content/docs.botkube.io__troubleshooting__diagnostics.md +++ b/hack/assistant-setup/content/docs.botkube.io__troubleshooting__diagnostics.md @@ -19,11 +19,15 @@ This section describes [Botkube agent](https://docs.botkube.io/architecture/) re 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}" +``` +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 +``` +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. @@ -31,7 +35,9 @@ The `botkube` is the agent image. The container image tag (`v1.5.0`) is the vers 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. @@ -39,13 +45,17 @@ All the containers from Pods should be in the `Running` status. Restarts' number 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 "Direct link to Agent configuration") @@ -60,19 +70,25 @@ 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 "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 "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). @@ -86,4 +102,6 @@ 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__versions.md b/hack/assistant-setup/content/docs.botkube.io__versions.md index 619a5f0..dbf1bca 100644 --- a/hack/assistant-setup/content/docs.botkube.io__versions.md +++ b/hack/assistant-setup/content/docs.botkube.io__versions.md @@ -3,51 +3,66 @@ Title: Versions | Botkube URL Source: https://docs.botkube.io/versions Markdown Content: -[Skip to main content](#__docusaurus_skipToContent_fallback) - -**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/) - -[1.12](https://docs.botkube.io/) - -* [Unreleased 🚧](https://docs.botkube.io/next/) -* [1.12](https://docs.botkube.io/) -* [1.11](https://docs.botkube.io/1.11/) -* [1.10](https://docs.botkube.io/1.10/) -* [1.9](https://docs.botkube.io/1.9/) -* [1.8](https://docs.botkube.io/1.8/) -* [1.7](https://docs.botkube.io/1.7/) -* * * * - -* [All versions](https://docs.botkube.io/versions) - -[GitHub](https://github.com/kubeshop/botkube)[Slack](https://join.botkube.io/) +Skip to main content +New to Botkube? Get started fast (and free!) with the Botkube Cloud Web App. +Botkube +Documentation +Community +1.12 +GitHub +Slack +Search +Botkube versions This page lists all documented versions of Botkube. -### Current version (Stable)[​](#current "Direct link to Current version (Stable)") +Current version (Stable)​ The latest stable version. -
1.12Documentation⏳ Loading...
- -### Next version (Unreleased)[​](#unreleased "Direct link to Next version (Unreleased)") +1.12 Documentation ⏳ Loading... +Next version (Unreleased)​ Here you can find the documentation for unreleased version. -
Unreleased 🚧Documentation
- -### Previous versions[​](#previous "Direct link to Previous versions") +Unreleased 🚧 Documentation +Previous versions​ Here you can find documentation for previous Botkube versions. -
1.11Documentation⏳ Loading...
1.10Documentation⏳ Loading...
1.9Documentation⏳ Loading...
1.8Documentation⏳ Loading...
1.7Documentation⏳ Loading...
- -### Archived Versions[​](#archived "Direct link to Archived Versions") +1.11 Documentation ⏳ Loading... +1.10 Documentation ⏳ Loading... +1.9 Documentation ⏳ Loading... +1.8 Documentation ⏳ Loading... +1.7 Documentation ⏳ Loading... +Archived Versions​ Here you can find documentation for archived, no longer maintained Botkube versions. -
1.6Documentation⏳ Loading...
1.5Documentation⏳ Loading...
1.4Documentation⏳ Loading...
1.3Documentation⏳ Loading...
1.2Documentation⏳ Loading...
1.1Documentation⏳ Loading...
1.0Documentation⏳ Loading...
0.18Documentation⏳ Loading...
0.17Documentation⏳ Loading...
0.16Documentation⏳ Loading...
0.15Documentation⏳ Loading...
0.14Documentation⏳ Loading...
0.13Documentation⏳ Loading...
- -By continuing to use our site, you consent to Kubeshop using cookies in accordance with our [Privacy Policy.](https://botkube.io/privacy-policy) +1.6 Documentation ⏳ Loading... +1.5 Documentation ⏳ Loading... +1.4 Documentation ⏳ Loading... +1.3 Documentation ⏳ Loading... +1.2 Documentation ⏳ Loading... +1.1 Documentation ⏳ Loading... +1.0 Documentation ⏳ Loading... +0.18 Documentation ⏳ Loading... +0.17 Documentation ⏳ Loading... +0.16 Documentation ⏳ Loading... +0.15 Documentation ⏳ Loading... +0.14 Documentation ⏳ Loading... +0.13 Documentation ⏳ Loading... +Community +Contribute +GitHub +Community Slack +Support +Legal +License +Privacy & Legal +Telemetry +Learn +Installation +Social +Twitter +Copyright © 2024 Kubeshop, Inc. Built with Docusaurus.