当我们需要判断对执行了某个操作或者某个命令后,如何做相应的响应处理,也就是说在ansible的playbook中task之间的相互传递变量。
例如以下的yaml文件,该yaml文件要实现的功能是:打包一个文件夹,然后改变这个压缩包的名称,用ip命名该压缩包。
---
- hosts: all
gather_facts: no
tasks:
- name: tar_file
shell: "cd /appslog/scans/ && tar -zcf scan.tar.gz log/"
become: true
become_method: su
become_user: root
ignore_errors: yes
- name: register vars
shell: ifconfig | grep -A 2 bond0 | grep netmask | awk '{print $2}'
register: info
- name: mv_file
shell: mv /appslog/scans/scan.tar.gz /appslog/scans/{{ item }}.tar.gz
with_items: "{{ info.stdout }}"
become: true
become_method: su
become_user: root
ignore_errors: yes
第一个任务就是用shell模块,执行打包命令
第二个任务,通过shell模块找出了ip之后,把这个执行结果传递给register
第三个任务,将第二个任务捕获到的结果info.stdout,赋值给变量通过变量{{ item }}调用register中info.stdout
在playbook 命令加入参数 -v 就可以打印出 register 的内容。所以我们可以看到具体拿到的是什么样的结果。所以我们不仅可以拿到info.stdout,还可以拿到其他的字典值,比如:stdout_lines,cmd等等