Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ansible迭代字典和列表_Ansible - Fatal编程技术网

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