我正在尝试使用Ansible(1.9.4)角色,而我正试图解决角色依赖性问题。
我创建了以下角色:
第二个角色将第一个角色定义为/ansible-tomcat7/meta/main.yml
中的依赖项:
dependencies:
- { role: java8 }
我还包含了一个带有以下内容的requirements.yml文件:
- name: java8
src: 'https://github.com/gregwhitaker/ansible-java8'
我已将以下配置添加到/etc/ansible/ansible.cfg
,以将我的roles_path配置到我的主目录中的某个位置:
roles_path = ~/ansible/roles
然后,我使用以下命令将ansible-java8
角色安装为java8
:
ansible-galaxy install -r requirements.yml
命令运行后,我可以在〜/ ansible / roles目录中看到java8角色。
但是,当我运行一个调用tomcat7角色的playbook时,只执行该角色。在tomcat7角色之前不执行java8角色。
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [default]
TASK: [Install Tomcat7 (Ubuntu)] **********************************************
changed: [default] => (item=tomcat7,libtcnative-1,libapr1)
TASK: [Install Tomcat7 (Debian)] **********************************************
skipping: [default]
TASK: [Install Tomcat7 (Amazon Linux)] ****************************************
skipping: [default]
PLAY RECAP ********************************************************************
default
答案 0 :(得分:1)
这对我测试角色的方式来说是一个问题。
我告诉Vagrant使用以下site.yml文件配置我的测试盒:
- hosts: all
sudo: yes
tasks:
- include: tasks/main.yml
这显然导致Ansible只运行Tomcat任务而没有考虑到这实际上是一个角色,而不仅仅是一个包含某些任务的剧本。
我用于测试的site.yml playbook位于存储库的根目录中,所以一旦我将其更改为引用存储库作为角色,一切都开始工作。
- hosts: all
sudo: yes
roles:
- { role: '../ansible-tomcat7' }