Ansible - 多重角色
Ansible - multiple roles
我正在尝试使用 with_items
命令 运行 多个角色,但出现错误:
"ERROR! 'item' is undefined"
role.yml
:
---
- hosts: '{{ host }}'
become: yes
roles:
- role: "{{item}}"
with_items: "{{ roles }}"
这是我的命令:
ansible-playbook -i ./inventory/Dev ./playbooks/role.yml --extra-vars='{"host": "db", "roles": ["mysql", "apache"]}'
你不能这样做。 with_
循环对角色无效。
如果有的话,您需要向 roles:
指令提供角色列表,因此语法就像主机组列表 hosts: '{{ host }}'
一样。问题是:Ansible 不解析角色的变量,所以 roles: '{{ roles }}'
不起作用。
但是,您可以使用 include_role module,您可以在其中访问变量。
不,include_role 模块也不从 with_items
中获取 {{ item }}
作为 name
的值。
所以我能想到的唯一解决方法(假设您不想事先处理 JSON)是静态包含角色:
tasks:
- include_role:
name: "mysql"
when: "'mysql' in roles"
- include_role:
name: "apache"
when: "'apache' in roles"
角色无论如何都需要存在于控制机器上,所以他们的名字都是预定义的。
不能将 with_ 循环与 roles 指令一起使用。
一个简单的解决方案是使用如下所示的普通 yaml 列表:
---
- hosts: '{{ host }}'
become: yes
roles:
- myrole1
- myrole2
另一个示例,您可以在其中声明角色并将相应的变量传递给角色,如下所示:
---
- hosts: '{{ host }}'
become: yes
roles:
- role:
name: myrole1
vars:
host: "db1"
myroles:
- mysql1
- apache1
- role:
name: myrole2
vars:
host: "db2"
myroles:
- mysql2
- apache2
同时避免使用 ansible 关键字作为变量名
最后,您对 运行 您的剧本的命令如下:
ansible-playbook -i ./inventory/Dev ./playbooks/role.yml
我正在尝试使用 with_items
命令 运行 多个角色,但出现错误:
"ERROR! 'item' is undefined"
role.yml
:
---
- hosts: '{{ host }}'
become: yes
roles:
- role: "{{item}}"
with_items: "{{ roles }}"
这是我的命令:
ansible-playbook -i ./inventory/Dev ./playbooks/role.yml --extra-vars='{"host": "db", "roles": ["mysql", "apache"]}'
你不能这样做。 with_
循环对角色无效。
如果有的话,您需要向 roles:
指令提供角色列表,因此语法就像主机组列表 hosts: '{{ host }}'
一样。问题是:Ansible 不解析角色的变量,所以 roles: '{{ roles }}'
不起作用。
但是,您可以使用 include_role module,您可以在其中访问变量。
不,include_role 模块也不从 with_items
中获取 {{ item }}
作为 name
的值。
所以我能想到的唯一解决方法(假设您不想事先处理 JSON)是静态包含角色:
tasks:
- include_role:
name: "mysql"
when: "'mysql' in roles"
- include_role:
name: "apache"
when: "'apache' in roles"
角色无论如何都需要存在于控制机器上,所以他们的名字都是预定义的。
不能将 with_ 循环与 roles 指令一起使用。 一个简单的解决方案是使用如下所示的普通 yaml 列表:
---
- hosts: '{{ host }}'
become: yes
roles:
- myrole1
- myrole2
另一个示例,您可以在其中声明角色并将相应的变量传递给角色,如下所示:
---
- hosts: '{{ host }}'
become: yes
roles:
- role:
name: myrole1
vars:
host: "db1"
myroles:
- mysql1
- apache1
- role:
name: myrole2
vars:
host: "db2"
myroles:
- mysql2
- apache2
同时避免使用 ansible 关键字作为变量名 最后,您对 运行 您的剧本的命令如下:
ansible-playbook -i ./inventory/Dev ./playbooks/role.yml