1. 程式人生 > >Ansible之roles使用

Ansible之roles使用

rip .com distrib des code ons 文本 三種 模塊

ansible roles

一. roles作用

主要作用是重用playbook,例如我們無論安裝什麽軟件都會安裝時間同步服務,那麽每個playbook都要編寫ntp task。我們可以將ntp task寫好,等到用的時候再調用就行了。ansible中將其組織成role,他有著固定的組織格式。以便playbook調用

二. relos介紹

以特定的層級目錄結構進行組織的tasks、variables、handlers、templates、files等;相當於函數的調用把各個功能切割成片段來執行

1. 層級目錄結構

role_name/:我們定義的role的名字
    file/:用於存放copy或script等模塊調用的函數
    tasks/:用於定義各種task,此目錄一定要有main.yml;其他文件需要main.yml包含調用
    handlers:用於定義各種handlers,此目錄一定要有main.yml;其他文件需要main.yml包含調用
    vars:用於定義variables,此目錄一定要有main.yml;其他文件需要main.yml包含調用
    templates/:存儲由template模塊調用的模板文本;
    meta/:定義當前角色的特殊設定及其依賴關系,此目錄中至少應該有一個名為main.yml的文件;其它的文件需要由main.yml進行“包含”調用;
    default/:此目錄中至少應該有一個名為main.yml的文件,用於設定默認變量;

2. 在playbook中調用role

role存放的路徑在配置文件/etc/ansible/ansible.cfg中定義

roles_path    = /etc/ansible/roles:/usr/share/ansible/roles
第一種:
- hosts: HOSTS
  remote_user: root
  roles:
    - ROLE_NAME1
    - ROLE_NAME2

第二種:除了字典第一個元素指明調用的role,後面是傳遞給role的變量
- hosts: HOSTS
  remote_user: root
  roles:
  - { role: ROLE_NAME1, VARIABLE1: VALUE1, ...}

第三種:when指明role調用的條件
- hosts: HOSTS
  remote_user: root
  roles:
  - { role: ROLE_NAME1, when: CONDITIONS}

3. 示例

1). 目錄結構:

技術分享圖片

2). tasks文件

- name: install httpd package
  yum: name=httpd state=present
- name: install configure file
  template: src=httpd.conf.c{{ ansible_distribution_major_version }}.j2 dest=/etc/httpd/conf/httpd.conf
  tags: instconf
  notify: restart httpd service
- name: start httpd service
  service: name=httpd state=started enabled=true

技術分享圖片

3). handlers文件

技術分享圖片

4). 模板文件

技術分享圖片

5). 變量

技術分享圖片

6). playbook文件

- hosts: webservers
  remote_user: root
  roles:
  - { role: httpd }

技術分享圖片

7). 測試playbook文件

技術分享圖片

8). 運行playbook並查看httpd端口

技術分享圖片

Ansible之roles使用