首页 > 解决方案 > 将键的值放置在其他变量键值中 - 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 中植入值,因此不确定这是否可行。

谢谢,

标签: variablesansibleyamljinja2

解决方案


这是不可能的。引用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') }}"

这里没有开销。无论如何,您必须引用用户的所有密钥。将列表转换为您需要的任何格式。


推荐阅读