可以通过不同的方式实现在本地主机上运行任务。
我不明白下面这两个任务的执行方式是否有区别或者它们是否完全相同。
如果是这样,fakehost
那么第二个任务中只是一个占位符,对吗?
- hosts: localhost
gather_facts: no
tasks:
- name: localhost without explicit connection
boto3_facts:
- hosts: fakehost
connection: local
gather_facts: no
tasks:
- name: runner host using local connection
boto3_facts:
答案1
问:“第二个任务中的fakehost只是一个占位符,对吗?”
答:是的。这只是一个别名(占位符)。
使用以下方式运行剧本-vvvv to enable connection debugging
。 你会看到的
verbosity: 4
connection: smart
ansible/lib/ansible/config/base.yml说
DEFAULT_TRANSPORT:
name: Connection plugin
default: smart
description: "Default connection plugin to use, the 'smart' option will toggle
between 'ssh' and 'paramiko' depending on controller OS and ssh
versions"
下一步是挖掘源代码,找出 ssh 和 paramiko 如何处理 localhost。(大胆猜测,什么都不做,使用连接local
)。
连接插件当地的说
“远程用户被忽略,而是使用执行 ansible CLI 的用户。”
让我们添加一个remote_user
剧本
shell> cat pb.yml
- hosts: localhost
gather_facts: no
remote_user: admin
tasks:
- name: localhost without explicit connection
debug:
msg:
- "{{ inventory_hostname }}"
- "{{ ansible_user }}"
- hosts: fakehost
gather_facts: no
connection: local
remote_user: admin
tasks:
- name: runner host using local connection
debug:
msg:
- "{{ inventory_hostname }}"
- "{{ ansible_user }}"
给出
shell> whoami
vlado
shell> ansible-playbook -i hosts pb.yml
ok: [localhost] =>
msg:
- localhost
- vlado
ok: [fakehost] =>
msg:
- fakehost
- vlado
库存是
shell> cat hosts
fakehost
我认为 Ansible 足够“智能”,能够使用local
两种情况下都可以使用连接插件。