如何从json文件动态填充ansible角色的参数?

如何从json文件动态填充ansible角色的参数?,json,ansible,jinja2,ansible-role,Json,Ansible,Jinja2,Ansible Role,我正在通过从JSON文件读取参数/变量来动态地将它们传递给ansible角色 考虑以下角色调用(带有可选参数,如电话、地址、电子邮件、城市) 上述代码是调用角色的两种变体。通过它的可选参数,我试图从JSON读取数据并将其提供给角色 JSON例如: 电话1: { "name": "John", "phone": { {"name": "home", number: &quo

我正在通过从JSON文件读取参数/变量来动态地将它们传递给ansible角色

考虑以下角色调用(带有可选参数,如电话、地址、电子邮件、城市)

上述代码是调用角色的两种变体。通过它的可选参数,我试图从JSON读取数据并将其提供给角色

JSON例如: 电话1:

{
  "name": "John",
  "phone": 
  {
    {"name": "home",   number: "9999"},
    {"name": "mobile",   number: "9898"}
  }  
}
电话2:

{
  "name": "Doe",
  "email": "johndoe@home.com",
  "city": "skyland"
}
如前所述,我希望阅读示例JSON文件,并将其作为参数动态传递给角色。我尝试了一种将文件读取到寄存器并将var发送到角色的方法,但我面临的错误是

{“msg”“'unicode对象'没有属性'name'”}

我如何发送它的示例

- name: cat json to file
  shell: cat jsonfile.json
  register: register_with_json
- name: Ansible role | Create
  include_role:
    name: ansible-role-create-user
  vars: "{{ register_with_json.stdout | from_json }}"

还有更多的选择。例如,使用
包含变量
。角色和文件

shell>cat角色/ar\u创建用户/tasks/main.yml
-调试:
变量:人
shell>cat call1.yml
人:
-姓名:“约翰”
电话:
-姓名:“家”
电话:9999
-名称:“手机”
编号:“9898”
外壳>cat call2.yml
人:
-名称:“能源部”
电子邮件:“johndoe@home.com"
城市:“天空之地”
用剧本

shell>cat playbook.yml
-主机:本地主机
任务:
-包含变量:call1.yml
-名称:Ansible角色|创建
包括以下角色:
名称:ar_创建_用户
-包括变量:call2.yml
-名称:Ansible角色|创建
包括以下角色:
名称:ar_创建_用户
给出(节略)

shell>ansible playbook playbook.yml
确定:[本地主机]=>
人:
-姓名:约翰
电话:
-姓名:home
电话:9999
-姓名:mobile
编号:9898
确定:[本地主机]=>
人:
-城市:天国
电邮:johndoe@home.com
姓名:Doe

问:“我需要从JSON获取var(persons)。”

答:下面的JSON文件给出了相同的结果

shell>cat call1.yml
{“人”:[
{“姓名”:“约翰”,
“电话”:[
{“name”:“home”,
“编号”:9999},
{“姓名”:“手机”,
“编号”:“9898”}]
}]
}
外壳>cat call2.yml
{“人”:[
{“名称”:“能源部”,
“电子邮件”:johndoe@home.com",
“城市”:“天空之地”}]
}

还有更多选项。例如,使用
包含变量
。角色和文件

shell>cat角色/ar\u创建用户/tasks/main.yml
-调试:
变量:人
shell>cat call1.yml
人:
-姓名:“约翰”
电话:
-姓名:“家”
电话:9999
-名称:“手机”
编号:“9898”
外壳>cat call2.yml
人:
-名称:“能源部”
电子邮件:“johndoe@home.com"
城市:“天空之地”
用剧本

shell>cat playbook.yml
-主机:本地主机
任务:
-包含变量:call1.yml
-名称:Ansible角色|创建
包括以下角色:
名称:ar_创建_用户
-包括变量:call2.yml
-名称:Ansible角色|创建
包括以下角色:
名称:ar_创建_用户
给出(节略)

shell>ansible playbook playbook.yml
确定:[本地主机]=>
人:
-姓名:约翰
电话:
-姓名:home
电话:9999
-姓名:mobile
编号:9898
确定:[本地主机]=>
人:
-城市:天国
电邮:johndoe@home.com
姓名:Doe

问:“我需要从JSON获取var(persons)。”

答:下面的JSON文件给出了相同的结果

shell>cat call1.yml
{“人”:[
{“姓名”:“约翰”,
“电话”:[
{“name”:“home”,
“编号”:9999},
{“姓名”:“手机”,
“编号”:“9898”}]
}]
}
外壳>cat call2.yml
{“人”:[
{“名称”:“能源部”,
“电子邮件”:johndoe@home.com",
“城市”:“天空之地”}]
}

如果我不清楚,很抱歉。但首先,我需要从JSON获取var(persons)。我目前正在做一个猫和存储,以登记。但是它抛出了上面提到的错误,所以我想尝试其他方法。我还尝试了使用set_fact进行查找,以获得var(persons)。我已经用正确的JSON格式更新了答案。谢谢,@Vladimir Botka,你的回答帮助我找到了一种阅读vars的方法。我在分析脚本中的一些转义字符时遇到问题,并且能够从一开始就找到签出内容时出现的错误。如果我不清楚,很抱歉。但首先,我需要从JSON获取var(persons)。我目前正在做一个猫和存储,以登记。但是它抛出了上面提到的错误,所以我想尝试其他方法。我还尝试了使用set_fact进行查找,以获得var(persons)。我已经用正确的JSON格式更新了答案。谢谢,@Vladimir Botka,你的回答帮助我找到了一种阅读vars的方法。我在分析脚本中的一些转义字符时遇到问题,并且能够从一开始就找到检查内容时出现的错误。在您的示例中,字典
persons
在YAML和JSON中的结构不同。您可能需要决定使用哪种结构并修复数据。调用1中的数据不是有效的JSON。在这里发布之前,您可能需要验证数据。在您的示例中,字典
persons
在YAML和JSON中的结构不同。您可能需要决定使用哪种结构并修复数据。调用1中的数据不是有效的JSON。您可能希望在此处发布之前验证数据。
- name: cat json to file
  shell: cat jsonfile.json
  register: register_with_json
- name: Ansible role | Create
  include_role:
    name: ansible-role-create-user
  vars: "{{ register_with_json.stdout | from_json }}"