我正在尝试获取 Ansible 知识并解决一些问题:
我想要,不确定是否可能。输出可以保存到运行 playbook 的服务器本地吗?
在示例中,我只是打印到正在运行剧本的终端。当数据量很大时,它没有多大用处。我希望将其保存在我正在运行剧本的服务器上的文件中。
---
- name: list os version
hosts: test
become: true
tasks:
- name: hostname
command: hostname
register: command_output
- name: cat /etc/redhat-release
command: cat redhat-release chdir=/etc
- name: Print output to console
debug:
msg: "{{command_output.stdout}}"
Run Code Online (Sandbox Code Playgroud)
我真的希望输出到一个文件。我找不到任何关于这是否可能的信息。
正如您在 ansible 文档中所读到的那样,您可以在 playbook 所在的目录中创建一个本地配置文件 ansible.cfg ,然后设置正确的配置日志文件以输出其中的所有 playbook 输出:Ansible 输出文档
默认情况下,Ansible 将有关播放、任务和模块参数的输出发送到控制节点上的屏幕 (STDOUT)。如果要捕获日志中的 Ansible 输出,您有以下三个选项: 要将 Ansible 输出保存在控制节点上的单个日志中,请设置 log_path 配置文件设置。您可能还需要设置 display_args_to_stdout,这有助于通过在 Ansible 输出中包含变量值来区分类似的任务。
要将 Ansible 输出保存在单独的日志中(每个受管节点上一个),请设置 no_target_syslog 和 syslog_facility 配置文件设置。要将 Ansible 输出保存到安全数据库,请使用 AWX 或红帽 Ansible 自动化平台。然后,您可以使用图表和/或 REST API 根据一段时间内的主机、项目和特定清单来查看历史记录。
如果您只想将任务结果输出到文件中,请在本地主机委托上使用复制模块
---
- name: list os version
hosts: test
become: true
tasks:
- name: hostname
command: hostname
register: command_output
- name: cat /etc/redhat-release
command: cat redhat-release chdir=/etc
- name: Create your local file on master node
ansible.builtin.file:
path: /your/local/file
owner: foo
group: foo
mode: '0644'
delegate_to: localhost
- name: Print output to file
ansible.builtin.copy:
content: "{{command_output.stdout}}"
dest: /your/local/file
delegate_to: localhost
Run Code Online (Sandbox Code Playgroud)