为什么 Ansible return 输出格式不同的 ifconfig?
Why does Ansible return a differently formatted ifconfig output?
主机上的以下 Ansible ad-hoc 命令 运行s ifconfig
:
ansible all -i "192.168.3.5," -m shell -a "ifconfig" -u root
(注意下面输出中的 MAC 00:aa:bb:cc:dd:11
是小写的)
192.168.3.5 | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.3.5 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::2ec:acff:fecd:e248 prefixlen 64 scopeid 0x20<link>
ether 00:aa:bb:cc:dd:11 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xd0900000-d0920000
当我在主机上通过 SSH 或本地 运行 ifconfig
时,输出格式不同(注意 MAC 00:AA:BB:CC:DD:11
全部大写)
eth0 Link encap:Ethernet HWaddr 00:AA:BB:CC:DD:11
inet addr:192.168.3.5 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::2ec:acff:fecd:e248/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1250659 errors:0 dropped:0 overruns:0 frame:0
TX packets:572911 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1050302730 (1001.6 MiB) TX bytes:88810961 (84.6 MiB)
Interrupt:16 Memory:d0900000-d0920000
根本原因是什么?有没有办法让 Ansible 以 SSH/local 格式显示输出?
环境
ansible 2.9.7
配置文件=None
python 版本 = 3.7.4
目标主机 192.168.3.5: Alpine Linux 3.10
问题
运行 which ifconfig
确定每个命令的路径后,我发现 Ansible 使用 /bin/ifconfig
而 SSH 使用 /sbin/ifconfig
解决方案
使用 . /etc/profile
获取每个 Ansible 命令的配置文件。例如:
ansible all -i "192.168.3.5," -m shell -a ". /etc/profile && ifconfig" -u root
有关更多解决方案,请参阅此相关答案:link
感谢 Zeitounator 的提示
主机上的以下 Ansible ad-hoc 命令 运行s ifconfig
:
ansible all -i "192.168.3.5," -m shell -a "ifconfig" -u root
(注意下面输出中的 MAC 00:aa:bb:cc:dd:11
是小写的)
192.168.3.5 | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.3.5 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::2ec:acff:fecd:e248 prefixlen 64 scopeid 0x20<link>
ether 00:aa:bb:cc:dd:11 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xd0900000-d0920000
当我在主机上通过 SSH 或本地 运行 ifconfig
时,输出格式不同(注意 MAC 00:AA:BB:CC:DD:11
全部大写)
eth0 Link encap:Ethernet HWaddr 00:AA:BB:CC:DD:11
inet addr:192.168.3.5 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::2ec:acff:fecd:e248/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1250659 errors:0 dropped:0 overruns:0 frame:0
TX packets:572911 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1050302730 (1001.6 MiB) TX bytes:88810961 (84.6 MiB)
Interrupt:16 Memory:d0900000-d0920000
根本原因是什么?有没有办法让 Ansible 以 SSH/local 格式显示输出?
环境
ansible 2.9.7
配置文件=None
python 版本 = 3.7.4
目标主机 192.168.3.5: Alpine Linux 3.10
问题
运行 which ifconfig
确定每个命令的路径后,我发现 Ansible 使用 /bin/ifconfig
而 SSH 使用 /sbin/ifconfig
解决方案
使用 . /etc/profile
获取每个 Ansible 命令的配置文件。例如:
ansible all -i "192.168.3.5," -m shell -a ". /etc/profile && ifconfig" -u root
有关更多解决方案,请参阅此相关答案:link
感谢 Zeitounator 的提示