Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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中同时使用字典和列表 mydatabases: 第一组: db_名称:group1_数据库 第2组: db_名称:group2_数据库_Ansible - Fatal编程技术网

在Ansible中同时使用字典和列表 mydatabases: 第一组: db_名称:group1_数据库 第2组: db_名称:group2_数据库

在Ansible中同时使用字典和列表 mydatabases: 第一组: db_名称:group1_数据库 第2组: db_名称:group2_数据库,ansible,Ansible,例如,在这个不起作用的代码段中,您应该能够了解我正在尝试做什么,我想针对字典中的2个数据库group1\u数据库和group2\u数据库,安装多个postgresql扩展(从列表中) name:添加postgresql扩展 postgresql\u分机: 名称:“{{item}}” db:{{item.value.db_name}}” 使用_dict:“{{mydatabases}}” 循环: -时间刻度数据库 -帕特曼 我尝试过嵌套循环(我认为它无论如何都不会工作),但没有任何效果。我是否可

例如,在这个不起作用的代码段中,您应该能够了解我正在尝试做什么,我想针对字典中的2个数据库
group1\u数据库
group2\u数据库
,安装多个postgresql扩展(从列表中)

name:添加postgresql扩展
postgresql\u分机:
名称:“{{item}}”
db:{{item.value.db_name}}”
使用_dict:“{{mydatabases}}”
循环:
-时间刻度数据库
-帕特曼

我尝试过嵌套循环(我认为它无论如何都不会工作),但没有任何效果。我是否可以这样做来使用一个字典并同时列出或多个字典?

一种方法是使用一个字典将其翻译成一个列表,这正是您想要的

然后使用两个列表中的一个

赋予任务:

-postgresql\u ext:
名称:“{item.1}}”
db:“{item.0.value.db_name}”
循环:{(mydatabases | dict2items){产品(扩展)}”
变量:
扩展:
-时间刻度数据库
-帕特曼

下面是一个带有调试而不是Postgres任务的假示例:

-主机:所有
收集事实:不
任务:
-调试:
msg:“我需要在{{item.0.value.db_name}上安装{{{item.1}}”
循环:{(mydatabases | dict2items){产品(扩展)}”
变量:
我的数据库:
第一组:
db_名称:group1_数据库
第2组:
db_名称:group2_数据库
扩展:
-时间刻度数据库
-帕特曼
这将产生概述:

播放[全部]*********************************************************************
任务[调试]*******************************************************************
确定:[localhost]=>(项=[{'key':'group1','value':{'db_name':'group1_database'},'timescaledb'])=>
msg:我需要在group1\u数据库上安装timescaledb
ok:[localhost]=>(item=[{'key':'group1','value':{'db_name':'group1_database'}},'pg_partman'])=>
msg:我需要在group1\u数据库上安装pg\u partman
确定:[localhost]=>(item=[{'key':'group2','value':{'db_name':'group2_database'}},'timescaledb'])=>
msg:我需要在group2_数据库上安装timescaledb
ok:[localhost]=>(item=[{'key':'group2','value':{'db_name':'group2_database'}},'pg_partman'])=>
msg:我需要在group2\u数据库上安装pg\u partman
重演*********************************************************************
localhost:ok=1已更改=0无法访问=0失败=0跳过=0已获救=0已忽略=0

另一种方法是使用,以便从字典中获取键列表

然后再次使用过滤器

赋予任务:

-postgresql\u ext:
名称:“{item.1}}”
db:{{mydatabases[item.0].db_name}
循环:{{mydatabases.keys()|产品(扩展)}
变量:
扩展:
-时间刻度数据库
-帕特曼

下面是一个带有调试而不是Postgres任务的假示例:

-主机:所有
收集事实:不
任务:
-调试:
msg:“我需要在{{mydatabases[item.0].db_name}上安装{{{item.1}}”
循环:{{mydatabases.keys()|产品(扩展)}
变量:
我的数据库:
第一组:
db_名称:group1_数据库
第2组:
db_名称:group2_数据库
扩展:
-时间刻度数据库
-帕特曼
这将产生概述:

播放[全部]*********************************************************************
任务[调试]*******************************************************************
确定:[localhost]=>(项=['group1','timescaledb'])=>
msg:我需要在group1\u数据库上安装timescaledb
确定:[localhost]=>(项=['group1','pg\u partman'])=>
msg:我需要在group1\u数据库上安装pg\u partman
确定:[localhost]=>(项=['group2','timescaledb'])=>
msg:我需要在group2_数据库上安装timescaledb
确定:[localhost]=>(项=['group2','pg\u partman'])=>
msg:我需要在group2\u数据库上安装pg\u partman
重演*********************************************************************
localhost:ok=1已更改=0无法访问=0失败=0跳过=0已获救=0已忽略=0

您可以通过将
include_tasks
放在一个循环中,然后将内部循环放在包含的文件中来伪造嵌套循环。这在Ansible 2.9.18中不起作用,但在2.10+中对这两种方法都非常有效