Ansible 进阶用法:debug 与 流程控制

less than 1 minute read

Published:

0x01 Debug 场景:测试 Playbook 中部分代码

当开发一个 Playbook 时,如果只想执行其中部分 Task。参考 Ansible 中文权威指南,可用下面三个参数来限制 Playbook 的执行流程。

  1. --start-at:从指定任务开始执行
  2. tag:指定需要测试的任务
  3. step:逐步执行任务

可以参考下面代码设置脚本:

ansible-playbook -i $region_name -l $node_name /
  $playbook_name /
  --user $username /
  --ask-become-pass /
  --start-at=$task_name

0x02 根据系统变量来判断 Playbook 是否进行

当我们想设置对于某些服务器不执行某个Playbook中后续Task时,同时又不想让Playbook报错,根据 Ansible 官方文档,可以使用 meta 模块的 end_host 设置来控制 Playbook 的执行流程。

- name: Check bonding status
  meta: end_host
  when: '"bond0" in ansible_interfaces'

0x03 使用 ad-hoc 方式运行指定任务

Ansible 官方文档中介绍了 ad-hoc 的使用方式。

ansible -i $region_name -l $node_name -m "setup" -a "filter=ansible_interfaces"

ansible -i $region_name -l $node_name -m "shell" -a "cmd='ping baidu.com'"

0x04 中间变量管理:set_factvar 的区别

var 无法作为单独的 task 使用,而且和 shell 等命令使用不兼容,最好编写一个单独的 set_fact Task 来设定一些变量。

不过偶尔会出现 set_fact 定义的变量在使用时被定义为 UNDIFINE 的问题,往往是因为 set_fact 的参数中包含变量,导致在调用时还未赋值。这时候可以通过添加 default过滤器来设定默认值。

- name: get interface info
  set_fact:
    interface_available: ''
    interface_number: ''

0x05 常用模块参考

执行命令类

软件安装 & 提权

变量声明

流程控制


Reference