Ansible-Roles角色

1425人浏览 / 0人评论

Ansible Roles角色

1、Ansible Roles使用场景

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

Roles 介绍

ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。主要使用场景代码复用度较高的情况下。

2、Ansible Roles目录结构

[root@m01 roles]# mkdir {nfs,rsync,web}/{vars,tasks,templates,handlers,files} -p 
[root@m01 roles]# tree
.
├── nfs #角色名称 
│     ├── files #存放文件 
│     ├── handlers #触发任务 
│     ├── tasks #具体任务
│     ├── templates #模板文件
│     └── vars #存放变量

目录解释

roles:          <--所有的角色必须放在roles目录下,这个目录可以自定义位置,默认的位置在/etc/ansible/roles
  project:      <---具体的角色项目名称,比如nginx、tomcat、php
    files:     <--用来存放由copy模块或script模块调用的文件。
    templates: <--用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。
    tasks:     <--此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。
      main.yml
    handlers:  <--此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。
      main.yml
    vars:      <--此目录应当包含一个main.yml文件,用于定义此角色用到的变量。
      main.yml
    defaults:  <--此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。
      main.yml
    meta:      <--此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。
      main.yml

3、定义roles主机清单**

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

4、指定backup主机组,执行那个roles

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

5、查看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

6、查看rsync角色的handlers

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

7、查看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

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

5、查看nfs角色的handler

[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

全部评论