ansible.builtin.password lookup – 从文件中检索或生成随机密码
注意
此lookup插件是ansible-core
的一部分,包含在所有Ansible安装中。在大多数情况下,您可以使用简短的插件名称password
。但是,我们建议您使用完全限定集合名称 (FQCN) ansible.builtin.password
,以便轻松链接到插件文档并避免与可能具有相同lookup插件名称的其他集合冲突。
摘要
生成一个随机纯文本密码并将其存储在给定文件路径的文件中。
如果文件已存在,它将检索其内容,行为与with_file相同。
在文件路径中使用
"{{ inventory_hostname }}"
之类的变量可以为每个主机设置随机密码,这简化了"host_vars"
变量中的密码管理。一种特殊情况是使用/dev/null作为路径。密码lookup将每次生成一个新的随机密码,但不会将其写入/dev/null。当您需要密码但不需要将其存储在控制器上时,可以使用此方法。
术语
参数 |
注释 |
---|---|
存储/将存储密码的文件的路径 |
关键字参数
这描述了lookup的关键字参数。这些是在以下示例中的值key1=value1
,key2=value2
等等:lookup('ansible.builtin.password', key1=value1, key2=value2, ...)
和query('ansible.builtin.password', key1=value1, key2=value2, ...)
参数 |
注释 |
---|---|
构成生成的密码中自定义字符集的名称列表。 此参数定义结果密码中可能的字符集,而不是必需的字符集。如果您想为密码要求某些字符集,可以使用community.general.random_string lookup插件。 默认情况下,生成的密码包含大写和小写ASCII字母、数字0-9和标点符号(”. , : - _”)的随机组合。 它们可以是Python字符串模块属性的一部分,也可以直接表示(:, -)。 虽然字符串模块会因Python版本而异,但两个主要发行版的有效值都包括:'ascii_lowercase'、'ascii_uppercase'、'digits'、'hexdigits'、'octdigits'、'printable'、'punctuation'和'whitespace'。 请注意,Python的'hexdigits'包括a-f的小写和大写版本,因此它不是一个好选择,因为它会使这些值的几率加倍,对于不区分大小写的系统,这会扭曲预期的熵。 使用逗号分隔的字符串时,要输入逗号,请在某个地方使用两个逗号',,' - 最好是在结尾。不支持引号和双引号。 默认值: |
|
使用哪个哈希方案加密返回的密码,应该是 如果没有提供,密码将以纯文本形式返回。 请注意,密码始终以纯文本形式存储,只有返回的密码会被加密。 加密还强制保存salt值以实现幂等性。 请注意,在2.6之前,此选项长期以来被错误地标记为布尔值。 |
|
在使用 此参数仅适用于 其他哈希类型将忽略此参数。 此参数的有效值为: |
|
生成的密码长度。 默认值: |
|
用于初始化随机数生成器的种子。 相同的种子将产生相同的密码。 将其用于随机但幂等的密码生成。 |
注释
注意
当一起使用关键字参数和位置参数时,必须在关键字参数之前列出位置参数:
lookup('ansible.builtin.password', term1, term2, key1=value1, key2=value2)
和query('ansible.builtin.password', term1, term2, key1=value1, key2=value2)
如果您不需要按主机生成随机密码,密码lookup插件的一个很好的替代方案是使用Vault在playbook中。阅读那里的文档并考虑首先使用它,它将更适合大多数应用程序。
如果文件已经存在,则不会向其中写入数据。如果文件有内容,则这些内容将作为密码读取。空文件导致密码返回为空字符串。
与所有lookup一样,这在Ansible主机上以运行playbook的用户身份运行,“become”不适用,目标文件必须可由playbook用户读取,或者,如果它不存在,playbook用户必须具有足够的权限来创建它。(例如,除非整个playbook以root用户身份运行,否则尝试写入/etc等区域将失败)。
示例
- 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) }}"
返回值
键 |
描述 |
---|---|
密码 返回:成功 |