我有以下库存文件:
[lab]
router1.mgt.net
router2.mgt.net
[lab:vars]
ansible_network_os=ios
ansible_user=user
ansible_password=password
ansible_connection=network_cli
#ansible_become=yes
#ansible_become_method=enable
#ansible_ssh_port=22
然后播放:
- hosts: lab
gather_facts: no
tasks:
- name: Run block tasks
# delegate_to: 127.0.0.1
block:
- name: Get cert serial number using OpenSSL
shell: |
openssl s_client -connect {{ inventory_hostname }}:50051 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p' |openssl x509 -noout -serial | cut -d'=' -f2 | sed -e 's/\(.*\)/\L\1/'
register: serialNum
- name: Print Serial Numbers
debug:
msg: "{{ serialNum.stdout_lines }}"
- name: Run ls -lhtr
shell: |
pwd; ls -lhtr
register: files
- debug:
msg: "{{ files.stdout_lines }}"
如您所见,我已将“delegate_to: 127.0.0.1”参数注释掉,但是当我运行剧本时,所有这些 shell 命令都在本地 VM 上本地运行并提供有效数据。
当我注释掉“ansible_connection=network_cli”时,块任务中的那些 shell 命令就会失败。
此外,如果我在块任务中注释掉“ansible_connection=network_cli”并取消注释“delegate_to: 127.0.0.1”,那么一切都会按照我期望的那样运行,因为我将委托参数指定给 localhost。
所以我不确定为什么这些 shell 命令在禁用委托参数和未注释“ansible_connection=network_cli”的情况下工作?