字典键中的Ansible变量

字典键中的Ansible变量,ansible,Ansible,我正在尝试执行playbook以设置Dell服务器,我在模块idrac\u redfish\u config中遇到一些字典问题。我需要为特定用户启用SOL,但为此,我希望使用带变量的字典中的键,因为不同服务器的用户ID可能不同。 如何在此处将send变量设置为dictionary键: -名称:商店id测试用户 设定事实: ID:{result.redfish\u facts.user.entries{124; json\u查询(\“[?用户名=='test-user'].ID\”)}” -名称:

我正在尝试执行playbook以设置Dell服务器,我在模块idrac\u redfish\u config中遇到一些字典问题。我需要为特定用户启用SOL,但为此,我希望使用带变量的字典中的键,因为不同服务器的用户ID可能不同。
如何在此处将send变量设置为dictionary键:

-名称:商店id测试用户
设定事实:
ID:{result.redfish\u facts.user.entries{124; json\u查询(\“[?用户名=='test-user'].ID\”)}”
-名称:为测试用户启用SOL
community.general.idrac\u redfish\u配置:
类别:经理
命令:SetManagerAttributes
资源\u id:iDRAC.Embedded.1
管理者属性:
用户{{ID[0]}.SolEnable:“已启用”{
“更改”:错误,
“调用”:{
“模块参数”:{
“baseuri”:“testhost”,
“类别”:“经理”,
“命令”:[
“SetManagerAttributes”
],
“管理者属性名称”:空,
“管理器属性值”:空,
“管理者属性”:{
“用户{{ID[0]}}.IpmiLanPrivilege:“管理员”,
用户{{ID[0]}.SolEnable:“已启用”
},
“密码”:“没有日志参数中指定的值”,
“资源id”:“iDRAC.Embedded.1”,
“超时”:10,
“用户名”:“管理员”
}
},
“msg”:“SetManagerAttributes:Manager属性用户。{{ID[0]}}。未找到SolEnable”
}
如果我这样做:

manager\u属性:{
'Users.{ID[0]}.SolEnable':已启用
'Users.{ID[0]}.IpmiLanPrivilege':管理员
}"
我得到:

fatal:[localhost]:失败!=>{
“更改”:错误,
“调用”:{
“模块参数”:{
“baseuri”:“testhost”,
“类别”:“经理”,
“命令”:[
“SetManagerAttributes”
],
“管理器属性”:“{Users.8.SolEnable”:启用的“Users.8.IpmiLanPrivilege”:管理员}”,
“密码”:“没有日志参数中指定的值”,
“资源id”:“iDRAC.Embedded.1”,
“超时”:10,
“用户名”:“管理员”
}
},
“msg”:“参数管理器_属性的类型为,无法转换为dict:无法将字符串作为字典计算”
}

我在Ansible中找不到如何正确执行此操作。

根据文档,应该是要在设备上设置的键/值对。键的名称中有点,您不能像上面尝试的那样“静态”创建动态键名称(即
“prefix{{dynamic_value}}}后缀):“某些内容”
不能像您自己所经历的那样工作,因为键名称没有经过jinja2模板化)

下面是一个解决方案。这并不是唯一的一个,但这是我第一次想到的,我可以很快为你树立一个榜样。在本例中,我创建了一个
{key:X,value:Y}
dict列表,将您的动态名称作为键,并使用将其转换回dict本身

我没有网络设备来处理这个问题,因此我无法验证模块是否接受最终结果。我的示例只是使用带有输入数据的调试来演示和输出模块期望的字典。如果键名错误,您必须调整它们的确切名称,但至少您应该能够继续前进

-名称:动态dict
主机:本地主机
收集事实:错误
变量:
身份证件:
- "8"
我的个人属性:
-键:“用户{{ID[0]}}.IpmiLandPrivilege”
值:管理员
-键:“用户{{ID[0]}}.SolEnable”
值:已启用
任务:
-名称:构造动态dict并调试
变量:
manager_属性:{{my_属性| items2dict}}”
调试:
var:manager\u属性
其中:

PLAY [Dynamic dict demo] ***************************************************************************************************************************************************************************************************************

TASK [construct a dynamic dict and debug] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
    "manager_attributes": {
        "Users.8.IpmiLandPrivilege": "Administrator",
        "Users.8.SolEnable": "Enabled"
    }
}

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

编辑:实现相同目标的附加示例(在许多其他示例中)。输出与上述完全相同:

-名称:动态dict
主机:本地主机
收集事实:错误
变量:
身份证件:
- "8"
管理器属性:“{{
{
“用户”。+ID[0]+'.IpmiLandPrivilege':“管理员”,
“用户”。+ID[0]+'.SolEnable':“已启用”
}
}}"
任务:
-名称:构造动态dict并调试
调试:
var:manager\u属性

谢谢!它起作用了。我用了你的另一个例子。