ansible迭代字典和列表
我有以下数据:ansible迭代字典和列表,ansible,Ansible,我有以下数据: vars: list_priv_keys: ['~/.ssh/id_rsa', '~/.ssh/id_ed25519'] dict_pub_keys: {'~/.ssh/id_rsa.pub': false, '~/.ssh/id_ed25519.pub': true} 只有当发布密钥不存在时,我才需要从私钥中检索公钥(dict\u pub\u keys.value==false) 到目前为止,我得到的是(这显然是一个错误的方向): 你们将如何解决这项任务?既然
vars:
list_priv_keys: ['~/.ssh/id_rsa', '~/.ssh/id_ed25519']
dict_pub_keys: {'~/.ssh/id_rsa.pub': false, '~/.ssh/id_ed25519.pub': true}
只有当发布密钥不存在时,我才需要从私钥中检索公钥(dict\u pub\u keys.value==false
)
到目前为止,我得到的是(这显然是一个错误的方向):
你们将如何解决这项任务?既然var是开放的,可以修改,我建议一个字典元素列表,每个元素包含3个属性:2个文件名和控制我们是否应该采取行动的真/假值:
vars:
dict_pub_keys: [{public_key: '~/.ssh/id_rsa.pub', priv_key: '~/.ssh/id_rsa', keyexists: false}, { public_key: '~/.ssh/id_ed25519.pub', priv_key: '~/.ssh/id_ed25519', keyexists: true}]
如果keyexists==false
将是(我已经对ssh-keygen命令进行了注释,并使用一个“墙”了我们将要运行的命令),那么这里有一个任务来循环这个列表并运行ssh-keygen命令:
希望能有帮助
更新:
关于变量结构:您有两个列表变量,其中包含关于同一对象(ssh密钥)的部分信息:第一个变量有私钥文件名,第二个变量有公钥文件名,以及它是否存在。我们可以将它们组合为一个字典变量,该变量包含:
{ public_key_filename: xxxx,
private_key_filename: yyyy,
file_exists: zzzz
}
字典变量基本上是一个对象,您可以为它定义键=值对
顺便说一下,变量声明也可以用这种替代语法(yml格式)编写,但plz需要注意缩进:
dict_pub_keys:
- public_key: '~/.ssh/id_rsa.pub'
priv_key: '~/.ssh/id_rsa'
keyexists: false
- public_key: '~/.ssh/id_ed25519.pub'
priv_key: '~/.ssh/id_ed25519'
keyexists: true
这些VAR的结构是否可以协商修改?此外,您使用的是表示字典变量的
{}
,但您可能引用的列表包含在[]
1中-是的,结构是可协商的。2-很好,这是一个输入错误,我会修正它。你可以提供一些选项,比如,创建不同的列表或字典,以实现这个目标。例如,创建仅包含要创建的公钥的列表。。等等。好的,添加一个看起来不错的答案,但是请包括从初始变量创建这个新的变量字典列表的过程。当然,请检查。dict变量看起来真的很好。我知道最初如何设置它们,但这些变量没有设置,它们是作为任务的结果创建的。因此,我需要一个或多个任务,以便将这些变量从现有变量转换为您建议的结构。这就是为什么我首先问这些变量是否可以重组的原因。顺便说一下,第一个列表变量(来自您的问题)不包含重要信息,我们只能使用您提供的第二个变量,dict\u pub\u key
{ public_key_filename: xxxx,
private_key_filename: yyyy,
file_exists: zzzz
}
dict_pub_keys:
- public_key: '~/.ssh/id_rsa.pub'
priv_key: '~/.ssh/id_rsa'
keyexists: false
- public_key: '~/.ssh/id_ed25519.pub'
priv_key: '~/.ssh/id_ed25519'
keyexists: true