我正在尝试执行以下操作:
有办法做到这一点吗?
例如:
roles_to_install:
- role_one
- role_two
- ...
---
- hosts: '{{ TARGET }}'
become: yes
...
roles:
- { role: "roles_to_install"}
显然这不起作用。
有没有办法让ansible-playbook -i <hosts_file> run_all_roles.yml -e "TARGET=hostname_one"
运行?
答案 0 :(得分:0)
这不是你应该如何接近你的角色和库存。
相反,如果您将主机放在相应组中的清单中,则可以使用该剧本的hosts
参数来驱动安装位置。
例如,我可能有一个典型的Web应用程序在NGINX上运行,带有一些特定于应用程序的东西(例如Python环境),但是也有一些可能提供静态内容的NGINX服务器,也可能是典型的数据库中。
我的广告资源可能如下所示:
[frontend-web-nodes]
web-1.example.org
web-2.example.org
[application-nodes]
app-1.example.org
app-2.example.org
[database-nodes]
database.example.org
现在,我可以为我的数据库角色创建一个playbook,安装一些数据库并配置和设置hosts: database-nodes
以确保播放(因此它运行的角色只针对{{} 1}}框。
这样的事情:
database.example.org
对于我的前端和应用程序Web节点,我对安装和配置NGINX有共同依赖,但我的应用程序服务器还需要其他一些东西。所以我的前端Web节点可以配置一个简单的播放,如下所示:
- name: database
hosts: database-nodes
roles:
- database
对于我的应用程序节点,我可能会有这样的东西:
- name: frontend-web
hosts: frontend-web-nodes
roles:
- nginx
或者我可以这样做:
- name: application
hosts: application-nodes
roles:
- nginx
- application
在- name: application
hosts: application-nodes
roles:
- application
中,在nginx角色上定义dependency:
roles/application/meta/main.yml
答案 1 :(得分:0)
正如我评论的那样,解决方案比预期的要容易:
---
- hosts: '{{ TARGET }}'
become: yes
vars_files:
- ./vars/main.yml
roles:
- { role: "roleA", when: "'roleA' in roles_to_install" }
- { role: "roleB", when: "'roleB' in roles_to_install" }
...
假设在host_vars / $ fqdn / main.yml中定义了一个正确的roles_to_install var,如下所示:
---
roles_to_install:
- roleA
- roleB
- ...
谢谢你的协助人
答案 2 :(得分:0)
这个怎么样:
playfile.yml:
- hosts: all
tasks:
- when: host_roles is defined
include_role:
name: "{{ role_item }}"
loop: "{{ host_roles }}"
loop_control:
loop_var: role_item
hostvars_file.yml:
host_roles:
- name: myrole1
myrole1_var1: "myrole1_value1"
myrole1_var2: "myrole1_value2"
- name: myrole2
myrole2_var1: "myrole2_value1"
myrole2_var2: "myrole2_value2"
但是您的 hostvar_roles 将在任务执行期间运行,通常角色将在任务之前执行。
或者为什么没有这个角色:
roles/ansible.hostroles/tasks/main.yml:
---
# tasks file for ansible.hostroles
- when: host_roles is defined
include_role:
name: "{{ role_item }}"
loop: "{{ host_roles }}"
loop_control:
loop_var: role_item
playfile.yml:
- hosts: all
roles:
- ansible.hostroles