返回介绍

9.10 条件语句

发布于 2024-01-29 22:54:23 字数 910 浏览 0 评论 0 收藏 0

有时候一个playbook的结果取决于一个变量,或者取决于上一个任务(task)的执行结果值,在某些情况下,一个变量的值可以依赖于其他变量的值,当然也会影响Ansible的执行过程。

下面主要介绍When声明。

有时候我们想跳过某些主机的执行步骤,比如符合特定版本的操作系统将不安装某个软件包,或者磁盘空间爆满了将进行清理的步骤。在Ansible中很容易做到这一点,通过When子句实现,其中将引用Jinja2表达式。下面是一个简单的示例:

tasks:
 - name: "shutdown Debian flavored systems"
  command: /sbin/shutdown -t now
  when: ansible_os_family == "Debian"

通过定义任务的Facts本地变量ansible_os_family(操作系统版本名称)是否为Debian,结果将返回BOOL类型值,为True时将执行上一条语句command:/sbin/shutdown-t now,为False时该条语句都不会触发。我们再看一个示例,通过判断一条命令执行结果做不同分支的二级处理。

tasks:
 - command: /bin/false
  register: result
  ignore_errors: True
 - command: /bin/something
  when: result|failed
 - command: /bin/something_else
  when: result|success
 - command: /bin/still/something_else
  when: result|skipped

“when:result|success”的意思为当变量result执行结果为成功状态时,将执行/bin/something_else命令,其他同理,其中success为Ansible内部过滤器方法,返回Ture代表命令运行成功。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文