美文网首页
Ansible Playbook Roles 实战案例

Ansible Playbook Roles 实战案例

作者: 祁恩达 | 来源:发表于2019-10-02 10:53 被阅读0次

1.Playbook Roles

ansible roles 角色

适合大规模使用
playbook如果文件较多的情况,不清楚哪些主机执行了哪些状态的yml文件
roles能清楚哪些主机应用哪些角色

1.创建role的步骤

(1)创建以roles命名的目录。
(2)在roles目录中分别创建以各角色名称命名的目录,如web、nfs等。
(3)在每个角色命名的目录中分别创建tasks、handlers、files、templates、vars目录,用不到的目录可以创建为空目录,也可以不创建。
(4)在playbook文件中,调用各角色。

例:roles官方目录的结构,必须这么定义

[root@m01]# cd /etc/ansible/roles
[root@m01 roles]# mkdir {nfs,rsync,web}/{vars,tasks,templates,handlers,files} -p
[root@m01 roles]# tree 
.
├── nfs                 #角色名称
│   ├── files           #存放静态文件
│   ├── handlers        #触发任务
│   ├── tasks           #具体任务
│   ├── templates       #模板文件(多变的文件,如httpd.conf.j2)
│   └── vars            #存放变量

2.roles内各目录中可用的文件

tasks目录:至少应该包含一个名为main.yaml的文件,其定义了此角色的任务列表,此文件可以使用include包含其它的位于此目录中的task文件。
files目录:存放由copy或script等模块调用的文件。
templates目录:template模块会自动在此目录中寻找jenja2模板文件。
handlers目录:此目录中应包含一个main.yaml的文件,用于定义此角色用到的各handlers。
vars目录:应当包含一个main.yaml文件,用于定义此角色用到的变量。
mate目录:应当包含一个main.yaml文件,用于定义此角色的特殊设定及其依赖关系。

2.Playbook Roles实战

image

1.使用roles创建Rsync服务, 目录结构如下

[root@m01 roles]# tree /etc/ansible/roles/
/etc/ansible/roles/
├── hosts
├── rsync
│   ├── files
│   │   ├── rsyncd.conf
│   │   └── rsync.passwd
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
├── site.yml

2.定义roles主机清单

[root@m01 roles]# cat /etc/ansible/roles/hosts 
[backup]
172.16.1.41

3.指定backup主机组,执行那个roles

[root@m01 roles]# cat /etc/ansible/roles/site.yml 
- hosts: backup
  remote_user: root
  roles:
    - rsync
  tags: rsync

4.查看rsync角色的tasks任务

[root@m01 roles]# cat /etc/ansible/roles/rsync/tasks/main.yml 
- name: Install Rsync Server
  yum: name=rsync state=present

- name: Configure Rsync Server
  copy: src={{ item.src }} dest=/etc/{{ item.dest }} mode={{ item.mode }}
  with_items:
    - {src: "rsyncd.conf", dest: "rsyncd.conf", mode: "0644"}
    - {src: "rsync.passwd", dest: "rsync.passwd", mode: "0600"}
  notify: Restart Rsync Server

- name: Start Rsync Server
  service: name=rsyncd state=started enabled=yes

5.查看rsync角色的handlers

[root@m01 roles]# cat /etc/ansible/roles/rsync/handlers/main.yml 
- name: Restart Rsync Server
  service: name=rsyncd state=restarted

6.查看rsync角色的files目录

[root@m01 roles]#  ll /etc/ansible/roles/rsync/files/
total 8
-rw-r--r-- 1 root root 322 Nov 16 18:49 rsyncd.conf
-rw------- 1 root root  20 Nov 16 18:30 rsync.passwd

8.执行roles,使用-t指定执行测试rsync角色

[root@m01 roles]# ansible-playbook -i hosts  -t rsync site.yml 
PLAY [backup] ********************************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.41]

TASK [backup : Install Rsync Server] ***********************************************************************
ok: [172.16.1.41]

TASK [backup : Configure Rsync Server] *********************************************************************
ok: [172.16.1.41]

TASK [backup : Start Rsync Server] *************************************************************************
ok: [172.16.1.41]

PLAY RECAP ********************************************************************************************
172.16.1.41                : ok=5    changed=0    unreachable=0    failed=0  


1.使用roles创建Nfs服务, 目录结构如下

[root@m01 roles]# tree /etc/ansible/roles

├── group_vars
│   └── all
├── hosts
├── nfs
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   │   └── exports
│   └── vars
├── site.yml

2.定义roles主机清单

[root@m01 roles]# cat /etc/ansible/roles/hosts 
[nfs]
172.16.1.31

3.指定nfs主机组,执行那个roles

[root@m01 roles]# cat /etc/ansible/roles/site.yml 
- hosts: nfs
  remote_user: root
  roles:
    - nfs
  tags: nfs

4.查看nfs角色的tasks任务

[root@m01 roles]# cat /etc/ansible/roles/nfs/tasks/main.yml 
- name: Install Nfs-Server
  yum: name=nfs-utils state=present

- name: Configure Nfs-Server
  template: src=exports dest=/etc/exports
  notify: Restart Nfs-Server

- name: Create Directory Data
  file: path={{ share_dir }} state=directory owner=www group=www mode=0755

- name: Start Nfs-Server
  service: name=nfs state=started enabled=yes

5.查看nfs角色的handlers

[root@m01 roles]# cat /etc/ansible/roles/nfs/handlers/main.yml 
- name: Restart Nfs-Server
  service: name=nfs state=restarted

6.查看rsync角色的files目录

[root@m01 roles]# cat /etc/ansible/roles/nfs/templates/exports 
{{ share_dir }} {{ share_ip }}(rw,sync,all_squash,anonuid=666,anongid=666)

7.nfs对应的变量定义

[root@m01 roles]# cat /etc/ansible/roles/group_vars/all 
#nfs
share_dir: /data
share_ip: 172.16.1.31

8.执行roles,使用-t指定执行nfs标签

[root@m01 roles]# ansible-playbook -i hosts  -t nfs site.yml 
PLAY [nfs] ********************************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.31]

TASK [nfs : Install Nfs-Server] ***********************************************************************
ok: [172.16.1.31]

TASK [nfs : Configure Nfs-Server] *********************************************************************
ok: [172.16.1.31]

TASK [nfs : Create Directory Data] ********************************************************************
ok: [172.16.1.31]

TASK [nfs : Start Nfs-Server] *************************************************************************
ok: [172.16.1.31]

PLAY RECAP ********************************************************************************************
172.16.1.31                : ok=5    changed=0    unreachable=0    failed=0   

1.使用roles创建web服务, 目录结构如下

[root@m01 roles]# tree /etc/ansible/roles

├── group_vars
│   └── all
├── hosts
├── web
│   ├── files
│   │   └── kaoshi.zip
│   │   └── httpd.conf
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   │   
│   └── vars
├── site.yml

2.定义roles主机清单

[root@m01 roles]# cat /etc/ansible/roles/hosts 
[web]
172.16.1.7

3.指定web主机组,执行那个roles

[root@m01 roles]# cat /etc/ansible/roles/site.yml 
- hosts: web
  remote_user: root
  roles:
    - web
  tags: web

4.查看web角色的tasks任务

[root@m01 roles]# cat /etc/ansible/roles/web/tasks/main.yml 
- name: Installed Httpd Server
  yum: name=httpd,php state=present

- name: Configure Httpd Server
  template: src=./files/httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify: Restart Httpd Server

- name: Start Httpd Server
  service: name=httpd state=started enabled=yes

- name: Mount Nfs Server 
  mount: src={{remote_nfs_ip}}:/data path={{ local_dir }} fstype=nfs opts=defaults state=mounted

- name: Push kaoshi.zip 
  unarchive: src=./files/kaoshi.zip dest={{ local_dir }}

5.查看web角色的handlers

[root@m01 roles]# cat /etc/ansible/roles/web/handlers/main.yml 
- name: Restart Httpd Server
  service: name=httpd state=restarted

6.nfs对应的变量定义

[root@m01 roles]# cat /etc/ansible/roles/group_vars/all 
#web
remote_nfs_ip: 172.16.1.31
local_dir: /var/www/html/
http_port: 80

7.执行roles,使用-t指定执行nfs标签

[root@m01 roles]# ansible-playbook -i hosts  -t web site.yml

相关文章

网友评论

      本文标题:Ansible Playbook Roles 实战案例

      本文链接:https://www.haomeiwen.com/subject/edglpctx.html