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