循环Ansible中的字典列表,而不知道键名

循环Ansible中的字典列表,而不知道键名,ansible,ansible-2.x,Ansible,Ansible 2.x,我一直在寻找解决方案,到目前为止似乎没有一个有效 我将任务输出注册为: “操作列表.启动工件”:[ { “account-troubletree-v1-1-0-18-21001”:"docker run-d-p 21001:8080-v/apps/projects/logs/account-troubletree-v1-0-18-21001:/logs-v/apps/projects/logs/account-troubletree-v1-1-0-18-21001/.configmap:/tib

我一直在寻找解决方案,到目前为止似乎没有一个有效

我将任务输出注册为:

“操作列表.启动工件”:[
{
“account-troubletree-v1-1-0-18-21001”:"docker run-d-p 21001:8080-v/apps/projects/logs/account-troubletree-v1-0-18-21001:/logs-v/apps/projects/logs/account-troubletree-v1-1-0-18-21001/.configmap:/tibco/config-v/apps/gwportal/appdynamics/://gwportal/appdynamics/-env-file/apps/projects/logs/account-troubletree-v1-0-18-21001/config.env---name accounter-troubletree8-21001 account-troubletree-v1:1.0.18“
},
{
“account-troubletree-v1-1-0-17-21002”:docker run-d-p 21002:8080-v/apps/projects/logs/account-troubletree-v1-0-17-21002:/logs-v/apps/projects/logs/account-troubletree-v1-0-17-21002/.configmap:/tibco/config-v/apps/gwportal/appdynamics/:/-env文件/apps/projects/logs/account-troubletree-v1-1-17-21002/config.env--名称account-tree-v1-1-0-17-21002account-tree-v1:1.0.17“
}
]
我正在尝试使用下面的任务获取密钥名称,但失败了

-调试:
msg:“{item.key}}”
循环:“{action\u list.start\u artifacts}”

您可以使用以下方法循环字典变量:当然,变量是静态的

  • default.yaml
    具有变量
action\u list.start\u工件:
-账号-troubletree-v1-1-0-18-21001:“docker run-d-p 21001:8080-v/apps/projects/logs/account-troubletree-v1-0-18-21001:/logs-v/apps/projects/logs/account-troubletree-v1-1-0-18-21001/.configmap:/tibco/config-v/apps/gwportal/appdynamics/---env-file/apps/projects/logs/account-troubletree-v1-0-18-21001/config.env--nameaccount-troubletree-v1-1-0-18-21001 account-troubletree-v1:1.0.18“
账户-troubletree-v1-1-0-17-21002:“docker run-d-p 21002:8080-v/apps/projects/logs/account-troubletree-v1-0-17-21002:/logs-v/apps/projects/logs/account-troubletree-v1-0-17-21002/.configmap:/tibco/config-v/apps/gwportal/appdynamics/:/-env文件/apps/projects/logs/account-troubletree-v1-1-17-21002/config.env--名称account-tree-v1-1-0-17-21002account-tree-v1:1.0.17“
  • 任务来使用变量
-调试:
msg:“{item.account-troubletree-v1-1-0-18-21001}”
带_项:“{{action_list.start_artifacts}”
然而,如果它们是动态的,那么我们就可以采用如下解决方案
下面的任务完成了任务

-调试:
msg:{{item.keys()| first}}
循环:“{action\u list.start\u artifacts}”

下一个选择是

-调试:
msg:{(条目| dict2items.0.key}}”
循环:“{action\u list.start\u artifacts}”

字典变量是动态的吗?我的意思是变量(
account-troubletree-v1-1-0-18-21001
account-troubletree-v1-1-0-17-21002
)总是有相同的值?是的,它们是动态的,它们的值可以改变啊,好吧,那么为什么不使用正则表达式搜索输出并使用正则表达式搜索设置事实-感谢Vladimir,你总是ansible问题的救世主。如果我提到“{item[0]。key}”,你能解释为什么ansible无法获得密钥吗“这是一个错误的问题。为什么你认为
key
方法应该可用?嗯,没关系,我想既然循环项在这里是一个字典,我们可以简单地得到字典的键,但是这个.key属性。没有
key
属性。可以通过
项| dict2items
创建一个。我添加了一个示例。@VenuS是字典上的Python函数。你不能只是去把它变成一个单数,然后期待它工作。