Reports & Queries
ktl
can be also used to generate reports and queries via the csv
and table
output
options, combined with the
starlark
filter.
List resources
❯ ktl query pods,deployments.apps \
-C 'CONTAINER:.spec.template.spec.containers.*.name' \
-C 'IMAGE:.spec.template.spec.containers.*.image' \
-n ktl-examples
CLUSTER KIND NAMESPACE NAME CONTAINER IMAGE
dev-a Deployment ktl-examples demo-app demo-app demo-app:v2
dev-a Deployment ktl-examples demo-app sidecar sidecar:v1
dev-a Pod ktl-examples demo-app-85f587d6cf-bcfdv
dev-b Deployment ktl-examples demo-app demo-app demo-app:v2
dev-b Pod ktl-examples demo-app-7f9d96987c-564q6
prod-a Deployment ktl-examples demo-app demo-app demo-app:v1
prod-a Deployment ktl-examples demo-app sidecar sidecar:v1
prod-a Pod ktl-examples demo-app-7d469d5fbb-t2zpq
prod-b Deployment ktl-examples demo-app demo-app demo-app:v1
prod-b Pod ktl-examples demo-app-59c695bc9b-k8d7w
Query via Starlark
❯ ktl query deployments.apps -n ktl-examples \
'it["spec.template.spec.containers.[name=sidecar]"]'
CLUSTER KIND NAMESPACE NAME
dev-a Deployment ktl-examples demo-app
prod-a Deployment ktl-examples demo-app
Advanced queries and computed fields
examples/run-report-starlark/pipeline.yaml
source:
kustomize:
path: '../setup/${CLUSTER}'
clusters:
- matchNames: { include: [ '*-*' ] }
filters:
- starlark:
script: |-
for it in resources:
if not str(it["metadata.name"]).startswith("kwok"):
continue
it.metadata.labels.new = "for-%s" % (it.metadata.name)
output.append(it)
output:
csv:
path: output.csv
columns:
- name: CLUSTER
text: '${CLUSTER}'
- name: KIND
field: .kind
- name: NAME
field: .metadata.name
- name: NEW_LABEL
field: .metadata.labels.new
examples/run-report-starlark/output.csv
CLUSTER,KIND,NAME,NEW_LABEL
dev-a,Node,kwok-node-0,for-kwok-node-0
dev-b,Node,kwok-node-0,for-kwok-node-0
prod-a,Node,kwok-node-0,for-kwok-node-0
prod-b,Node,kwok-node-0,for-kwok-node-0