2017-09-05 14 views
-1

一個角色我有一個劇本安排如下(簡化了這一問題的緣故):如何使用從一個多文件劇本

├── deploy.yml 
├── hosts 
├── requirements.yml 
├── roles 
│   └── web 
│    ├── meta 
│    │   └── main.yml 
│    └── tasks 
│     └── main.yml 
└── site.retry 

我簡化deploy.yml是:

--- 
- name: Everything I need 
    hosts: somewhere 
    roles: 
    - web 

而我的簡化roles/web/tasks/main.yml

--- 
- name: Various things that work 
    become: yes 
    [whatever] 

- name: the thing that I have a problem with 
    become: yes 
    davidedelvento.nbextension: name=foo state=present 

這種失敗:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path. 

所以我試圖改變roles/web/tasks/main.yml

--- 
- name: Various things that work 
    become: yes 
    [whatever] 

- name: the thing that I have a problem with 
    become: yes 
    roles: 
    - { role: davidedelvento.nbextension, name: foo, state: present} 

從而未能以同樣的方式。我明白這個失敗(因爲我不能從一個任務中調用一個角色,而是我正在做的 - 但是錯誤可能會更加清晰......)

但是我不清楚我該如何完成我所做的,也就是說,不管在那個時候做什麼擴張工作。我可以將這個角色從roles/web/tasks/main.yml移動到roles/web/meta/main.yml,這是可行的,但它在Various things that work之前執行,我需要它在執行之後執行。如何做到這一點?

請注意,我寫了nbextension,但同樣的問題發生在類似的其他星系的角色。

編輯:也請注意,擴展是否正確安裝,可以如

--- 
- name: Example 
    hosts: all 
    become: yes 
    roles: 
    - { role: davidedelvento.nbextension, name: foo, state: present} 

但是我需要在上述用於大型項目,以「整合」從一個獨立的,單文件劇本使用在「網絡」的作用(我有我沒有表現出更多的角色)

EDIT2:請注意,用於此問題的星系ansible角色已重命名爲jupyterextension但正如我所說的問題(和解決方案)是同樣適用於任何角色

+1

你與角色混合行動模塊。我放棄了試圖弄清楚你有什麼和你想要什麼的觀點。這是兩件不同的事情。沒有名爲'davidedelvento.nbextension'的模塊,也沒有名爲'role'的模塊,所以Ansible在它的錯誤消息中是正確的。 – techraf

+0

如上所述,我不太清楚你想要達到什麼效果,但是你會混淆一些概念。我可以看到那個davidedelvento。nbextension是一個可以在星系中扮演角色的角色,所以我假設你已經安裝了它(ansible-galaxy install davidedelvento.nbextension)。那麼你應該可以使用符號'角色:davidedelvento.nbextension' –

+0

@techraf:我是新手,因此我可能會做得很錯,這就是爲什麼它不起作用,這就是爲什麼我問這裏的原因......我想要的非常簡單:我想要在完成各種事情之後安裝nbextension(使用我發佈在銀河系中的星系角色並鏈接)。那麼,我該如何做到這一點?由於nbextension是一個角色,我發佈的這個文件是一項任務,我不能從任務中調用角色,我認爲我應該做一些不同的事情,但是什麼? – Davide

回答

0

好的,所以我找到了兩種方法來處理這個問題。

  1. 將角色拆分爲兩個(或多個)部分,並將galaxy的角色用作需要預先考慮事項的依賴項。總的來說,我喜歡這個想法,但在我的特殊用例中,我不這樣做,因爲我需要創建3個角色來實現一個真正的角色。
  2. 使用include_role module,注意目前它被「標記爲預覽」,即它不保證有向後兼容的接口。但是它工作得很好我的當前設置:

- name: the thing that I have not a problem with anymore become: yes include_role: name: davidedelvento.nbextension with_items: - foo - bar loop_control: loop_var: name

相關問題