holmesgpt 0.13.2__py3-none-any.whl → 0.16.2a0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. holmes/__init__.py +1 -1
  2. holmes/clients/robusta_client.py +17 -4
  3. holmes/common/env_vars.py +40 -1
  4. holmes/config.py +114 -144
  5. holmes/core/conversations.py +53 -14
  6. holmes/core/feedback.py +191 -0
  7. holmes/core/investigation.py +18 -22
  8. holmes/core/llm.py +489 -88
  9. holmes/core/models.py +103 -1
  10. holmes/core/openai_formatting.py +13 -0
  11. holmes/core/prompt.py +1 -1
  12. holmes/core/safeguards.py +4 -4
  13. holmes/core/supabase_dal.py +293 -100
  14. holmes/core/tool_calling_llm.py +423 -323
  15. holmes/core/tools.py +311 -33
  16. holmes/core/tools_utils/token_counting.py +14 -0
  17. holmes/core/tools_utils/tool_context_window_limiter.py +57 -0
  18. holmes/core/tools_utils/tool_executor.py +13 -8
  19. holmes/core/toolset_manager.py +155 -4
  20. holmes/core/tracing.py +6 -1
  21. holmes/core/transformers/__init__.py +23 -0
  22. holmes/core/transformers/base.py +62 -0
  23. holmes/core/transformers/llm_summarize.py +174 -0
  24. holmes/core/transformers/registry.py +122 -0
  25. holmes/core/transformers/transformer.py +31 -0
  26. holmes/core/truncation/compaction.py +59 -0
  27. holmes/core/truncation/dal_truncation_utils.py +23 -0
  28. holmes/core/truncation/input_context_window_limiter.py +218 -0
  29. holmes/interactive.py +177 -24
  30. holmes/main.py +7 -4
  31. holmes/plugins/prompts/_fetch_logs.jinja2 +26 -1
  32. holmes/plugins/prompts/_general_instructions.jinja2 +1 -2
  33. holmes/plugins/prompts/_runbook_instructions.jinja2 +23 -12
  34. holmes/plugins/prompts/conversation_history_compaction.jinja2 +88 -0
  35. holmes/plugins/prompts/generic_ask.jinja2 +2 -4
  36. holmes/plugins/prompts/generic_ask_conversation.jinja2 +2 -1
  37. holmes/plugins/prompts/generic_ask_for_issue_conversation.jinja2 +2 -1
  38. holmes/plugins/prompts/generic_investigation.jinja2 +2 -1
  39. holmes/plugins/prompts/investigation_procedure.jinja2 +48 -0
  40. holmes/plugins/prompts/kubernetes_workload_ask.jinja2 +2 -1
  41. holmes/plugins/prompts/kubernetes_workload_chat.jinja2 +2 -1
  42. holmes/plugins/runbooks/__init__.py +117 -18
  43. holmes/plugins/runbooks/catalog.json +2 -0
  44. holmes/plugins/toolsets/__init__.py +21 -8
  45. holmes/plugins/toolsets/aks-node-health.yaml +46 -0
  46. holmes/plugins/toolsets/aks.yaml +64 -0
  47. holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py +26 -36
  48. holmes/plugins/toolsets/azure_sql/azure_sql_toolset.py +0 -1
  49. holmes/plugins/toolsets/azure_sql/tools/analyze_connection_failures.py +10 -7
  50. holmes/plugins/toolsets/azure_sql/tools/analyze_database_connections.py +9 -6
  51. holmes/plugins/toolsets/azure_sql/tools/analyze_database_health_status.py +8 -6
  52. holmes/plugins/toolsets/azure_sql/tools/analyze_database_performance.py +8 -6
  53. holmes/plugins/toolsets/azure_sql/tools/analyze_database_storage.py +9 -6
  54. holmes/plugins/toolsets/azure_sql/tools/get_active_alerts.py +9 -7
  55. holmes/plugins/toolsets/azure_sql/tools/get_slow_queries.py +9 -6
  56. holmes/plugins/toolsets/azure_sql/tools/get_top_cpu_queries.py +9 -6
  57. holmes/plugins/toolsets/azure_sql/tools/get_top_data_io_queries.py +9 -6
  58. holmes/plugins/toolsets/azure_sql/tools/get_top_log_io_queries.py +9 -6
  59. holmes/plugins/toolsets/bash/bash_toolset.py +10 -13
  60. holmes/plugins/toolsets/bash/common/bash.py +7 -7
  61. holmes/plugins/toolsets/cilium.yaml +284 -0
  62. holmes/plugins/toolsets/coralogix/toolset_coralogix_logs.py +5 -3
  63. holmes/plugins/toolsets/datadog/datadog_api.py +490 -24
  64. holmes/plugins/toolsets/datadog/datadog_logs_instructions.jinja2 +21 -10
  65. holmes/plugins/toolsets/datadog/toolset_datadog_general.py +349 -216
  66. holmes/plugins/toolsets/datadog/toolset_datadog_logs.py +190 -19
  67. holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py +101 -44
  68. holmes/plugins/toolsets/datadog/toolset_datadog_rds.py +13 -16
  69. holmes/plugins/toolsets/datadog/toolset_datadog_traces.py +25 -31
  70. holmes/plugins/toolsets/git.py +51 -46
  71. holmes/plugins/toolsets/grafana/common.py +15 -3
  72. holmes/plugins/toolsets/grafana/grafana_api.py +46 -24
  73. holmes/plugins/toolsets/grafana/grafana_tempo_api.py +454 -0
  74. holmes/plugins/toolsets/grafana/loki/instructions.jinja2 +9 -0
  75. holmes/plugins/toolsets/grafana/loki/toolset_grafana_loki.py +117 -0
  76. holmes/plugins/toolsets/grafana/toolset_grafana.py +211 -91
  77. holmes/plugins/toolsets/grafana/toolset_grafana_dashboard.jinja2 +27 -0
  78. holmes/plugins/toolsets/grafana/toolset_grafana_tempo.jinja2 +246 -11
  79. holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py +653 -293
  80. holmes/plugins/toolsets/grafana/trace_parser.py +1 -1
  81. holmes/plugins/toolsets/internet/internet.py +6 -7
  82. holmes/plugins/toolsets/internet/notion.py +5 -6
  83. holmes/plugins/toolsets/investigator/core_investigation.py +42 -34
  84. holmes/plugins/toolsets/kafka.py +25 -36
  85. holmes/plugins/toolsets/kubernetes.yaml +58 -84
  86. holmes/plugins/toolsets/kubernetes_logs.py +6 -6
  87. holmes/plugins/toolsets/kubernetes_logs.yaml +32 -0
  88. holmes/plugins/toolsets/logging_utils/logging_api.py +80 -4
  89. holmes/plugins/toolsets/mcp/toolset_mcp.py +181 -55
  90. holmes/plugins/toolsets/newrelic/__init__.py +0 -0
  91. holmes/plugins/toolsets/newrelic/new_relic_api.py +125 -0
  92. holmes/plugins/toolsets/newrelic/newrelic.jinja2 +41 -0
  93. holmes/plugins/toolsets/newrelic/newrelic.py +163 -0
  94. holmes/plugins/toolsets/opensearch/opensearch.py +10 -17
  95. holmes/plugins/toolsets/opensearch/opensearch_logs.py +7 -7
  96. holmes/plugins/toolsets/opensearch/opensearch_ppl_query_docs.jinja2 +1616 -0
  97. holmes/plugins/toolsets/opensearch/opensearch_query_assist.py +78 -0
  98. holmes/plugins/toolsets/opensearch/opensearch_query_assist_instructions.jinja2 +223 -0
  99. holmes/plugins/toolsets/opensearch/opensearch_traces.py +13 -16
  100. holmes/plugins/toolsets/openshift.yaml +283 -0
  101. holmes/plugins/toolsets/prometheus/prometheus.py +915 -390
  102. holmes/plugins/toolsets/prometheus/prometheus_instructions.jinja2 +43 -2
  103. holmes/plugins/toolsets/prometheus/utils.py +28 -0
  104. holmes/plugins/toolsets/rabbitmq/toolset_rabbitmq.py +9 -10
  105. holmes/plugins/toolsets/robusta/robusta.py +236 -65
  106. holmes/plugins/toolsets/robusta/robusta_instructions.jinja2 +26 -9
  107. holmes/plugins/toolsets/runbook/runbook_fetcher.py +137 -26
  108. holmes/plugins/toolsets/service_discovery.py +1 -1
  109. holmes/plugins/toolsets/servicenow_tables/instructions.jinja2 +83 -0
  110. holmes/plugins/toolsets/servicenow_tables/servicenow_tables.py +426 -0
  111. holmes/plugins/toolsets/utils.py +88 -0
  112. holmes/utils/config_utils.py +91 -0
  113. holmes/utils/default_toolset_installation_guide.jinja2 +1 -22
  114. holmes/utils/env.py +7 -0
  115. holmes/utils/global_instructions.py +75 -10
  116. holmes/utils/holmes_status.py +2 -1
  117. holmes/utils/holmes_sync_toolsets.py +0 -2
  118. holmes/utils/krr_utils.py +188 -0
  119. holmes/utils/sentry_helper.py +41 -0
  120. holmes/utils/stream.py +61 -7
  121. holmes/version.py +34 -14
  122. holmesgpt-0.16.2a0.dist-info/LICENSE +178 -0
  123. {holmesgpt-0.13.2.dist-info → holmesgpt-0.16.2a0.dist-info}/METADATA +29 -27
  124. {holmesgpt-0.13.2.dist-info → holmesgpt-0.16.2a0.dist-info}/RECORD +126 -102
  125. holmes/core/performance_timing.py +0 -72
  126. holmes/plugins/toolsets/grafana/tempo_api.py +0 -124
  127. holmes/plugins/toolsets/grafana/toolset_grafana_loki.py +0 -110
  128. holmes/plugins/toolsets/newrelic.py +0 -231
  129. holmes/plugins/toolsets/servicenow/install.md +0 -37
  130. holmes/plugins/toolsets/servicenow/instructions.jinja2 +0 -3
  131. holmes/plugins/toolsets/servicenow/servicenow.py +0 -219
  132. holmesgpt-0.13.2.dist-info/LICENSE.txt +0 -21
  133. {holmesgpt-0.13.2.dist-info → holmesgpt-0.16.2a0.dist-info}/WHEEL +0 -0
  134. {holmesgpt-0.13.2.dist-info → holmesgpt-0.16.2a0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,283 @@
1
+ toolsets:
2
+ openshift/core:
3
+ description: "Read access to OpenShift cluster resources including projects, routes, and deployment configs"
4
+ docs_url: "https://holmesgpt.dev/data-sources/builtin-toolsets/openshift/"
5
+ tags:
6
+ - core
7
+ prerequisites:
8
+ - command: "oc version --client"
9
+
10
+ # Note: Many tools in this toolset use transformers with llm_summarize
11
+ # to automatically summarize large oc outputs when a fast model is configured.
12
+ # This reduces context window usage while preserving key information for debugging.
13
+
14
+ tools:
15
+ - name: "oc_describe"
16
+ description: >
17
+ Run oc describe <kind> <name> -n <namespace>,
18
+ call this when users ask for description,
19
+ for example when a user asks
20
+ - 'describe pod xyz-123'
21
+ - 'show service xyz-123 in namespace my-ns'
22
+ - 'describe route my-route'
23
+ - 'show deployment config xyz'
24
+ command: "oc describe {{ kind }} {{ name }}{% if namespace %} -n {{ namespace }}{% endif %}"
25
+ transformers:
26
+ - name: llm_summarize
27
+ config:
28
+ input_threshold: 1000
29
+ prompt: |
30
+ Summarize this oc describe output focusing on:
31
+ - What needs attention or immediate action
32
+ - Resource status and health indicators
33
+ - Any errors, warnings, or non-standard states
34
+ - Key configuration details that could affect functionality
35
+ - OpenShift-specific features like routes, image streams, or security context constraints
36
+ - When possible, mention exact field names so the user can grep for specific details
37
+ - Be concise: aim for ≤ 50% of the original length; avoid repeating defaults/healthy/unchanged details
38
+ - Prefer aggregates and counts; list only outliers and actionable items
39
+ - Keep grep-friendly: include exact field names/values that matter``
40
+
41
+ - name: "oc_get_by_name"
42
+ description: "Run `oc get <kind> <name> --show-labels`"
43
+ command: "oc get --show-labels -o wide {{ kind }} {{ name }}{% if namespace %} -n {{ namespace }}{% endif %}"
44
+
45
+ - name: "oc_get_by_kind_in_namespace"
46
+ description: "Run `oc get <kind> -n <namespace> --show-labels` to get all resources of a given type in namespace"
47
+ command: "oc get --show-labels -o wide {{ kind }} -n {{ namespace }}"
48
+ transformers:
49
+ - name: llm_summarize
50
+ config:
51
+ input_threshold: 1000
52
+ prompt: |
53
+ Summarize this oc output focusing on:
54
+ - What needs attention or immediate action
55
+ - Group similar resources into aggregate descriptions
56
+ - Make sure to mention outliers, errors, and non-standard states
57
+ - List healthy resources as aggregate descriptions
58
+ - When listing unhealthy resources, also try to use aggregate descriptions when possible
59
+ - When possible, mention exact keywords so the user can rerun the command with | grep <keyword> and drill down
60
+ - Be concise and avoid expansion: target ≤ 50% of input size; prefer counts + outliers over full listings
61
+
62
+ - name: "oc_get_by_kind_in_cluster"
63
+ description: "Run `oc get -A <kind> --show-labels` to get all resources of a given type in the cluster"
64
+ command: "oc get -A --show-labels -o wide {{ kind }}"
65
+ transformers:
66
+ - name: llm_summarize
67
+ config:
68
+ input_threshold: 1000
69
+ prompt: |
70
+ Summarize this oc output focusing on:
71
+ - What needs attention or immediate action
72
+ - Group similar resources into a single line and description
73
+ - Make sure to mention outliers, errors, and non-standard states
74
+ - List healthy resources as aggregate descriptions
75
+ - When listing unhealthy resources, also try to use aggregate descriptions when possible
76
+ - When possible, mention exact keywords so the user can rerun the command with | grep <keyword> and drill down on the parts they care about
77
+ - Strive for ≤ 50% of the original size; keep results compact and grep-friendly (one line per aggregate)
78
+
79
+ - name: "oc_find_resource"
80
+ description: "Run `oc get {{ kind }} -A --show-labels | grep {{ keyword }}` to find a resource where you know a substring of the name, IP, namespace, or labels"
81
+ command: "oc get -A --show-labels -o wide {{ kind }} | grep {{ keyword }}"
82
+
83
+ - name: "oc_get_yaml"
84
+ description: "Run `oc get -o yaml` on a single OpenShift resource"
85
+ command: "oc get -o yaml {{ kind }} {{ name }}{% if namespace %} -n {{ namespace }}{% endif %}"
86
+
87
+ - name: "oc_events"
88
+ description: "Retrieve the events for a specific OpenShift resource. `resource_type` can be any kubernetes resource type: 'pod', 'service', 'deployment', 'deploymentconfig', 'route', etc."
89
+ command: "oc get events --field-selector involvedObject.kind={{ resource_type }},involvedObject.name={{ resource_name }}{% if namespace %} -n {{ namespace }}{% endif %}"
90
+
91
+ - name: "oc_projects"
92
+ description: "List all projects (namespaces) in the OpenShift cluster"
93
+ command: "oc get projects"
94
+
95
+ - name: "oc_project_current"
96
+ description: "Show the current project (namespace) context"
97
+ command: "oc project"
98
+
99
+ - name: "oc_routes"
100
+ description: "List all routes in a specific namespace or cluster-wide"
101
+ command: "oc get routes{% if namespace %} -n {{ namespace }}{% else %} -A{% endif %} -o wide"
102
+
103
+ - name: "oc_route_describe"
104
+ description: "Describe a specific route to see its configuration and status"
105
+ command: "oc describe route {{ route_name }}{% if namespace %} -n {{ namespace }}{% endif %}"
106
+
107
+ - name: "oc_imagestreams"
108
+ description: "List image streams in a namespace or cluster-wide"
109
+ command: "oc get imagestreams{% if namespace %} -n {{ namespace }}{% else %} -A{% endif %} -o wide"
110
+
111
+ - name: "oc_deploymentconfigs"
112
+ description: "List deployment configs in a namespace or cluster-wide"
113
+ command: "oc get deploymentconfigs{% if namespace %} -n {{ namespace }}{% else %} -A{% endif %} -o wide"
114
+
115
+ - name: "oc_buildconfigs"
116
+ description: "List build configs in a namespace or cluster-wide"
117
+ command: "oc get buildconfigs{% if namespace %} -n {{ namespace }}{% else %} -A{% endif %} -o wide"
118
+
119
+ - name: "oc_builds"
120
+ description: "List builds in a namespace or cluster-wide"
121
+ command: "oc get builds{% if namespace %} -n {{ namespace }}{% else %} -A{% endif %} -o wide"
122
+
123
+ - name: "oc_adm_openshift_audit_logs"
124
+ description: "Get OpenShift audit logs from a specified node"
125
+ command: "oc adm node-logs {{ node_name }} --path=openshift-apiserver/audit.log"
126
+
127
+ - name: "oc_adm_openshift_audit_logs_with_filter"
128
+ description: "Get OpenShift audit logs from a specified node with an applied filter"
129
+ command: "oc adm node-logs {{ node_name }} --path=openshift-apiserver/audit.log | grep {{ grep_filter }}"
130
+
131
+ - name: "oc_build_logs"
132
+ description: "Get logs from a specific build"
133
+ command: "oc logs build/{{ build_name }}{% if namespace %} -n {{ namespace }}{% endif %}"
134
+
135
+ - name: "openshift_jq_query"
136
+ user_description: "Query OpenShift Resources: oc get {{kind}} -n {{ namespace }} -o json | jq -r {{jq_expr}}"
137
+ description: >
138
+ Use oc to get json for all resources of a specific kind pipe the results to jq to filter them. Do not worry about escaping the jq_expr it will be done by the system on an unescaped expression that you give. e.g. give an expression like .items[] | .spec.containers[].image | select(test("^registry.redhat.io/") | not)
139
+ command: oc get {{ kind }} --all-namespaces -o json | jq -r {{ jq_expr }}
140
+ transformers:
141
+ - name: llm_summarize
142
+ config:
143
+ input_threshold: 1000
144
+ prompt: |
145
+ Summarize this jq query output focusing on:
146
+ - Key patterns and commonalities in the data
147
+ - Notable outliers, anomalies, or items that need attention
148
+ - Group similar results into aggregate descriptions when possible
149
+ - Highlight any empty results, null values, or missing data
150
+ - When applicable, mention specific resource names, namespaces, or values that stand out
151
+ - Organize findings in a structured way that helps with troubleshooting
152
+ - Be concise: aim for ≤ 50% of the original text; prioritize aggregates and actionable outliers
153
+ - Include grep-ready keys/values; avoid repeating entire objects or unchanged defaults
154
+
155
+ openshift/logs:
156
+ description: "Read pod logs using oc command"
157
+ docs_url: "https://holmesgpt.dev/data-sources/builtin-toolsets/openshift/"
158
+ tags:
159
+ - core
160
+ prerequisites:
161
+ - command: "oc version --client"
162
+
163
+ # Note: Log tools use transformers with llm_summarize to automatically
164
+ # summarize large log outputs when a fast model is configured. This helps
165
+ # focus on errors, patterns, and key information while reducing context usage.
166
+
167
+ tools:
168
+ - name: "oc_previous_logs"
169
+ description: "Run `oc logs --previous` on a single pod. Used to fetch logs for a pod that crashed and see logs from before the crash. Never give a deployment name or a resource that is not a pod."
170
+ command: "oc logs {{pod_name}} -n {{ namespace }} --previous"
171
+
172
+ - name: "oc_previous_logs_all_containers"
173
+ description: "Run `oc logs --previous` on a single pod. Used to fetch logs for a pod that crashed and see logs from before the crash."
174
+ command: "oc logs {{pod_name}} -n {{ namespace }} --previous --all-containers"
175
+
176
+ - name: "oc_container_previous_logs"
177
+ description: "Run `oc logs --previous` on a single container of a pod. Used to fetch logs for a pod that crashed and see logs from before the crash."
178
+ command: "oc logs {{pod_name}} -c {{container_name}} -n {{ namespace }} --previous"
179
+
180
+ - name: "oc_logs"
181
+ description: "Run `oc logs` on a single pod. Never give a deployment name or a resource that is not a pod."
182
+ command: "oc logs {{pod_name}} -n {{ namespace }}"
183
+ transformers:
184
+ - name: llm_summarize
185
+ config:
186
+ input_threshold: 1000
187
+ prompt: |
188
+ Summarize these pod logs focusing on:
189
+ - Errors, exceptions, and warning messages
190
+ - Recent activity patterns and trends
191
+ - Any authentication, connection, or startup issues
192
+ - Performance indicators (response times, throughput)
193
+ - Group similar log entries together
194
+ - When possible, mention exact error codes or keywords for easier searching
195
+ - Be concise: aim for ≤ 50% of the original text; prioritize aggregates and actionable outliers
196
+ - Include grep-ready keys/values; avoid repeating entire logs or unchanged defaults
197
+
198
+ - name: "oc_logs_all_containers"
199
+ description: "Run `oc logs` on all containers within a single pod."
200
+ command: "oc logs {{pod_name}} -n {{ namespace }} --all-containers"
201
+ transformers:
202
+ - name: llm_summarize
203
+ config:
204
+ input_threshold: 1000
205
+ prompt: |
206
+ Summarize these multi-container pod logs focusing on:
207
+ - Errors, exceptions, and warning messages by container
208
+ - Inter-container communication patterns
209
+ - Any authentication, connection, or startup issues
210
+ - Performance indicators and resource usage patterns
211
+ - Group similar log entries together by container
212
+ - When possible, mention exact error codes or keywords for easier searching
213
+ - Strive for ≤ 50% of the original size; keep results compact and grep-friendly (one line per aggregate)
214
+ - Prioritize aggregates and actionable outliers over comprehensive details
215
+
216
+ - name: "oc_container_logs"
217
+ description: "Run `oc logs` on a single container within a pod. This is to get the logs of a specific container in a multi-container pod."
218
+ command: "oc logs {{pod_name}} -c {{container_name}} -n {{ namespace }} "
219
+
220
+ - name: "oc_logs_grep"
221
+ description: "Search for a specific term in the logs of a single pod. Only provide a pod name, not a deployment or other resource."
222
+ command: "oc logs {{ pod_name }} -n {{ namespace }} | grep {{ search_term }}"
223
+
224
+ - name: "oc_logs_all_containers_grep"
225
+ description: "Search for a specific term in the logs of a single pod across all of its containers. Only provide a pod name, not a deployment or other resource."
226
+ command: "oc logs {{pod_name}} -n {{ namespace }} --all-containers | grep {{ search_term }}"
227
+
228
+ openshift/live-metrics:
229
+ description: "Provides real-time metrics for pods and nodes using oc"
230
+ docs_url: "https://holmesgpt.dev/data-sources/builtin-toolsets/openshift/"
231
+ llm_instructions: |
232
+ The oc_top_pods or oc_top_nodes do not return time series data or metrics that can be used for graphs
233
+ Do NOT use oc_top_pods or oc_top_nodes for graph generation - it only shows current snapshot data
234
+ oc_top_pods or oc_top_nodes are for current status checks, not historical graphs
235
+ tags:
236
+ - core
237
+ prerequisites:
238
+ - command: "oc adm top nodes"
239
+ tools:
240
+ - name: "oc_top_pods"
241
+ description: "Retrieves real-time CPU and memory usage for each pod in the cluster."
242
+ command: >
243
+ oc adm top pods -A
244
+ - name: "oc_top_nodes"
245
+ description: "Retrieves real-time CPU and memory usage for each node in the cluster."
246
+ command: >
247
+ oc adm top nodes
248
+
249
+ openshift/security:
250
+ description: "OpenShift security-related resources and configurations"
251
+ docs_url: "https://holmesgpt.dev/data-sources/builtin-toolsets/openshift/"
252
+ tags:
253
+ - core
254
+ prerequisites:
255
+ - command: "oc version --client"
256
+ tools:
257
+ - name: "oc_scc"
258
+ description: "List Security Context Constraints (SCCs) in the cluster"
259
+ command: "oc get scc{% if scc_name %} {{ scc_name }}{% endif %} -o wide"
260
+
261
+ - name: "oc_scc_describe"
262
+ description: "Describe a specific Security Context Constraint"
263
+ command: "oc describe scc {{ scc_name }}"
264
+
265
+ - name: "oc_policy_who_can"
266
+ description: "Check who can perform a specific action on a resource"
267
+ command: "oc policy who-can {{ verb }} {{ resource }}{% if namespace %} -n {{ namespace }}{% endif %}"
268
+
269
+ - name: "oc_policy_can_i"
270
+ description: "Check if the current user can perform a specific action"
271
+ command: "oc policy can-i {{ verb }} {{ resource }}{% if namespace %} -n {{ namespace }}{% endif %}"
272
+
273
+ - name: "oc_serviceaccounts"
274
+ description: "List service accounts in a namespace or cluster-wide"
275
+ command: "oc get serviceaccounts{% if namespace %} -n {{ namespace }}{% else %} -A{% endif %} -o wide"
276
+
277
+ - name: "oc_rolebindings"
278
+ description: "List role bindings in a namespace or cluster-wide"
279
+ command: "oc get rolebindings{% if namespace %} -n {{ namespace }}{% else %} -A{% endif %} -o wide"
280
+
281
+ - name: "oc_clusterrolebindings"
282
+ description: "List cluster role bindings"
283
+ command: "oc get clusterrolebindings -o wide"