我有一組角色都是唯一的,並使用通過依賴關係引入的通用角色來執行一組所有這些其他角色都需要完成的相同操作。我需要能夠傳入一個特定的角色參數來說,在這種情況下,從註冊表中拖出一個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中的東西,這意味着我的劇本不會在此設置中的每次迭代都會更改?
您是否知道以下聲明:[「期望的行爲是var將具有加載的最後一個組的值」](https:// github。COM/ansible/ansible /問題/ 6538#issuecomment-37885348)?你需要重新思考你的劇本,或者等待一些能夠掌握你的目標的酷派主義者。 – techraf
這就是爲什麼我問。我如何重構劇本來完成這樣的事情,或者甚至有可能將某種參數傳遞給擔任角色的劇本? – IguyKing