Ansible Playbook Roles 和 Include 聲明-手稿

Edit

Ansible Playbook Roles 和 Include 聲明

1. Introduction

工作中我們有可能會寫一個很長的playbook,最后發現playbook中很多功能是可以復用。

客觀來講,include允許我們把playbook寫成很多小文件,然后通過一定的策略include組織在一起,提高利用性。task可以使用include, handlers同樣也屬于task,所以handlers也可以使用include

playbook同樣也可以被include.當你有這方面的考慮時,你已經不再止步于普通應用者,如何更好的使和組織架構是你更高的追求。這期間我們要有封裝的思想,所謂的封裝,你可以簡單的理解為”我們會開汽車但必需要發動機如何工作“

roles的概念在Ansible中比較抽象,不太形象有比喻可以理解為 class 類。roles具備include的功能,將比較長的playbook功能分拆通過include的將增加代碼復用性。roles站在更高一層看問題,其基于 include, playbook之上把整合的更為干凈,復用性更高。

我們首先要理解 roles, 因為 roles 功能是如此強大,以至于我們在用到playbook功能后,一定會使用到roles功能。

2. Task Include Files And Encouraging Reuse

include可以上我們有效提高代碼復用性,請參考如下案例。

tasks/foo.yml

---
# possibly saved as tasks/foo.yml

- name: placeholder foo
 command: /bin/foo

- name: placeholder bar
 command: /bin/bar

如果我們希望在task中引用,如下方式可實現:

tasks:

 - include: tasks/foo.yml

Include支持變量引用,我們稱之為parameterized include。舉個例子,如果分發多個 wordpress 實例,我可以將 wordpress 任務排版到一個 wordprss.yml 文件,通過變量傳參實現。

tasks:
 - include: wordpress.yml wp_user=timmy
 - include: wordpress.yml wp_user=alice
 - include: wordpress.yml wp_user=bob

從1.0版本開始,ansible 同樣也支持如下格式的傳參:

tasks:

 - include: wordpress.yml
   vars:
       wp_user: timmy
       ssh_keys:
         - keys/one.txt
         - keys/two.txt

變量的引用方式如下:

{{ wp_user }}

如前面所介紹includes同時適用于 handlers。比如,我們定義了如何重啟 apache, 但希望所有 playbook 執行前只執行一次,那么我們可以使用如下的方式進行,定義 handlers.yml:

---
# this might be in a file like handlers/handlers.yml
- name: restart apache
 service: name=apache state=restarted

然后在playbook中引用

handlers:
 - include: handlers/handlers.yml

include 也支持從一個playbook 導入到另外一個 playbook,同時支持層級定義。如下例:

- name: this is a play at the top level of a file
 hosts: all
 remote_user: root

 tasks:

 - name: say hi
   tags: foo
   shell: echo "hi..."

- include: load_balancers.yml
- include: webservers.yml
- include: dbservers.yml

這里需要留意的是,include時變量不隨之生效

3. Roles

組織playbook的最好辦法是什么? 使用 roles!。 roles 可以有效的把 vars_files, tasks, handlers組織起來,按角色分組可以非常容易的和其它用戶分享。rles 只是自動化 include 如上的這些指令,其本身并沒有魔法效果,不管如此,這是一項大工程。因為我們要合理的規劃其目錄結構。

site.yml
webservers.yml
fooservers.yml
roles/
  common/
    files/
    templates/
    tasks/
    handlers/
    vars/
    defaults/
    meta/
  webservers/
    files/
    templates/
    tasks/
    handlers/
    vars/
    defaults/
    meta/

寫到playbook中,它長成這個樣子:

---
- hosts: webservers
 roles:
    - common
    - webservers

其中每項均有其功能介紹:

  • roles/x/tasks/main.yml
    主函數,包括在其中的所有任務將被執行

  • roles/x/handlers/main.yml
    所有包括中其中的 handlers 將被執行

  • roles/x/vars/main.yml
    所有包括在其中的變量將在roles中生效

  • roles/x/meta/main.yml
    roles所有依賴將被正常登入

  • roles/x/{files,templates,tasks}/ (dir depends on task)
    所有文件,模板都將可存放在這里,放在這里最大的好處是不用指定絕對路徑

---

- hosts: webservers
 roles:
   - common
   - { role: foo_app_instance, dir: '/opt/a',  app_port: 5000 }
   - { role: foo_app_instance, dir: '/opt/b',  app_port: 5001 }

也可以加入一定的條件:

---

- hosts: webservers
 roles:
   - { role: some_role, when: "ansible_os_family == 'RedHat'" }

同時,我們有可能希望為我們的角色分配 tags, tags的功能是我使用 ansible 下來體驗最為深刻的功能,沒有之一,實在是太靈活方便了。在考慮組織嚴密的同時,又不忘其靈活性。

---

- hosts: webservers
 roles:
   - { role: foo, tags: ["bar", "baz"] }

雖說tags 是好東西,但如果你發現你制訂的roles中具有很多tags而且經常性的會被使用,則要考慮下再次切分roles為多個roles.

同時,在一個playbook中我們可以定義多層級的任務。如下案例:

---

- hosts: webservers

 pre_tasks:
   - shell: echo 'hello'

 roles:
   - { role: some_role }

 tasks:
   - shell: echo 'still busy'

 post_tasks:
   - shell: echo 'goodbye'

4. Role Default Variables

defaults/main.yml 定義最低優化級的 roles 變量,我們可以通過很多其它方式定義的變量,均會覆蓋這里的變量值

5. Role Dependencies

meta/mainl.yml默認定義role的依賴,

---
dependencies:
 - { role: common, some_parameter: 3 }
 - { role: apache, appache_port: 80 }
 - { role: postgres, dbname: blarg, other_parameter: 12 }

Role 依賴也可以是全路徑,如:

---
dependencies:
  - { role: '/path/to/common/roles/foo', x: 1 }

Roles dependencies 總是在roles最開始的時候執行,而且默認只執行一次,即使其它其它roles重復引用。
通過設置 meta/main.yml 中 allow_duplicates: yes 可以多次執行。如下例:

---
dependencies:
- { role: wheel, n: 1 }
- { role: wheel, n: 2 }
- { role: wheel, n: 3 }
- { role: wheel, n: 4 }
---
allow_duplicates: yes
dependencies:
- { role: tire }
- { role: brake }

6. Embedding Modules In Roles

這個高級話題和大部分用戶無關,這里暫不做介紹

7. Ansible Galaxy

@%28%u6280%u672F%u6587%u6863%u5B66%u4E60%29%5B%u6280%u672F%7Cansible%5D%0A%0A%0AAnsible%20Playbook%20Roles%20%u548C%20Include%20%u58F0%u660E%0A%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%5BTOC%5D%0A%0A%0A%23%23%201.%20Introduction%0A%u5DE5%u4F5C%u4E2D%u6211%u4EEC%u6709%u53EF%u80FD%u4F1A%u5199%u4E00%u4E2A%u5F88%u957F%u7684playbook%uFF0C%u6700%u540E%u53D1%u73B0playbook%u4E2D%u5F88%u591A%u529F%u80FD%u662F%u53EF%u4EE5%u590D%u7528%u3002%0A%0A%u5BA2%u89C2%u6765%u8BB2%uFF0C%60include%60%u5141%u8BB8%u6211%u4EEC%u628Aplaybook%u5199%u6210%u5F88%u591A%u5C0F%u6587%u4EF6%uFF0C%u7136%u540E%u901A%u8FC7%u4E00%u5B9A%u7684%u7B56%u7565include%u7EC4%u7EC7%u5728%u4E00%u8D77%uFF0C%u63D0%u9AD8%u5229%u7528%u6027%u3002%60task%60%u53EF%u4EE5%u4F7F%u7528%60include%60%2C%20%60handlers%60%u540C%u6837%u4E5F%u5C5E%u4E8E%60task%60%uFF0C%u6240%u4EE5%60handlers%60%u4E5F%u53EF%u4EE5%u4F7F%u7528%60include%60%0A%0Aplaybook%u540C%u6837%u4E5F%u53EF%u4EE5%u88AB%60include%60.%u5F53%u4F60%u6709%u8FD9%u65B9%u9762%u7684%u8003%u8651%u65F6%uFF0C%u4F60%u5DF2%u7ECF%u4E0D%u518D%u6B62%u6B65%u4E8E%u666E%u901A%u5E94%u7528%u8005%uFF0C%u5982%u4F55%u66F4%u597D%u7684%u4F7F%u548C%u7EC4%u7EC7%u67B6%u6784%u662F%u4F60%u66F4%u9AD8%u7684%u8FFD%u6C42%u3002%u8FD9%u671F%u95F4%u6211%u4EEC%u8981%u6709%60%u5C01%u88C5%60%u7684%u601D%u60F3%uFF0C%u6240%u8C13%u7684%60%u5C01%u88C5%60%uFF0C%u4F60%u53EF%u4EE5%u7B80%u5355%u7684%u7406%u89E3%u4E3A%u201D%u6211%u4EEC%u4F1A%u5F00%u6C7D%u8F66%u4F46%u5FC5%u9700%u8981%u53D1%u52A8%u673A%u5982%u4F55%u5DE5%u4F5C%u201C%0A%0A%60roles%60%u7684%u6982%u5FF5%u5728Ansible%u4E2D%u6BD4%u8F83%u62BD%u8C61%uFF0C%u4E0D%u592A%u5F62%u8C61%u6709%u6BD4%u55BB%u53EF%u4EE5%u7406%u89E3%u4E3A%20%60class%60%20%u7C7B%u3002%60roles%60%u5177%u5907%60include%60%u7684%u529F%u80FD%uFF0C%u5C06%u6BD4%u8F83%u957F%u7684playbook%u529F%u80FD%u5206%u62C6%u901A%u8FC7include%u7684%u5C06%u589E%u52A0%u4EE3%u7801%u590D%u7528%u6027%u3002%60roles%60%u7AD9%u5728%u66F4%u9AD8%u4E00%u5C42%u770B%u95EE%u9898%uFF0C%u5176%u57FA%u4E8E%20%60include%60%2C%20%60playbook%60%u4E4B%u4E0A%u628A%u6574%u5408%u7684%u66F4%u4E3A%u5E72%u51C0%uFF0C%u590D%u7528%u6027%u66F4%u9AD8%u3002%0A%0A%u6211%u4EEC%u9996%u5148%u8981%u7406%u89E3%20roles%2C%20%u56E0%u4E3A%20roles%20%u529F%u80FD%u662F%u5982%u6B64%u5F3A%u5927%uFF0C%u4EE5%u81F3%u4E8E%u6211%u4EEC%u5728%u7528%u5230playbook%u529F%u80FD%u540E%uFF0C%u4E00%u5B9A%u4F1A%u4F7F%u7528%u5230roles%u529F%u80FD%u3002%0A%0A%23%23%202.%20Task%20Include%20Files%20And%20Encouraging%20Reuse%0A%0A%60include%60%u53EF%u4EE5%u4E0A%u6211%u4EEC%u6709%u6548%u63D0%u9AD8%u4EE3%u7801%u590D%u7528%u6027%uFF0C%u8BF7%u53C2%u8003%u5982%u4E0B%u6848%u4F8B%u3002%0A%0Atasks/foo.yml%0A%0A%60%60%60%0A—%0A%23%20possibly%20saved%20as%20tasks/foo.yml%0A%0A-%20name%3A%20placeholder%20foo%0A%20%20command%3A%20/bin/foo%0A%0A-%20name%3A%20placeholder%20bar%0A%20%20command%3A%20/bin/bar%0A%60%60%60%0A%0A%u5982%u679C%u6211%u4EEC%u5E0C%u671B%u5728task%u4E2D%u5F15%u7528%uFF0C%u5982%u4E0B%u65B9%u5F0F%u53EF%u5B9E%u73B0%uFF1A%0A%0A%60%60%60%0Atasks%3A%0A%0A%20%20-%20include%3A%20tasks/foo.yml%0A%60%60%60%0A%0A**Include%u652F%u6301%u53D8%u91CF%u5F15%u7528%uFF0C%u6211%u4EEC%u79F0%u4E4B%u4E3A%60parameterized%20include%60**%u3002%u4E3E%u4E2A%u4F8B%u5B50%uFF0C%u5982%u679C%u5206%u53D1%u591A%u4E2A%20wordpress%20%u5B9E%u4F8B%uFF0C%u6211%u53EF%u4EE5%u5C06%20wordpress%20%u4EFB%u52A1%u6392%u7248%u5230%u4E00%u4E2A%20wordprss.yml%20%u6587%u4EF6%uFF0C%u901A%u8FC7%u53D8%u91CF%u4F20%u53C2%u5B9E%u73B0%u3002%0A%0A%60%60%60%0Atasks%3A%0A%20%20-%20include%3A%20wordpress.yml%20wp_user%3Dtimmy%0A%20%20-%20include%3A%20wordpress.yml%20wp_user%3Dalice%0A%20%20-%20include%3A%20wordpress.yml%20wp_user%3Dbob%0A%60%60%60%0A%0A%u4ECE1.0%u7248%u672C%u5F00%u59CB%uFF0Cansible%20%u540C%u6837%u4E5F%u652F%u6301%u5982%u4E0B%u683C%u5F0F%u7684%u4F20%u53C2%uFF1A%0A%0A%60%60%60%0Atasks%3A%0A%0A%20%20-%20include%3A%20wordpress.yml%0A%20%20%20%20vars%3A%0A%20%20%20%20%20%20%20%20wp_user%3A%20timmy%0A%20%20%20%20%20%20%20%20ssh_keys%3A%0A%20%20%20%20%20%20%20%20%20%20-%20keys/one.txt%0A%20%20%20%20%20%20%20%20%20%20-%20keys/two.txt%0A%60%60%60%0A%0A%u53D8%u91CF%u7684%u5F15%u7528%u65B9%u5F0F%u5982%u4E0B%uFF1A%0A%0A%20%20%20%20%7B%7B%20wp_user%20%7D%7D%0A%0A%0A%u5982%u524D%u9762%u6240%u4ECB%u7ECD%60includes%60%u540C%u65F6%u9002%u7528%u4E8E%20%60handlers%60%u3002%u6BD4%u5982%uFF0C%u6211%u4EEC%u5B9A%u4E49%u4E86%u5982%u4F55%u91CD%u542F%20apache%2C%20%u4F46%u5E0C%u671B%u6240%u6709%20playbook%20%u6267%u884C%u524D%u53EA%u6267%u884C%u4E00%u6B21%uFF0C%u90A3%u4E48%u6211%u4EEC%u53EF%u4EE5%u4F7F%u7528%u5982%u4E0B%u7684%u65B9%u5F0F%u8FDB%u884C%uFF0C%u5B9A%u4E49%20handlers.yml%3A%0A%0A%60%60%60%0A—%0A%23%20this%20might%20be%20in%20a%20file%20like%20handlers/handlers.yml%0A-%20name%3A%20restart%20apache%0A%20%20service%3A%20name%3Dapache%20state%3Drestarted%0A%60%60%60%0A%0A%u7136%u540E%u5728playbook%u4E2D%u5F15%u7528%20%0A%0A%60%60%60%0Ahandlers%3A%0A%20%20-%20include%3A%20handlers/handlers.yml%0A%60%60%60%0A%0Ainclude%20%u4E5F%u652F%u6301%u4ECE%u4E00%u4E2Aplaybook%20%u5BFC%u5165%u5230%u53E6%u5916%u4E00%u4E2A%20playbook%2C%u540C%u65F6%u652F%u6301%u5C42%u7EA7%u5B9A%u4E49%u3002%u5982%u4E0B%u4F8B%uFF1A%0A%0A%60%60%60%0A-%20name%3A%20this%20is%20a%20play%20at%20the%20top%20level%20of%20a%20file%0A%20%20hosts%3A%20all%0A%20%20remote_user%3A%20root%0A%0A%20%20tasks%3A%0A%0A%20%20-%20name%3A%20say%20hi%0A%20%20%20%20tags%3A%20foo%0A%20%20%20%20shell%3A%20echo%20%22hi…%22%0A%0A-%20include%3A%20load_balancers.yml%0A-%20include%3A%20webservers.yml%0A-%20include%3A%20dbservers.yml%0A%60%60%60%0A%0A%u8FD9%u91CC%u9700%u8981%u7559%u610F%u7684%u662F%uFF0Cinclude%u65F6%u53D8%u91CF%u4E0D%u968F%u4E4B%u751F%u6548%0A%0A%23%23%203.%20Roles%0A%0A%u7EC4%u7EC7playbook%u7684%u6700%u597D%u529E%u6CD5%u662F%u4EC0%u4E48%uFF1F%20%u4F7F%u7528%20roles%21%u3002%20roles%20%u53EF%u4EE5%u6709%u6548%u7684%u628A%20vars_files%2C%20tasks%2C%20handlers%u7EC4%u7EC7%u8D77%u6765%uFF0C%u6309%u89D2%u8272%u5206%u7EC4%u53EF%u4EE5%u975E%u5E38%u5BB9%u6613%u7684%u548C%u5176%u5B83%u7528%u6237%u5206%u4EAB%u3002rles%20%u53EA%u662F%u81EA%u52A8%u5316%20%60include%60%20%u5982%u4E0A%u7684%u8FD9%u4E9B%u6307%u4EE4%uFF0C%u5176%u672C%u8EAB%u5E76%u6CA1%u6709%u9B54%u6CD5%u6548%u679C%uFF0C%u4E0D%u7BA1%u5982%u6B64%uFF0C%u8FD9%u662F%u4E00%u9879%u5927%u5DE5%u7A0B%u3002%u56E0%u4E3A%u6211%u4EEC%u8981%u5408%u7406%u7684%u89C4%u5212%u5176%u76EE%u5F55%u7ED3%u6784%u3002%0A%0A%60%60%60%0Asite.yml%0Awebservers.yml%0Afooservers.yml%0Aroles/%0A%20%20%20common/%0A%20%20%20%20%20files/%0A%20%20%20%20%20templates/%0A%20%20%20%20%20tasks/%0A%20%20%20%20%20handlers/%0A%20%20%20%20%20vars/%0A%20%20%20%20%20defaults/%0A%20%20%20%20%20meta/%0A%20%20%20webservers/%0A%20%20%20%20%20files/%0A%20%20%20%20%20templates/%0A%20%20%20%20%20tasks/%0A%20%20%20%20%20handlers/%0A%20%20%20%20%20vars/%0A%20%20%20%20%20defaults/%0A%20%20%20%20%20meta/%0A%60%60%60%0A%0A%u5199%u5230playbook%u4E2D%uFF0C%u5B83%u957F%u6210%u8FD9%u4E2A%u6837%u5B50%uFF1A%0A%0A%60%60%60%0A—%0A-%20hosts%3A%20webservers%0A%20%20roles%3A%0A%20%20%20%20%20-%20common%0A%20%20%20%20%20-%20webservers%0A%60%60%60%0A%0A%u5176%u4E2D%u6BCF%u9879%u5747%u6709%u5176%u529F%u80FD%u4ECB%u7ECD%uFF1A%0A%0A*%20roles/x/tasks/main.yml%0A%u4E3B%u51FD%u6570%uFF0C%u5305%u62EC%u5728%u5176%u4E2D%u7684%u6240%u6709%u4EFB%u52A1%u5C06%u88AB%u6267%u884C%0A*%20roles/x/handlers/main.yml%0A%u6240%u6709%u5305%u62EC%u4E2D%u5176%u4E2D%u7684%20handlers%20%u5C06%u88AB%u6267%u884C%0A*%20roles/x/vars/main.yml%20%0A%u6240%u6709%u5305%u62EC%u5728%u5176%u4E2D%u7684%u53D8%u91CF%u5C06%u5728roles%u4E2D%u751F%u6548%0A*%20roles/x/meta/main.yml%20%0Aroles%u6240%u6709%u4F9D%u8D56%u5C06%u88AB%u6B63%u5E38%u767B%u5165%0A*%20roles/x/%7Bfiles%2Ctemplates%2Ctasks%7D/%20%28dir%20depends%20on%20task%29%20%0A%u6240%u6709%u6587%u4EF6%uFF0C%u6A21%u677F%u90FD%u5C06%u53EF%u5B58%u653E%u5728%u8FD9%u91CC%uFF0C%u653E%u5728%u8FD9%u91CC%u6700%u5927%u7684%u597D%u5904%u662F%u4E0D%u7528%u6307%u5B9A%u7EDD%u5BF9%u8DEF%u5F84%0A%0A%60%60%60%0A—%0A%0A-%20hosts%3A%20webservers%0A%20%20roles%3A%0A%20%20%20%20-%20common%0A%20%20%20%20-%20%7B%20role%3A%20foo_app_instance%2C%20dir%3A%20%27/opt/a%27%2C%20%20app_port%3A%205000%20%7D%0A%20%20%20%20-%20%7B%20role%3A%20foo_app_instance%2C%20dir%3A%20%27/opt/b%27%2C%20%20app_port%3A%205001%20%7D%0A%60%60%60%0A%0A%u4E5F%u53EF%u4EE5%u52A0%u5165%u4E00%u5B9A%u7684%u6761%u4EF6%uFF1A%0A%0A%60%60%60%0A—%0A%0A-%20hosts%3A%20webservers%0A%20%20roles%3A%0A%20%20%20%20-%20%7B%20role%3A%20some_role%2C%20when%3A%20%22ansible_os_family%20%3D%3D%20%27RedHat%27%22%20%7D%0A%60%60%60%0A%0A%u540C%u65F6%uFF0C%u6211%u4EEC%u6709%u53EF%u80FD%u5E0C%u671B%u4E3A%u6211%u4EEC%u7684%u89D2%u8272%u5206%u914D%20%20tags%2C%20tags%u7684%u529F%u80FD%u662F%u6211%u4F7F%u7528%20ansible%20%u4E0B%u6765%u4F53%u9A8C%u6700%u4E3A%u6DF1%u523B%u7684%u529F%u80FD%uFF0C%u6CA1%u6709%u4E4B%u4E00%uFF0C%u5B9E%u5728%u662F%u592A%u7075%u6D3B%u65B9%u4FBF%u4E86%u3002%u5728%u8003%u8651%u7EC4%u7EC7%u4E25%u5BC6%u7684%u540C%u65F6%uFF0C%u53C8%u4E0D%u5FD8%u5176%u7075%u6D3B%u6027%u3002%0A%0A%60%60%60%0A—%0A%0A-%20hosts%3A%20webservers%0A%20%20roles%3A%0A%20%20%20%20-%20%7B%20role%3A%20foo%2C%20tags%3A%20%5B%22bar%22%2C%20%22baz%22%5D%20%7D%0A%60%60%60%0A%0A%u867D%u8BF4tags%20%u662F%u597D%u4E1C%u897F%uFF0C%u4F46%u5982%u679C%u4F60%u53D1%u73B0%u4F60%u5236%u8BA2%u7684%60roles%60%u4E2D%u5177%u6709%u5F88%u591Atags%u800C%u4E14%u7ECF%u5E38%u6027%u7684%u4F1A%u88AB%u4F7F%u7528%uFF0C%u5219%u8981%u8003%u8651%u4E0B%u518D%u6B21%u5207%u5206roles%u4E3A%u591A%u4E2Aroles.%0A%0A%u540C%u65F6%uFF0C%u5728%u4E00%u4E2Aplaybook%u4E2D%u6211%u4EEC%u53EF%u4EE5%u5B9A%u4E49%u591A%u5C42%u7EA7%u7684%u4EFB%u52A1%u3002%u5982%u4E0B%u6848%u4F8B%uFF1A%0A%0A%60%60%60%0A—%0A%0A-%20hosts%3A%20webservers%0A%0A%20%20pre_tasks%3A%0A%20%20%20%20-%20shell%3A%20echo%20%27hello%27%0A%0A%20%20roles%3A%0A%20%20%20%20-%20%7B%20role%3A%20some_role%20%7D%0A%0A%20%20tasks%3A%0A%20%20%20%20-%20shell%3A%20echo%20%27still%20busy%27%0A%0A%20%20post_tasks%3A%0A%20%20%20%20-%20shell%3A%20echo%20%27goodbye%27%0A%60%60%60%0A%0A%23%23%204.%20Role%20Default%20Variables%0A%0A%60defaults/main.yml%60%20%u5B9A%u4E49%u6700%u4F4E%u4F18%u5316%u7EA7%u7684%20roles%20%u53D8%u91CF%uFF0C%u6211%u4EEC%u53EF%u4EE5%u901A%u8FC7%u5F88%u591A%u5176%u5B83%u65B9%u5F0F%u5B9A%u4E49%u7684%u53D8%u91CF%uFF0C%u5747%u4F1A%u8986%u76D6%u8FD9%u91CC%u7684%u53D8%u91CF%u503C%0A%0A%23%23%205.%20Role%20Dependencies%0A%0A%60meta/mainl.yml%60%u9ED8%u8BA4%u5B9A%u4E49role%u7684%u4F9D%u8D56%uFF0C%0A%0A%60%60%60%0A—%0Adependencies%3A%0A%20%20-%20%7B%20role%3A%20common%2C%20some_parameter%3A%203%20%7D%0A%20%20-%20%7B%20role%3A%20apache%2C%20appache_port%3A%2080%20%7D%0A%20%20-%20%7B%20role%3A%20postgres%2C%20dbname%3A%20blarg%2C%20other_parameter%3A%2012%20%7D%0A%60%60%60%0A%0ARole%20%u4F9D%u8D56%u4E5F%u53EF%u4EE5%u662F%u5168%u8DEF%u5F84%uFF0C%u5982%uFF1A%0A%0A%60%60%60%0A—%0Adependencies%3A%0A%20%20%20-%20%7B%20role%3A%20%27/path/to/common/roles/foo%27%2C%20x%3A%201%20%7D%0A%60%60%60%0A%0ARoles%20dependencies%20%u603B%u662F%u5728roles%u6700%u5F00%u59CB%u7684%u65F6%u5019%u6267%u884C%uFF0C%u800C%u4E14%u9ED8%u8BA4%u53EA%u6267%u884C%u4E00%u6B21%uFF0C%u5373%u4F7F%u5176%u5B83%u5176%u5B83roles%u91CD%u590D%u5F15%u7528%u3002%0A%u901A%u8FC7%u8BBE%u7F6E%20meta/main.yml%20%u4E2D%20allow_duplicates%3A%20yes%20%u53EF%u4EE5%u591A%u6B21%u6267%u884C%u3002%u5982%u4E0B%u4F8B%uFF1A%0A%0A%60%60%60%0A—%0Adependencies%3A%0A-%20%7B%20role%3A%20wheel%2C%20n%3A%201%20%7D%0A-%20%7B%20role%3A%20wheel%2C%20n%3A%202%20%7D%0A-%20%7B%20role%3A%20wheel%2C%20n%3A%203%20%7D%0A-%20%7B%20role%3A%20wheel%2C%20n%3A%204%20%7D%0A%60%60%60%0A%0A%60%60%60%0A—%0Aallow_duplicates%3A%20yes%0Adependencies%3A%0A-%20%7B%20role%3A%20tire%20%7D%0A-%20%7B%20role%3A%20brake%20%7D%0A%60%60%60%0A%0A%23%23%206.%20Embedding%20Modules%20In%20Roles%0A%0A%u8FD9%u4E2A%u9AD8%u7EA7%u8BDD%u9898%u548C%u5927%u90E8%u5206%u7528%u6237%u65E0%u5173%uFF0C%u8FD9%u91CC%u6682%u4E0D%u505A%u4ECB%u7ECD%0A%23%23%207.%20Ansible%20Galaxy%0A%0A

原創文章,作者:stanley,如若轉載,請注明出處:http://www.www58058.com/13710

(0)
stanleystanley
上一篇 2016-03-28 21:49
下一篇 2016-03-28

相關推薦

  • 優云軟件老司機:如何讓運維操作更輕松、高效

    講師介紹 龐輝富 ?廣通軟件技術總監 ?擁有10多年IT運維管理軟件研發經驗 ?致力于自動化運維解決方案的研究和推廣 ?主導研發的產品廣泛應用于海關、公安、能源等多個行業 技術發展給運維帶來的挑戰 當前的IT建設在這些新技術的演進下,我們看到的是呈現“雙態IT”特征。Gartner也提出雙模IT理論,與現在談的雙態IT是異曲同工的,不再是一種單純的形態,而是…

    系統運維 2017-01-09
  • 第六周

      第6周   1 復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit ; sed -i 's@^[[:space:]]\+@#@g&#03…

    Linux干貨 2017-02-13
  • 鏈接分析算法之:SALSA算法

      SALSA算法的初衷希望能夠結合PageRank和HITS算法兩者的主要特點,既可以利用HITS算法與查詢相關的特點,也可以采納PageRank的“隨機游走模型”,這是SALSA算法提出的背景。由此可見,SALSA算法融合了PageRank和HITS算法的基本思想,從實際效果來說,很多實驗數據表明,SALSA的搜索效果也都優于前兩個算…

    大數據運維 2015-07-21
  • 文本處理工具之grep

                    文本處理工具之grep 一、grep的簡介 1、grep是一個文本過濾器的工具,它根據用戶指定的模式(pattern)對目標文本進行匹配檢查,并將匹配的行打印到標準輸出或輸出重定向。 2、模式:由文本字符或正則表達式組成 3、正則表達式分…

    2017-05-06
  • bash的基本特性之globbing,IO重定向及管道

    bash的基本特性之globbing,IO重定向及管道 giobbing:文件名通配 在bash的操作環境中有一個分廠有用的功能那就是gilobbing:文件名通配,這樣我們在處理數據的時候就更方便了。下面我們來羅列一些常用的通配符。(注:globbing是做整體的文件名匹配而非部分) 匹配模式:元字符 *:表示匹配任意長度的任意字符  &nbsp…

    Linux干貨 2016-12-19
  • ACL實現靈活的權限管理

    ACL實現靈活的權限管理 除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限 CentOS7當中,無論是操作系統安裝時還是之后手工創建的文件系統(xfs、ext4)均會開啟ACL功能。 CentOS6及之前的版本,僅操作系統安裝時創建的文件系統才會默認開啟ACL,手工創建的文件系統,需要手工開啟ACL功能。 mount -o acl /dev/sda…

    2017-07-27
欧美性久久久久