【问题标题】:How to delete deployments of a greater than date?如何删除大于日期的部署?
【发布时间】:2020-11-07 14:31:45
【问题描述】:

我需要删除集群上超过 14 天的部署。如果我跑:

oc get deploy --sort-by=.metadata.creationTimestamp | grep wml-os-rt-hybrid | awk '{ print $1 "\t\t" $6;}'

它给了我这些部署的列表和它们的年龄:

wml-os-rt-hybrid0.1-gz3vczfc        15d
wml-os-rt-hybrid0.1-fj167pbt        8d
wml-os-rt-hybrid0.1-bdzkqi7z        7d
wml-os-rt-hybrid0.1-g4hclw4v        7d
wml-os-rt-hybrid0.1-j6x9tzt6        7d
wml-os-rt-hybrid0.1-qplkkilw        4d
wml-os-rt-hybrid0.1-sadgz9cz        6h

我对此很陌生,无法弄清楚我需要添加什么,以便它还会删除任何早于 14d 的部署,在这种情况下,它只是一个部署,但在其他集群中它将是数百个.目前我手动删除它查看列表并通过运行删除任何超过 14 天的内容(使用上面的示例):

oc delete deployment wml-os-rt-hybrid0.1-gz3vczfc

这是我试图找到关于如何自动化的答案的部分

【问题讨论】:

标签: awk openshift cloud-pak-for-data


【解决方案1】:

要列出所有超过 14 天的条目,请尝试:

oc get deploy --sort-by=.metadata.creationTimestamp | awk '/wml-os-rt-hybrid/ && $6+0>14 { print $1 "\t\t" $6;}'

要删除这些部署:

oc get deploy --sort-by=.metadata.creationTimestamp | awk '/wml-os-rt-hybrid/ && $6+0>14 { system("oc delete deployment "$1);}'

这里,/wml-os-rt-hybrid/ && $6+0>14 选择所有 (a) 包含 wml-os-rt-hybrid 并且 (b) 具有大于 14 的第六个字段的行。然后我们可以像第一个命令一样打印,或者像以下那样运行系统命令第二个。

在将 $6 与 14 进行比较之前,我们将零添加到 awk。我们这样做是因为它告诉 awk$6 视为一个数字,以便比较是数字而不是词法。

请注意,awk 命令消除了对grep 进程的需要。这使得生成的命令更高效(创建的进程更少)和更简洁。

【讨论】:

  • 太棒了!谢谢你。我将在星期一进行测试,然后将标记为已回答。在我阅读和理解的范围内 - 应该是这样。我非常感谢您的解释
  • 不要使用 awk 作为 shell。拥有shell { oc; awk { system { shell { oc } } } } 的调用堆栈是比shell { oc; awk; oc } 更糟糕的方法,几天前我向OP 展示了如何在unix.stackexchange.com/q/598516/133219 回答相同的问题。此外,您的代码没有考虑到某些 $6s 是几小时而不是几天,也没有引用通过 $1 传递给 shell 的字符串。
  • 这不会使代码更高效顺便说一句,因为它在每次调用system() 时每行输出一次生成一个子shell,而 grep 只让一些行通过 awk 可能更有效而不是让 awk 在每一行上进行字段拆分等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多