2017-04-07 58 views
0

我有一組角色都是唯一的,並使用通過依賴關係引入的通用角色來執行一組所有這些其他角色都需要完成的相同操作。我需要能夠傳入一個特定的角色參數來說,在這種情況下,從註冊表中拖出一個docker鏡像,在另一種情況下,保存鏡像並執行其他操作。變量會導致問題,因爲它們對於主機是明確的,我可能每個主機都有幾個角色。我怎樣才能構建我的直覺劇本來做到這一點?如何從庫存文件中將參數傳遞給Ansible中的角色?

例子: 我有被拉入其他角色作爲依賴一個共同的角色:

--- 

- name: Included Playbook - What vars do I see 
    debug: 
     msg: "Name Pull: {{ imagename }}" 

- name: Local Running 
    debug: 
     msg: "Local option selected" 
    when: localimage == "true" 

- name: Not local 
    debug: 
     msg: "Not Local remote" 
    when: localimage == "false" 

然後主要角色任務\ main.yml

--- 

- name: Included Playbook - What vars do I see from Primary 
    vars: 
     myname: "{{ imagemainname }}" 
    debug: 
     msg: "Name-primary: {{ myname }}" 

和它的元\主.yml

--- 

dependencies: 
    - { role: image-pull, imagename: "{{ imagemainname }}" } 

這對於第二個角色 ---

- name: Included Playbook - What vars do I see from Second 
    vars: 
     myname: "{{ secondname }}" 
    debug: 
     msg: "Name-second: {{ myname }}" 

和它的元\ main.yml

--- 

dependencies: 
    - { role: image-pull, imagename: "{{ secondname }}" } 

我的主要劇本要求小學和第二角色和作用的具體瓦爾正常工作。

--- 

- name: Master 
    hosts: imagemaster 
    remote_user: root 
    vars: 
     imagemainname: "Top Dog" 
    roles: 
     - image-master 

- name: Second 
    hosts: second 
    remote_user: root 
    vars: 
     imagemainname: "Second Dog" 
    roles: 
     - second 

什麼不起作用是當我想在「拉」角色中聲明do選項a或b時。

如果我的庫存文件看起來像這樣:

[imagemaster] 
127.0.0.1 

[imagemaster:vars] 
localimage=false 

[second] 
127.0.0.1 

[second:vars] 
localimage=true 

它不會因爲不管是localimage的最後一項工作是所有角色將使用什麼。

我可以做些什麼來傳遞庫存/ host_vars/etc中的東西,這意味着我的劇本不會在此設置中的每次迭代都會更改?

+0

您是否知道以下聲明:[「期望的行爲是var將具有加載的最後一個組的值」](https:// github。COM/ansible/ansible /問題/ 6538#issuecomment-37885348)?你需要重新思考你的劇本,或者等待一些能夠掌握你的目標的酷派主義者。 – techraf

+0

這就是爲什麼我問。我如何重構劇本來完成這樣的事情,或者甚至有可能將某種參數傳遞給擔任角色的劇本? – IguyKing

回答

0

如果打算申請原發性和繼發性的作用在同一主機(如您的示例(127.0.0.1),那麼你就沒有選擇:

在任何一個部分,重新​​定義VAR將覆蓋。以前的實例如果有多個組具有相同的變量,最後一個加載贏,如果你在劇中的瓦爾定義兩次變量:節,第二屆一個勝

(從docs

。如果你打算它們應用到不同的主機,則測試是適當地,例如:

[imagemaster] 
127.0.0.1 

[imagemaster:vars] 
localimage=false 

[second] 
127.0.1.1 

[second:vars] 
localimage=true 

在這種情況下,當作用(初級/次級)被施加到imagemaster組,然後localimage=false;適用於second組 - localimage=true

相關問題