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



我正在通过从JSON文件中读取参数/var来动态地将参数/var传递给可解析角色。

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

- name: Ansible role | Create
include_role:
name: ansible-role-create-user
vars:
persons:
- name: "john"
phone:
- name: "home"
number: 9999
- name: "mobile"
number: "9898"
- name: Ansible role | Create
include_role:
name: ansible-role-create-user
vars:
persons:
- name: "Doe"
email: "johndoe@home.com"
city: "Skyland"

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

JSON,例如:呼叫1:

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

呼叫2:

{
"name": "Doe",
"email": "johndoe@home.com",
"city": "skyland"
}

如前所述,我想阅读示例JSON文件,并将它们作为params动态传递给角色。我尝试过将文件读取到寄存器并将var发送到角色的方法,但我面临的错误

我如何发送的样本

- 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 }}"

还有更多选项。例如,使用include_vars。角色和文件

shell> cat roles/ar_create_user/tasks/main.yml
- debug:
var: persons
shell> cat call1.yml 
persons:
- name: "john"
phone:
- name: "home"
number: 9999
- name: "mobile"
number: "9898"
shell> cat call2.yml 
persons:
- name: "Doe"
email: "johndoe@home.com"
city: "Skyland"

使用战术手册

shell> cat playbook.yml
- hosts: localhost
tasks:
- include_vars: call1.yml
- name: Ansible role | Create
include_role:
name: ar_create_user
- include_vars: call2.yml
- name: Ansible role | Create
include_role:
name: ar_create_user

给出(节略(

shell> ansible-playbook playbook.yml
ok: [localhost] => 
persons:
- name: john
phone:
- name: home
number: 9999
- name: mobile
number: '9898'
ok: [localhost] => 
persons:
- city: Skyland
email: johndoe@home.com
name: Doe

Q:"我需要从JSON中获取var(persons(">

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

shell> cat call1.yml
{"persons": [
{"name": "john",
"phone": [
{"name": "home",
"number": 9999},
{"name": "mobile",
"number": "9898"}]
}]
}
shell> cat call2.yml
{"persons": [
{"name": "Doe",
"email": "johndoe@home.com",
"city": "Skyland"}]
}

最新更新