Note
This lookup plugin is part of ansible-core and included in all Ansible installations. In most cases, you can use the short plugin name password. However, we recommend you use the Fully Qualified Collection Name (FQCN) ansible.builtin.password for easy linking to the plugin documentation and to avoid conflicting with other collections that may have the same lookup plugin name.
"{{ inventory_hostname }}" in the filepath can be used to set up random passwords per host, which simplifies password management in "host_vars" variables.Parameter | Comments |
|---|---|
Terms string / required | path to the file that stores/will store the passwords |
This describes keyword parameters of the lookup. These are the values key1=value1, key2=value2 and so on in the following examples: lookup('ansible.builtin.password', key1=value1, key2=value2, ...) and query('ansible.builtin.password', key1=value1, key2=value2, ...)
Parameter | Comments |
|---|---|
chars list / elements=string | A list of names that compose a custom character set in the generated passwords. This parameter defines the possible character sets in the resulting password, not the required character sets. If you want to require certain character sets for passwords, you can use the community.general.random_string lookup plugin. By default generated passwords contain a random mix of upper and lowercase ASCII letters, the numbers 0-9, and punctuation (”. , : - _”). They can be either parts of Python’s string module attributes or represented literally ( :, -). Though string modules can vary by Python version, valid values for both major releases include: ‘ascii_lowercase’, ‘ascii_uppercase’, ‘digits’, ‘hexdigits’, ‘octdigits’, ‘printable’, ‘punctuation’ and ‘whitespace’. Be aware that Python’s ‘hexdigits’ includes lower and upper case versions of a-f, so it is not a good choice as it doubles the chances of those values for systems that won’t distinguish case, distorting the expected entropy. when using a comma separated string, to enter comma use two commas ‘,,’ somewhere - preferably at the end. Quotes and double quotes are not supported. Default: |
encrypt string | Which hash scheme to encrypt the returning password, should be one hash scheme from If not provided, the password will be returned in plain text. Note that the password is always stored as plain text, only the returning password is encrypted. Encrypt also forces saving the salt value for idempotence. Note that before 2.6 this option was incorrectly labeled as a boolean for a long time. |
ident string added in ansible-core 2.12 | Specify version of Bcrypt algorithm to be used while using The parameter is only available for Other hash types will simply ignore this parameter. Valid values for this parameter are: |
length integer | The length of the generated password. Default: |
seed string added in ansible-core 2.12 | A seed to initialize the random number generator. Identical seeds will yield identical passwords. Use this for random-but-idempotent password generation. |
Note
lookup('ansible.builtin.password', term1, term2, key1=value1, key2=value2) and query('ansible.builtin.password', term1, term2, key1=value1, key2=value2)
- name: create a mysql user with a random password
community.mysql.mysql_user:
name: "{{ client }}"
password: "{{ lookup('ansible.builtin.password', 'credentials/' + client + '/' + tier + '/' + role + '/mysqlpassword', length=15) }}"
priv: "{{ client }}_{{ tier }}_{{ role }}.*:ALL"
- name: create a mysql user with a random password using only ascii letters
community.mysql.mysql_user:
name: "{{ client }}"
password: "{{ lookup('ansible.builtin.password', '/tmp/passwordfile', chars=['ascii_letters']) }}"
priv: '{{ client }}_{{ tier }}_{{ role }}.*:ALL'
- name: create a mysql user with an 8 character random password using only digits
community.mysql.mysql_user:
name: "{{ client }}"
password: "{{ lookup('ansible.builtin.password', '/tmp/passwordfile', length=8, chars=['digits']) }}"
priv: "{{ client }}_{{ tier }}_{{ role }}.*:ALL"
- name: create a mysql user with a random password using many different char sets
community.mysql.mysql_user:
name: "{{ client }}"
password: "{{ lookup('ansible.builtin.password', '/tmp/passwordfile', chars=['ascii_letters', 'digits', 'punctuation']) }}"
priv: "{{ client }}_{{ tier }}_{{ role }}.*:ALL"
- name: create lowercase 8 character name for Kubernetes pod name
ansible.builtin.set_fact:
random_pod_name: "web-{{ lookup('ansible.builtin.password', '/dev/null', chars=['ascii_lowercase', 'digits'], length=8) }}"
- name: create random but idempotent password
ansible.builtin.set_fact:
password: "{{ lookup('ansible.builtin.password', '/dev/null', seed=inventory_hostname) }}"
Key | Description |
|---|---|
Return value list / elements=string | a password Returned: success |
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/password_lookup.html