从属角色未运行

时间:2015-12-31 01:07:57

标签: ansible ansible-role

背景

我正在尝试使用Ansible(1.9.4)角色,而我正试图解决角色依赖性问题。

我创建了以下角色:

  1. 安装Oracle JDK(ansible-java8)
  2. 的角色
  3. 安装Tomcat(ansible-tomcat7)
  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
    

    问题

    1. 这是定义依赖角色的正确方法还是我完全错过了什么?
    2. 我是否正确认为,因为我将tomcat7角色标记为依赖于java8,java8角色应该位于roles_path并首先运行?
    3. 我犯了什么错误导致java8角色在tomcat7角色之前没有运行?

1 个答案:

答案 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' }