带有ansible的动态变量名称
Dynamic variable names with ansible
我在 Hashicorp Vault 中有一堆 key=value 形式的 ssh 密钥,我已经设置了 Ansible 以便能够解决。
我正在尝试使用我存储的密钥设置一些新用户,但失败了。基本信息(用户名、组等)在我创建的字典列表中,名为 linux_users。
以下是我获取全部秘密的方法:
- name: set the required secret as fact
set_fact:
secret: "{{ lookup('hashi_vault', 'secret=/secret/data/Exploit/PAM url={{ vault_url }} token={{ vault_token.token.auth.client_token }}') }}"
no_log: true
delegate_to: localhost
然后我使用 vars 查找来尝试获取我想要的 ssh 密钥:
- debug:
msg: "{{ lookup('vars', 'secret.data.' + item.name) }}"
loop: "{{ linux_users }}"
结果是 Ansible 告诉我变量不存在:
fatal: [localhost]: FAILED! => {}
MSG:
The task includes an option with an undefined variable. The error was: No variable found with this name: secret.data.pamlogon
The error appears to be in '/home/ansible/test/pamuser.yml': line 19, column 5, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- debug:
^ here
然而,如果我按名称调试 var,我会得到正确的答案:
ok: [localhost] => {
"secret.data.pamlogon": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA...[abridged for security purposes]"
}
变量刚刚命名secret
; secret.data.pamlogon
是在 Jinja 中访问该变量字段的另一种方式,并且(大部分)等同于 secret['data']['pamlogon']
。您根本不需要 vars
查找,因为您使用的是单个静态变量名称。只需使用正常的访问器语法:
msg: "{{ secret.data[item.name] }}"
或
msg: "{{ secret['data'][item.name] }}"
我在 Hashicorp Vault 中有一堆 key=value 形式的 ssh 密钥,我已经设置了 Ansible 以便能够解决。
我正在尝试使用我存储的密钥设置一些新用户,但失败了。基本信息(用户名、组等)在我创建的字典列表中,名为 linux_users。
以下是我获取全部秘密的方法:
- name: set the required secret as fact
set_fact:
secret: "{{ lookup('hashi_vault', 'secret=/secret/data/Exploit/PAM url={{ vault_url }} token={{ vault_token.token.auth.client_token }}') }}"
no_log: true
delegate_to: localhost
然后我使用 vars 查找来尝试获取我想要的 ssh 密钥:
- debug:
msg: "{{ lookup('vars', 'secret.data.' + item.name) }}"
loop: "{{ linux_users }}"
结果是 Ansible 告诉我变量不存在:
fatal: [localhost]: FAILED! => {}
MSG:
The task includes an option with an undefined variable. The error was: No variable found with this name: secret.data.pamlogon
The error appears to be in '/home/ansible/test/pamuser.yml': line 19, column 5, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- debug:
^ here
然而,如果我按名称调试 var,我会得到正确的答案:
ok: [localhost] => {
"secret.data.pamlogon": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA...[abridged for security purposes]"
}
变量刚刚命名secret
; secret.data.pamlogon
是在 Jinja 中访问该变量字段的另一种方式,并且(大部分)等同于 secret['data']['pamlogon']
。您根本不需要 vars
查找,因为您使用的是单个静态变量名称。只需使用正常的访问器语法:
msg: "{{ secret.data[item.name] }}"
或
msg: "{{ secret['data'][item.name] }}"