背景
我正在尝试使用Ansible(1.9.4)角色,我正试图解决角色依赖性问题 .
我创建了以下角色:
-
安装Oracle JDK的角色(ansible-java8)
-
安装Tomcat的角色(ansible-tomcat7)
第二个角色将第一个角色定义为 /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
问题
-
这是定义依赖角色的正确方法还是我完全错过了什么?
-
我是否正确认为,因为我将tomcat7角色标记为依赖于java8,java8角色应该位于roles_path并首先运行?
-
我犯了什么错误导致java8角色在tomcat7角色之前没有运行?
1 回答
事实证明这是我测试角色的一个问题 .
我告诉Vagrant使用以下site.yml文件配置我的测试盒:
这显然导致Ansible只运行Tomcat任务而没有考虑到这实际上是一个角色而不仅仅是一个包含一些任务的剧本 .
我用于测试的site.yml playbook位于存储库的根目录中,所以一旦我将其更改为引用存储库作为角色,一切都开始工作 .