Ansible 标准输出格式
Ansible stdout Formatting
承担以下任务:
shell: "some_script.sh"
register: "some_script_result"
debug:
msg: "Output: {{ some_script_result.stdout_lines }}
我收到以下输出:
"msg": "Output: [u'some_value',u'some_value2,u'some_value3]"
如何让输出打印为?
"msg":
Output:
some_value
some_value2
some_value3
Ansible 版本是 2.4.2。
谢谢!
尝试 this 选项。你会喜欢的。
Ansible 2.5 引入了一个新的 YAML 回调插件——这意味着任何机器 运行ning Ansible 2.5.0 或更高版本都可以自动开始使用这种格式,而无需安装自定义插件。
要使用它,请编辑您的 ansible.cfg 文件(在 /etc/ansible/ansible.cfg 中的全局文件,或在 playbook/project 中的本地文件),并在[默认] 部分:
# Use the YAML callback plugin.
stdout_callback = yaml
# Use the stdout_callback when running ad-hoc commands.
bin_ansible_callbacks = True
现在我可以轻松阅读您的输出消息
如果出现以下错误:
ERROR! Invalid callback for stdout specified: yaml
运行
ansible-galaxy collection install community.general
另一个选项:
https://blog.alexgittings.com/improving-the-ansible-output-with-anstomlog/
把它存储在ansible/ansible.cfg
里面
➜ tree ansible
ansible
├── ansible.cfg
├── callbacks
│ ├── anstomlog.py
└── playbooks
└── nginx.yaml
ANSIBLE_CONFIG=ansible/ansible.cfg ansible-playbook -u centos --private-key .ssh/key -i `terraform output bastion_ip`, ansible/playbooks/nginx.yaml
这是一个错误报告:
https://github.com/ansible/ansible/issues/27078 -
为什么 ansible 的默认输出没有更多的人类可读性......还是?
可能的答案:
[defaults]
nocows = True
# minimal, debug, yaml
stdout_callback = yaml
或:
ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook ....
我正在尝试进行以下更改,但我仍然没有正确获得 yaml 的输出格式或调试选项输出。后来我发现 ansible 用户配置从用户的配置文件中获取它。所以我在用户特定位置更改了回调并且它起作用了。
[automation@ansibleserver ~]$ ansible --version
ansible 2.9.9
config file = /home/automation/ansible.cfg
# Use the YAML callback plugin.
stdout_callback = yaml
# Use the stdout_callback when running ad-hoc commands.
bin_ansible_callbacks = True
因此请确保,即使您在 /etc/ansible/ansible.conf 中进行了更改,也要在用户的配置文件中尝试以获得良好的结果。除了 yaml ,调试还提供了很好的有用格式(对于 linux 用户)
到目前为止,我发现在 Ansible 中获得类似 CLI 的输出最有效,并且开箱即用(至少对我来说在 Fedora 34、Ansible 2.9 上)是设置
stdout_callback = unixy
bin_ansible_callbacks = True
在你的 ansible.cfg
中。鉴于任务
tasks:
- name: uptime
shell: uptime
- name: volumes
shell: "df -h"
终端中的输出看起来像
- all on hosts: all -
uptime...
host1 done | stdout: 08:20:09 up 33 min, 1 user, load average: 0.55, 0.27, 0.26
host2 done | stdout: 08:20:09 up 1 day, 1:39, 1 user, load average: 0.18, 0.17, 0.17
volumes...
host1 done | stdout: Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 1.5G 5.4G 21% /overlay/pivot
devtmpfs 212M 0 212M 0% /dev
none 217M 0 217M 0% /overlay/pivot/overlay
none 217M 137M 80M 64% /overlay/rwdata
overlay 217M 137M 80M 64% /
tmpfs 217M 0 217M 0% /dev/shm
tmpfs 217M 25M 192M 12% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 217M 0 217M 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 53M 200M 21% /boot
tmpfs 44M 0 44M 0% /run/user/1000
host2 done | stdout: Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 1.5G 5.4G 22% /overlay/pivot
devtmpfs 212M 0 212M 0% /dev
none 217M 0 217M 0% /overlay/pivot/overlay
none 217M 103M 114M 48% /overlay/rwdata
overlay 217M 103M 114M 48% /
tmpfs 217M 0 217M 0% /dev/shm
tmpfs 217M 5.8M 211M 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 217M 0 217M 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 53M 200M 21% /boot
tmpfs 44M 0 44M 0% /run/user/1000
- Play recap -
host1 : ok=1 changed=1 unreachable=0 failed=0 rescued=0 ignored=0
host2 : ok=1 changed=1 unreachable=0 failed=0 rescued=0 ignored=0
您应该能够使用 ansible-doc -t callback -l
列出所有可用的回调插件,并使用 ansible-doc -t callback <plugin name>
列出它们各自的文档
源文档:https://docs.ansible.com/ansible/2.9/plugins/callback.html
承担以下任务:
shell: "some_script.sh"
register: "some_script_result"
debug:
msg: "Output: {{ some_script_result.stdout_lines }}
我收到以下输出:
"msg": "Output: [u'some_value',u'some_value2,u'some_value3]"
如何让输出打印为?
"msg":
Output:
some_value
some_value2
some_value3
Ansible 版本是 2.4.2。
谢谢!
尝试 this 选项。你会喜欢的。
Ansible 2.5 引入了一个新的 YAML 回调插件——这意味着任何机器 运行ning Ansible 2.5.0 或更高版本都可以自动开始使用这种格式,而无需安装自定义插件。
要使用它,请编辑您的 ansible.cfg 文件(在 /etc/ansible/ansible.cfg 中的全局文件,或在 playbook/project 中的本地文件),并在[默认] 部分:
# Use the YAML callback plugin.
stdout_callback = yaml
# Use the stdout_callback when running ad-hoc commands.
bin_ansible_callbacks = True
现在我可以轻松阅读您的输出消息
如果出现以下错误:
ERROR! Invalid callback for stdout specified: yaml
运行
ansible-galaxy collection install community.general
另一个选项:
https://blog.alexgittings.com/improving-the-ansible-output-with-anstomlog/
把它存储在ansible/ansible.cfg
里面➜ tree ansible
ansible
├── ansible.cfg
├── callbacks
│ ├── anstomlog.py
└── playbooks
└── nginx.yaml
ANSIBLE_CONFIG=ansible/ansible.cfg ansible-playbook -u centos --private-key .ssh/key -i `terraform output bastion_ip`, ansible/playbooks/nginx.yaml
这是一个错误报告:
https://github.com/ansible/ansible/issues/27078 - 为什么 ansible 的默认输出没有更多的人类可读性......还是?
可能的答案:
[defaults]
nocows = True
# minimal, debug, yaml
stdout_callback = yaml
或:
ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook ....
我正在尝试进行以下更改,但我仍然没有正确获得 yaml 的输出格式或调试选项输出。后来我发现 ansible 用户配置从用户的配置文件中获取它。所以我在用户特定位置更改了回调并且它起作用了。
[automation@ansibleserver ~]$ ansible --version
ansible 2.9.9
config file = /home/automation/ansible.cfg
# Use the YAML callback plugin.
stdout_callback = yaml
# Use the stdout_callback when running ad-hoc commands.
bin_ansible_callbacks = True
因此请确保,即使您在 /etc/ansible/ansible.conf 中进行了更改,也要在用户的配置文件中尝试以获得良好的结果。除了 yaml ,调试还提供了很好的有用格式(对于 linux 用户)
到目前为止,我发现在 Ansible 中获得类似 CLI 的输出最有效,并且开箱即用(至少对我来说在 Fedora 34、Ansible 2.9 上)是设置
stdout_callback = unixy
bin_ansible_callbacks = True
在你的 ansible.cfg
中。鉴于任务
tasks:
- name: uptime
shell: uptime
- name: volumes
shell: "df -h"
终端中的输出看起来像
- all on hosts: all -
uptime...
host1 done | stdout: 08:20:09 up 33 min, 1 user, load average: 0.55, 0.27, 0.26
host2 done | stdout: 08:20:09 up 1 day, 1:39, 1 user, load average: 0.18, 0.17, 0.17
volumes...
host1 done | stdout: Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 1.5G 5.4G 21% /overlay/pivot
devtmpfs 212M 0 212M 0% /dev
none 217M 0 217M 0% /overlay/pivot/overlay
none 217M 137M 80M 64% /overlay/rwdata
overlay 217M 137M 80M 64% /
tmpfs 217M 0 217M 0% /dev/shm
tmpfs 217M 25M 192M 12% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 217M 0 217M 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 53M 200M 21% /boot
tmpfs 44M 0 44M 0% /run/user/1000
host2 done | stdout: Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 1.5G 5.4G 22% /overlay/pivot
devtmpfs 212M 0 212M 0% /dev
none 217M 0 217M 0% /overlay/pivot/overlay
none 217M 103M 114M 48% /overlay/rwdata
overlay 217M 103M 114M 48% /
tmpfs 217M 0 217M 0% /dev/shm
tmpfs 217M 5.8M 211M 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 217M 0 217M 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 53M 200M 21% /boot
tmpfs 44M 0 44M 0% /run/user/1000
- Play recap -
host1 : ok=1 changed=1 unreachable=0 failed=0 rescued=0 ignored=0
host2 : ok=1 changed=1 unreachable=0 failed=0 rescued=0 ignored=0
您应该能够使用 ansible-doc -t callback -l
列出所有可用的回调插件,并使用 ansible-doc -t callback <plugin name>
源文档:https://docs.ansible.com/ansible/2.9/plugins/callback.html