2014-02-27 60 views
3

所以我試圖圍繞Ansible圍繞我的腦袋,並構建一個簡單的LEMP堆棧。我決定與nested playbook合作,因爲我想在學習的同時儘可能多地進行劃分。我遇到了這個問題,我需要傳遞一些變量,比如mysql的root密碼。現在我想知道是否有任何最佳做法將主要劇本的變奏曲傳遞給單獨的劇本,或者是否應該在各個子劇本中設置變奏曲?我使用this repo作爲我自己項目的基礎。我還想知道,如果在子Playbook中設置了默認值,主Playbook中設置的變量是否會覆蓋此值,那麼覆蓋如何與varible一起工作?Ansible將vars傳遞給嵌套的playbooks的最佳實踐?

回答

9

我想最佳實踐是,如果可能的話,重用現有的代碼。如果您還沒有聽說過,Ansible有Galaxy網站https://galaxy.ansible.com/,人們可以在這裏共享各種隨時可以使用的角色。一個這樣的角色是mysql(及其相關的github回購是在https://github.com/bennojoy/mysql

您不僅可以使用在你的劇本那個角色,但該網頁也有例子,說明如何將參數/變量傳遞給你的角色:

4)完全安裝/配置的MySQL服務器,主從複製。

- hosts: master 
    roles: 
    - {role: mysql, mysql_db: [{name: benz}, {name: benz2}], 
        mysql_users: [{name: ben3, pass: foobar, priv: "*.*:ALL"}, 
           {name: ben2, pass: foo}], 
        mysql_db_id: 8 } 

- hosts: slave 
    roles: 
    - {role: mysql, mysql_db: none, mysql_users: none, 
      mysql_repl_role: slave, mysql_repl_master: vm2, 
      mysql_db_id: 9, mysql_repl_user: [{name: repl, pass: foobar}] } 
+0

好的,awsome。現有的代碼=最佳實踐是有道理的。但我仍然想知道變量重寫是如何從主要劇本到副劇本的,你知道嗎?我無法找到關於此問題的任何信息。 – StenW

+0

@StenW我提供的例子就是你的手冊中的內容。在那個例子中,正在調用mysql的角色,並傳入不同的變量。 – Mxx

2

一個好的解決辦法是你必須具有可設置的變量的例子vars.yml.dist文件。這存在於你的倉庫中,開發人員只需在此基礎上創建一個vars.yml的本地副本。然後,簡單地將以下內容添加到您的手冊中: include: vars.yml 這允許您將變量傳遞給您的角色,嵌套或不嵌套。

相關問題