选择超过29天的秘密

时间:2017-12-28 05:19:52

标签: kubernetes

我想创建一个cron作业,从29天以来的给定类型(例如kubernetes.io/tls)中选择名称kubernetes的秘密。

我试过这两种方式:

1 - 使用grep:

kubectl get secrets --all-namespaces| grep kubernetes.io/tls
cicd           devkins.infra.mydomain.ninja.tls         kubernetes.io/tls  2 14d
cust-ao-xmas   cust-ao-xmas.infra.mydomain.ninja.tls    kubernetes.io/tls  2 1h
dev            dev.mydomain.com.tls                     kubernetes.io/tls  2 4h
logging        graylog.infra.mydomain.ninja.tls         kubernetes.io/tls  2 10d

2使用jsonpath

kubectl get secrets --all-namespaces -o jsonpath='{range .items[?(@.type=="kubernetes.io/tls")]}[{.metadata.namespace},{.metadata.name},{.metadata.creationTimestamp}]{"\n"}{end}'
[cicd,devkins.infra.mydomain.ninja.tls,2017-12-13T22:57:02Z]
[cust-ao-xmas,cust-ao-xmas.infra.mydomain.ninja.tls,2017-12-28T03:13:32Z]
[dev,dev.mydomain.com.tls,2017-12-28T00:59:10Z]
[logging,graylog.infra.mydomain.ninja.tls,2017-12-17T22:23:38Z]

他们都返回了答案,但却很难解析

有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

这就是我使用的......可能有更好的方法,但适用于我的情况(秘密超过24小时)。

kubectl get secrets -o json | jq -r "[.items[] | {name: .metadata.name, startTime: .metadata.creationTimestamp | fromdate } | select(.startTime < (now | . - 86400))]" | jq -r ".[].name"

答案 1 :(得分:0)

  

他们都返回了答案,但却很难解析

如果您的意思是解析输出,那么kubectl --output=json--output=yaml可能会让您更进一步实现目标。我发现您已经发现了jsonpath,但我觉得它的语法难以记住或使用,而--output=json可以进入jqpython或其他一千个乐趣使用标准文本格式的工具

如果你绝对必须留在kubectl之内,那么使用golang text/template几乎肯定会更强大,并且可以说更容易阅读,但是以冗长为代价