七敏释、Ansible Roles

一個數(shù)據(jù)中心有可能存在好多類型的服務(wù)器库快。比如WEB類型、DB類型钥顽、開發(fā)人員使用的開發(fā)類型义屏、QA使用的測試類型等等。如果每個類型的服務(wù)器的初始化行為都不一致蜂大,那要在一個PlayBook中將這些動作完成闽铐,這個PlayBook將變得臃腫、龐大奶浦,且難以后續(xù)維護(hù)和更新兄墅。如果能夠針對每個類型的服務(wù)器單獨編寫PlayBook,最后通過某種方式整合這PlayBook澳叉, 在管理方式上就又會變得簡單隙咸。Ansible中提供了類似的概念,也就是Role成洗。它允許管理員將他們復(fù)雜的PlayBook分解成一個個小的邏輯單元, 以便于維護(hù)和管理五督。

Roles 結(jié)構(gòu)

ROLE 是什么呢

從表面上看,它就是一個目錄瓶殃。目錄的名字也就是role的名字充包。進(jìn)到這個role名字的目錄里,會發(fā)現(xiàn)好多子目錄遥椿。
tasks:     存放 task 任務(wù)
handlers:  存放 handlers 任務(wù)
files:     存放 task 中引用的文件
templages: 存放 task 中引用的模板
meta:      存在 role 的依賴role(這個role 執(zhí)行前基矮,要先執(zhí)行那個role)
vars:      存放 role 的變量
defaults:  存在 role 的默認(rèn)變量

那么一個真正的Role 的目錄結(jié)構(gòu)應(yīng)該如下

user.example/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml
role 的名字叫做 user.example。
其中 tasks 修壕、handlers 愈捅、meta遏考、 vars慈鸠、defaults 目錄的入口文件必須是main.yml,不能別配置為其他。

制作一個Role

最終優(yōu)化的PlayBook

---
- name: task control playbook example
  hosts: web_servers
  wars:
    createuser:
      - tomcat
      - www
      - mysql
  tasks:
    - name: create user
      user: name={{ item }} state=present
      with_items: "{{ createuser }}"

    - name: yum nginx webserver
      yum: name=nginx state=present

    - name: update nginx main config
      copy: src=nginx.conf dest=/etc/nginx/
      tags: update
      notify: reload nginx server

    - name: add virtualhost config
      copy: src=www.biudefor.com.conf dest=/etc/nginx/conf.d/
      tags: update
      notify: reload nginx server

    - name: check nginx syntax
      shell: /usr/sbin/nginx -t
      register: nginxsyntax
      tags: update
      
    - name: check nginx running
      stat: path=/var/lock/subsys/nginx
      register: nginxrunning
      tags: update
      
    - name: print nginx syntax
      debug: var=nginxsyntax

    - name: start nginx server
      service: name=nginx state=started
      when: nginxsyntax.rc == 0 and nginxrunning.stat.exists == false
  handlers:
    - name: reload nginx server
      service: name=nginx state=started
      when: nginxsyntax.rc == 0 and nginxrunning.stat.exists == true

分解這個PlayBook青团,命名role 的名字為 nginx

nginx/
│
├── files
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml

files 文件夾存放文件

存放 www.biudefor.com.conf  配置文件

handlers 文件夾中的main.yml 文件

---
- name: reload nginx server
  service: name=nginx state=started
  when: nginxsyntax.rc == 0 and nginxrunning.stat.exists == true

tasks 文件夾中的 main.yml 文件

    - name: create user
      user: name={{ item }} state=present
      with_items: "{{ createuser }}"

    - name: yum nginx webserver
      yum: name=nginx state=present

    - name: update nginx main config
      copy: src=nginx.conf dest=/etc/nginx/
      tags: update
      notify: reload nginx server

    - name: add virtualhost config
      copy: src=www.biudefor.com.conf dest=/etc/nginx/conf.d/
      tags: update
      notify: reload nginx server

    - name: check nginx syntax
      shell: /usr/sbin/nginx -t
      register: nginxsyntax
      tags: update
      
    - name: check nginx running
      stat: path=/var/lock/subsys/nginx
      register: nginxrunning
      tags: update
      
    - name: print nginx syntax
      debug: var=nginxsyntax

    - name: start nginx server
      service: name=nginx state=started
      when: nginxsyntax.rc == 0 and nginxrunning.stat.exists == false

templates 文件夾存放模板

vars 文件夾中的 main.yml 文件

---
createuser:
  - tomcat
  - www
  - mysql

經(jīng)過以上對PlayBook 的拆分譬巫,就形成了一個nginx 的 ROLE。
回到本章開始的問題督笆,當(dāng)一個數(shù)據(jù)中心存在多種類型的服務(wù)器時芦昔,我們可以針對每個類型去單獨寫一個ROLE,這些ROLE 有可能分給不同的人去開發(fā)娃肿,這樣不但使開發(fā)的邏輯變得簡單咕缎,且開發(fā)效率也隨著人員的增加而提升。

如何在PlayBook中使用 Role

Role 本身不能被直接執(zhí)行料扰,還是需要借助PlayBook進(jìn)行間接的調(diào)用凭豪。

- name: a playbook used role
  hosts: all
  roles:
    - nginx

# ansible-playbook nginx.yml

如何使用 Galaxy

Ansible的galaxy 工具,類似程序員使用的github晒杈。運(yùn)維人員可以將自己編寫的Role通過galaxy這個平臺進(jìn)行分享嫂伞。同樣,我們也可以通過galaxy 這個平臺去獲取一些我們想要的role拯钻。官網(wǎng)為:https://galaxy.ansible.com
而ansible-galaxy 則是一個使用 galaxy 命令行的工具帖努。它使我們不用訪問galaxy 的網(wǎng)站而獲取到需要的內(nèi)容。
接下來我們將通過 ansible-galaxy 這個命令行去學(xué)習(xí)galaxy的使用粪般。

獲取幫助

# ansible-galaxy  --help
Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...

Options:
  -h, --help     show this help message and exit
  -v, --verbose  verbose mode (-vvv for more, -vvvv to enable connection
                 debugging)
  --version      show program's version number and exit

獲取具體某個子指令的幫助

在 ansible-galaxy  --help 中可以看到子指令
子指令包含: delete|import|info|init|install|list|login|remove|search|setup
ansible-galaxy delete|import|info|init|install|list|login|remove|search|setup --help
# ansible-galaxy install --help
Usage: ansible-galaxy install [options] [-r FILE | role_name(s)[,version] | scm+role_repo_url[,version] | tar_file(s)]

Options:
  -f, --force           Force overwriting an existing role
  -h, --help            show this help message and exit
  -c, --ignore-certs    Ignore SSL certificate validation errors.
  -i, --ignore-errors   Ignore errors and continue with the next specified
                        role.
  -n, --no-deps         Don't download roles listed as dependencies
  -r ROLE_FILE, --role-file=ROLE_FILE
                        A file containing a list of roles to be imported
  -p ROLES_PATH, --roles-path=ROLES_PATH
                        The path to the directory containing your roles. The
                        default is the roles_path configured in your
                        ansible.cfg file (/etc/ansible/roles if not
                        configured)
  -s API_SERVER, --server=API_SERVER
                        The API server destination
  -v, --verbose         verbose mode (-vvv for more, -vvvv to enable
                        connection debugging)
  --version             show program's version number and exit

常用指令

// 在galaxy 上搜索共享的ROLE
# ansible-galaxy search
// 安裝 galaxy 上共享的 ROLE
# ansible-galaxy install
// 列舉已經(jīng)通過 ansible-galaxy 工具安裝的ROLE
# ansible-galaxy list
// 創(chuàng)建一個ROLE 的空目錄架構(gòu), 這樣我們在開發(fā)一個ROLE的時候拼余,就不需要手動創(chuàng)建目錄了。
# ansible-galaxy init --offline

Example

// 創(chuàng)建了名字為testrole的空ROLE目錄結(jié)構(gòu)亩歹,默認(rèn)在執(zhí)行命令的目錄生產(chǎn)姿搜。
# ansible-galaxy init --offline testrole
# tree testrole/
testrole/
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捆憎,隨后出現(xiàn)的幾起案子舅柜,更是在濱河造成了極大的恐慌,老刑警劉巖躲惰,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件致份,死亡現(xiàn)場離奇詭異,居然都是意外死亡础拨,警方通過查閱死者的電腦和手機(jī)氮块,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诡宗,“玉大人滔蝉,你說我怎么就攤上這事∷郑” “怎么了蝠引?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我螃概,道長矫夯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任吊洼,我火速辦了婚禮训貌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冒窍。我一直安慰自己递沪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布综液。 她就那樣靜靜地躺著区拳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪意乓。 梳的紋絲不亂的頭發(fā)上樱调,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音届良,去河邊找鬼笆凌。 笑死,一個胖子當(dāng)著我的面吹牛士葫,可吹牛的內(nèi)容都是我干的乞而。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慢显,長吁一口氣:“原來是場噩夢啊……” “哼爪模!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荚藻,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屋灌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后应狱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體共郭,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年疾呻,在試婚紗的時候發(fā)現(xiàn)自己被綠了除嘹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡岸蜗,死狀恐怖尉咕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情璃岳,我是刑警寧澤年缎,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布悔捶,位于F島的核電站,受9級特大地震影響晦款,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枚冗,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一缓溅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赁温,春花似錦坛怪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至稚疹,卻和暖如春居灯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背内狗。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工怪嫌, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柳沙。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓岩灭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赂鲤。 傳聞我的和親對象是個殘疾皇子噪径,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容