【发布时间】:2019-08-09 16:23:50
【问题描述】:
提前感谢您花时间阅读本文。
我正在使用 Kubernetes 并使用 Ansible 与我的集群进行任何交互。拥有一些成功部署应用程序的剧本。
我用于部署的主要 ansible 组件是 k8s,它允许我应用我的 yaml 配置。
我可以成功地等到部署完成使用
k8s:
state: present
definition: config.yaml
wait: yes
wait_timeout: 10
但是,不幸的是,默认情况下,相同的技巧不适用于 Kubernetes Jobs。模块简单地立即退出,在 ansible 模块中明确描述,这是真的:
对于没有实现的资源种类,wait 会立即返回,除非设置了 wait_condition。
为了涵盖这种情况,模块规范建议指定
wait_condition:
reason: REASON
type: TYPE
status: STATUS
文档还说:
条件的可能类型特定于 Kubernetes 中的每种资源类型。请参阅给定资源的状态字段的 API 文档以查看可能的选择。
我检查了API规范,发现和in the following answer说的一样:
唯一的类型值是“完成”和“失败”,它们可能具有“真”或“假”状态
所以,我的QUESTION很简单:有没有人知道如何正确使用这个wait_condition?您是否已经尝试过(目前,它是相对较新的功能)?
任何想法在哪里看也很感激。
更新:
这是我现在使用的一种解决方法:
- name: Run Job
k8s:
state: present
definition: job_definition.yml
- name: Wait Until Job Is Done
k8s_facts:
name: job_name
kind: Job
register: job_status
until: job_status.resources[0].status.active != 1
retries: 10
delay: 10
ignore_errors: yes
- name: Get Final Job Status
k8s_facts:
name: job_name
kind: Job
register: job_status
- fail:
msg: "Job Has Been Failed!"
when: job_status.resources[0].status.failed == 1
但是直接使用合适的模块功能会更好。
【问题讨论】:
标签: kubernetes ansible