Batch of docs backports: * docs: Clarify include_task v import_tasks with conditionals (#43856) (cherry picked from commit6be42a2a0e
) * Add single quotes around package name (#45152) (cherry picked from commit0d81386144
) * prefer ansible_facts namespace and dict notation (#44980) (cherry picked from commit44510448b0
) * fix cherrypick conflict - scenario_guides * Update implicit_localhost.rst (#45455) (cherry picked from commitf68cd1acc6
) * updated fbsd install instructions (#45309) (cherry picked from commite9c2695ce7
) * Change "Defaulting Undefined Variables" (#41379) (cherry picked from commite35c4be1c1
) * adds license details to dev guide pages (#45574) (cherry picked from commit6e68d77f6d
) * FAQ: fix a typo, add link to 'vars' lookup (#42412) (cherry picked from commit95649dc793
) * Fix link and toctree (#45595) (cherry picked from commit6999bf318f
) * Improve the local toctree (and title) (#45590) (cherry picked from commitafea00fa9f
) * Add undocumented configuration parameter and explain in porting guide (#36059) (cherry picked from commita892a6ef03
) * Simplify PPA installation for Ubuntu (#45690) (cherry picked from commit78e9f452a5
) * adding git+ssh uri scheme (#36025) (cherry picked from commit84a4257774
) * Add workaround for non-standard kerberos environments (#41465) (cherry picked from commit4e532e0ad9
) * Restore license agreement (#45809) (cherry picked from commitf430f60541
) * partial cherry-pick - lenovo doc update PR 45483
2 KiB
- orphan
Implicit 'localhost'
When you try to reference a localhost
and you don't have
it defined in inventory, Ansible will create an implicit one for
you.:
- hosts: all
tasks:
- name: check that i have log file for all hosts on my local machine
stat: path=/var/log/hosts/{{inventory_hostname}}.log
delegate_to: localhost
In a case like this (or local_action
) when Ansible needs
to contact a 'localhost' but you did not supply one, we create one for
you. This host is defined with specific connection variables equivalent
to this in an inventory:
...
hosts:
localhost:
vars:
ansible_connection: local
ansible_python_interpreter: "{{ansible_playbook_python}}"
This ensures that the proper connection and Python are used to
execute your tasks locally. You can override the built-in implicit
version by creating a localhost
host entry in your
inventory. At that point, all implicit behaviors are ignored; the
localhost
in inventory is treated just like any other host.
Group and host vars will apply, including connection vars, which
includes the ansible_python_interpreter
setting. This will
also affect delegate_to: localhost
and
local_action
, the latter being an alias to the former.
Note
- This host is not targetable via any group, however it will use vars
from host_vars
and from the 'all' group. - The
inventory_file
and inventory_dir
magic
variables are not available for the implicit localhost as they are
dependent on each inventory host. - This implicit host
also gets triggered by using 127.0.0.1
or ::1
as they are the IPv4 and IPv6 representations of 'localhost'. - Even
though there are many ways to create it, there will only ever be ONE
implicit localhost, using the name first used to create it. - Having
connection: local
does NOT trigger an implicit localhost,
you are just changing the connection for the
inventory_hostname
.