问题描述
有一个简单的Ansible脚本,其中包含多个命令。他想知道如何在执行每个命令时显示输出。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在运行playbook时,可以使用-vvv
参数来获取命令的输出。
以下是如何在运行playbook时显示每个命令的输出的步骤:
1. 创建一个Ansible playbook文件,比如commands.yml
。
2. 在该文件中定义主机和任务。
3. 使用command
模块来执行命令,并使用with_items
指定要执行的命令列表。
4. 在command
模块中添加register
参数,以便将命令的输出保存到一个变量中。
5. 在任务中添加一个debug
模块,以便显示命令的输出。
以下是一个示例commands.yml
文件:
- hosts: myhost
tasks:
- name: few commands
command: "{{ item }}"
with_items:
- ls -l
- df -h
- cat /tmp/1
register: command_output
- name: display command output
debug:
var: item.stdout
with_items: "{{ command_output.results }}"
在上面的示例中,我们定义了一个名为few commands
的任务,使用command
模块执行了三个命令,并将命令的输出保存到command_output
变量中。然后,我们添加了一个名为display command output
的任务,使用debug
模块显示每个命令的输出。
方案2
如果你只想在特定任务中显示命令的输出,可以使用
debug
模块来显示命令的输出。
以下是一个示例Ansible playbook,演示了如何在特定任务中显示命令的输出:
- hosts: myhost
tasks:
- name: execute commands
command: "{{ item }}"
with_items:
- ls -l
- df -h
- cat /tmp/1
register: command_output
- name: display command output
debug:
var: item.stdout
with_items: "{{ command_output.results }}"
when: "'cat /tmp/1' in item.cmd"
在上面的示例中,我们使用command
模块执行了三个命令,并将命令的输出保存到command_output
变量中。然后,我们添加了一个名为display command output
的任务,使用debug
模块显示命令的输出。但是,我们只在命令cat /tmp/1
执行时显示输出,通过使用when
条件来实现。
请注意,以上解决方案中的示例代码仅供参考,你可以根据自己的需求进行修改和扩展。