如何记录Ansible Playbook运行的原生命令

71次阅读
没有评论

问题描述

想知道在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"
  1. 使用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模块来查看变量的值。
这种方法可以帮助您获取执行的命令,但需要根据具体情况进行适当的调整和处理。

正文完