2015-12-31 30 views
1

背景

我正在試驗Ansible(1.9.4)角色,我試圖獲取角色依賴關係的掛起。依賴的角色未運行

我已經創建了以下角色:

  1. ,它安裝了Oracle JDK(ansible-java8)角色
  2. 是安裝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-galaxy install -r requirements.yml 

一旦命令被跑我可以看到java8角色:使用以下命令ansible-java8作用java8在〜/ ansible/roles目錄中。

但是,當我運行一個調用tomcat7角色的playbook時,只會執行該角色。 java8角色在tomcat7角色之前未執行。

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角色之前不能運行?
+0

這對我很好,你可以確認你的ansible.cfg是否有這個?'[defaults] roles_path =〜/ ansible/roles' –

+1

此外,您的java8角色'meta/main.yml'缺少'依賴關係:[]'。這導致'ansible-galaxy'引發非嚴重錯誤。 –

回答

1

原來,這是我如何測試角色的問題。

我用以下site.yml文件告訴流浪到規定我的測試盒:

- hosts: all 
    sudo: yes 
    tasks: 
    - include: tasks/main.yml 

這顯然是造成Ansible只運行Tomcat的任務,並沒有考慮到,這實際上是一個角色而不僅僅是一個有一些任務的劇本。

我用於測試的site.yml手冊位於存儲庫的根目錄,所以一旦我將其更改爲引用存儲庫作爲角色,所有事情都開始奏效。

- hosts: all 
    sudo: yes 
    roles: 
    - { role: '../ansible-tomcat7' }