Ansible playbook roles

 

1  概述

角色(roles):若是咱們使用playbook寫成一個文件,這個文件會很大,可是不方便組織,咱們能夠分組,把playbook根據功能,如handler,tasks等分門別類的放在在各自的子目錄下,造成一個集合,就是角色,建議把角色放在固定的目錄下,目錄能夠ansible的配置文件中的roles_path來定義。html

  • 目錄結構清晰mysql

  • 能夠重複使用nginx

參考: http://www.ansible.com.cn/docs/playbooks_roles.html web

        https://blog.51cto.com/ghbsunny/2047084redis

 

2  配置介紹sql

以層級結構組織Playbook的核心元素,成爲roles。vim

核心元素包括如下幾點:tomcat

        Hosts:主機socket

        Tasks:任務列表ide

        Variables:變量

        Templates:包含了模板語法的文本文件;

        Handlers:由特定條件觸發的任務;

在roles目錄下,分別建立不一樣的目錄,每一個目錄就是不一樣的角色,roles目錄下是角色的集合:

如roles/建立以下的目錄

mysql/

httpd/

nginx/

memcached/

roles模塊的路徑能夠在配置文件/etc/ansible/ansible.cfg裏roles_path定義.

 

每一個角色,以特定的層級目錄結構進行組織,例子以下:

/roles/mysql/

  • files/ :存放由copy或script模塊等調用的文件;
  • templates/:template模塊查找所須要模板文件的目錄;
  • tasks/:至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含;
  • handlers/:至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含;
  • vars/:至少應該包含一個名爲main.yml的文件;其它的文件須要在此文件中經過include進行包含;
  • meta/:至少應該包含一個名爲main.yml的文件,定義當前角色的特殊設定及其依賴關係;其它的文件須要在此文件中經過include進行包含;注意,角色和角色之間有依賴關係,如安裝NT,先裝nginx後裝tomcat,通常不需定義,執行咱們本身定義好安裝順序便可
  • default/:設定默認變量時使用此目錄中的main.yml文件;
nginx/
├── files   靜態文件
├── tasks   任務列表
│   ├── copyfile.yml
│   ├── installnginx.yml
│   ├── main.yml   入口文件
│   └── start.yml
├── templates 模板文件
│   └── nginx.conf
└── vars  變量
└── handlers  被觸發的動做

 

3  playbook調用角色

playbook調用角色有三個方法:

方法1:

- hosts: websrvs
  remote_user: root
  roles:
  - mysql
  - memcached
  - nginx

方法2:傳遞變量給角色,調用角色時,注意依賴關係,能夠本身先考慮好前後順序

- hosts: 
  remote_user:
  roles:
  - { role: nginx, username: nginx }  #鍵role用於指定角色名稱;後續的k/v用於傳遞變量給角色;

方法3:基於條件測試實現角色調用;

roles:
- { role: nginx, when: "ansible_distribution_major_version == '7' " }

查找順序

roles目錄,對應的文件夾

tasks:先找tasks目錄裏面的main.yml文件,看到import_tasks來導入別的yml文件,這個是必須的

templates: 找這個目錄裏面的模板文件,在tasks裏面是能夠用相對路徑來寫

vars:先找main.yml文件,若是找到就找變量替換

hanlers:先找main.yml文件,若是找到,則在tasks裏面經過notify來觸發

files: 放的是靜態文件

相互調用

經過import_tasks 來相互調用,roles/role/tasks/taskfile.yml

怎麼使用

跟roles同級目錄下,寫nginx。yml文件

- hosts: web
  roles:
  - nginx

 

 

 

4  例子

 

建立roles文件夾

mkdir roles

建立nginx, mysql, redis, uwsgi 四個角色

進入一個角色 cd nginx,

建立目錄 mkdir -v {tasks,files,templates,handlers,vars}

nginx/
├──files  靜態文件
├──tasks  任務列表
│   ├──copyfile.yml
│   ├──installnginx.yml
│   ├──main.yml  入口文件
│   └──start.yml
├──templates模板文件
│   └──nginx.conf
└──vars 變量
└──handlers 被觸發的動做

 

進入tasks cd tasks

1.建立安裝nginx任務 vim installnginx.yaml

-name:installnginx
 yum:name=nginx

2.建立拷貝文件任務 vim copyfile.yaml

-name:copyfile
 template:src=nginx.confdest=/etc/nginx/nginx.conf

3.建立啓動任務 vim startnginx.yaml

-name:starnginx
 service:name=nginxstate=started

4.建立入口文件 vim main.yaml

-import_tasks:installnginx.yaml
-import_tasks:copyfile.yaml
-import_tasks:startnginx.yaml

5.建立觸發handlers文件 (每次修改配置文件後觸發 須要notify ) cd handler

建立入口文件 vim main.yaml

-name:restart
 service:name=niginstate=restarted

5.1去tasks目錄中的 拷貝文件任務中 添加notify cd nginx/tasks/ vim copyfile.yaml

-name:copyfile
 template:src=nginx.confdest=/etc/nginx/nginx.conf
 tags:copyfile
 notify:restart

5.2把本機上的nginx配置文件copy到templates中

個人nginx在/opt/nginx1-12/conf/nginx.conf

cp/opt/nginx1-12/conf/nginx.confnginx.conf

6.配置nginx配置文件, (修改核心數,可選) vim nginx.conf

worker_processes{{ansible_processor_vcpus}};

7.跟roles同級的目錄中建立 主role文件 vim nginx.yaml

-hosts:all
 roles:
 -nginx

8.檢查一下

ansible-playbook--syntax-checknginx.yaml

9.運行

 
 

nginx +uwsgi配置方式

第一種

uwsgi配置文件裏面是http= 0.0.0.0:8000

nginx配置文件是proxy_pass http://127.0.0.1:8000;

第二種方式

uwsgi配置文件裏面是socket= 0.0.0.0:8000

nginx配置文件是

include /etc/nginx/uwsgi.conf

uwsgi_pass 127.0.0.1:8000;

第三種方式

uwsgi配置文件裏面是socket=/data/mysite/mysite.socket

nginx配置文件是

include /etc/nginx/uwsgi.conf

uwsgi_pass unix:/data/mysite/mysite.socket;

相關文章
相關標籤/搜索