问题描述
想知道在Ansible Playbook运行时,是否有一种方法可以记录正在执行的命令。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在Ansible中,可以通过设置日志文件来记录正在执行的命令。可以在Ansible配置文件中设置日志文件,然后使用verbose选项运行ansible-playbook。
以下是具体步骤:
1. 在Ansible配置文件中设置日志文件。可以使用环境变量ANSIBLE_LOG_PATH
来指定日志文件的路径。例如,可以使用以下命令设置日志文件名为ansible-$(date +%Y%m%d%H%M%S).log
:
export ANSIBLE_LOG_PATH="ansible-$(date +%Y%m%d%H%M%S).log"
- 使用verbose选项运行ansible-playbook。可以使用
-vvvv
选项来显示执行的SSH命令。同时,可以使用--diff
选项来显示所做的更改。
以下是运行ansible-playbook的示例命令:
ansible-playbook -vvvv \
--diff \
-i inventory/myinventory \
myplaybook.yml
在上面的示例中,我们使用-vvvv
选项来显示详细的输出,包括执行的SSH命令。使用--diff
选项来显示所做的更改。
日志文件将保存在当前目录中,文件名类似于ansible-20200818155322.log
。
请注意,日志文件将记录执行的命令,但有时执行的命令可能是运行Ansible脚本的命令,而不是实际执行的命令。因此,需要根据具体情况判断是否满足需求。
方案2
使用register模块将结果存储在变量中。
另一种方法是使用register模块将结果存储在变量中。这样可以在Playbook执行过程中获取执行的命令。
以下是一个示例Playbook:
- hosts: all
tasks:
- name: Ansible register variable basic example
shell: "find *.txt"
args:
chdir: "/Users/mdtutorials2/Documents/Ansible"
register: find_output
- debug:
var: find_output
在上面的示例中,我们使用register模块将find *.txt
命令的结果存储在变量find_output
中。然后,可以使用debug模块来查看变量的值。
这种方法可以帮助您获取执行的命令,但需要根据具体情况进行适当的调整和处理。