kubernetes - Ansible剧本等到所有Pod都在运行

标签 kubernetes ansible

我有一个有趣的(工作中)剧本,它查看kubectl get pods -o json的输出,直到 pods 处于Running状态为止。现在,我想将其扩展到多个 pods 。核心问题是kubectl查询的json结果是一个列表,我知道如何访问第一个项目,但不是所有项目...

- name: wait for pods to come up
  shell: kubectl get pods -o json
  register: kubectl_get_pods
  until: kubectl_get_pods.stdout|from_json|json_query('items[0].status.phase') == "Running"
  retries: 20

json对象看起来像
[  { ...  "status": { "phase": "Running" } },
   { ...  "status": { "phase": "Running" } },
   ...
]

使用[0]访问用于处理列表中一个对象的第一个项目,但是我不知道如何将其扩展到多个项目。我尝试了不起作用的[*]

最佳答案

我会尝试这样的事情(对我有用):

tasks:
- name: wait for pods to come up
  shell: kubectl get pods -o json
  register: kubectl_get_pods
  until: kubectl_get_pods.stdout|from_json|json_query('items[*].status.phase')|unique == ["Running"]

基本上,您将获得所有Pod的所有状态,并将它们组合到一个唯一列表中,然后直到该列表为["Running"]时,它才能完成。因此,例如,如果您所有的Pod都没有运行,您将得到类似["Running", "Starting"]的信息。

关于kubernetes - Ansible剧本等到所有Pod都在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53198576/

相关文章:

linux - 如何设置远程主机的环境变量

linux - 如何在ansible中使用yum模块禁用所有存储库?

ubuntu - Ansible 无法提供 Vagrant 盒子

python - 通过 key 中的共同值组合两个 ansible 字典

kubernetes - 未能保存输出 : timed out waiting for the condition on Argo Workflow

kubernetes - Helm 预安装作业在服务帐户之前创建

kubernetes - 获取卡在终止状态超过 10 分钟的 Pod 列表并在 Ansible 中删除它们

networking - 无法删除法兰绒插件

escaping - 如何在同一字符串中转义 YAML 中的双引号和单引号

postgresql - 将 SQLite 转储迁移到部署在 Kubernetes 上的 PostgreSQL