为什么 Ansible 的 network_cli 模块能够在我的主机上本地运行命令?

时间:2021-06-25 14:48:58

标签: ansible

我有以下库存文件:

[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”的情况下工作?

0 个答案:

没有答案