variables - 将键的值放置在其他变量键值中 - Ansible
问题描述
我正在尝试一个简单的场景来管理用户及其各自的授权密钥值,其中一些用户可能具有相互共享的授权密钥,任何快速帮助避免可能发生在以下情况的重复:
文件:角色/manageuser/var/main.yml
---
users:
- username: user1
ssh_key: "someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user1@localhost"
- username: user2
ssh_key: |
someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user2@localhost
someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user1@localhost
在上面,我想避免在 user2 部分下重复或重复 user1 公钥,并通过一些过滤器或查询或查找 user1 将其放入,例如:
{{ query(users[?username=='user1'].ssh_key) }}
- 不工作
lookup('dict', ssh_key, users.username='user1')
- 也不起作用
任何人都可以指导我正确使用它吗?请注意,我正在尝试在 var/main.yml 中植入值,因此不确定这是否可行。
谢谢,
解决方案
这是不可能的。引用Can't reference a dict key inside the same dict #50280
“这是意料之中的,而不是我们计划改变的事情。你不能创建一个自引用变量。”
您可能希望将公钥放入文件并使用查找列表创建一个属性。例如
users:
- username: user1
ssh_keys:
- "{{ lookup('file', 'user1.localhost.pub') }}"
- username: user2
ssh_keys:
- "{{ lookup('file', 'user1.localhost.pub') }}"
- "{{ lookup('file', 'user2.localhost.pub') }}"
这里没有开销。无论如何,您必须引用用户的所有密钥。将列表转换为您需要的任何格式。
推荐阅读
- htmlunit - HtmlUnit javascript 事件
- java - 如何创建一个 ArrayList 来获取房间和 java 中的行列表(可能作为异步任务)?
- python - 如何正确导入 Weazyprint 错误显示列表索引超出范围
- python - 这个运算符在 Python 中的名称是什么?
- jquery - jQuery没有成功重置表单
- flutter - 如何在 Flutter 中正确放置一个红色椭圆?
- python - Python 输入与列表比较
- javascript - DOM 方法从节点获取正确的元素 - 仅使用 JavaScript
- python - 获取文件路径的最后 n 部分
- python - 如何使用经过训练的 CNN 对新图像进行分类?