王杰

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.Ansible Roles 角色

ansible roles 角色,适合大规模使用

playbook如果文件较多的情况,不清楚哪些主机执行了哪些状态的yml文件

roles能清楚哪些主机应用哪些角色

1.roles官方目录的结构,必须这么定义

 

[root@manager roles]# mkdir {nfs,rsync,web}/{vars,tasks,templates,handlers,files} -p
[root@manager roles]# tree
.
├── ansibleconf.tar.gz
├── base            #角色名称
│   ├── files       #存放文件
│   │   ├── push_data_rsync.sh
│   │   ├── rsyncd.conf.template
│   │   └── sshd.template
│   ├── handlers    #触发任务
│   │   └── main.yml
│   ├── tasks       #具体任务
│   │   └── main.yml
│   ├── template    #模板文件
│   └── vars        #存放变量
├── group_vars
│   └── all
├── nfs
│   ├── files
│   │   └── exports.template
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── rsync
│   ├── files
│   │   ├── check_client_data.sh
│   │   ├── mail.rc
│   │   ├── rsyncd.conf.template
│   │   └── rsyncd.pass.template
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── template
│   └── vars
├── sersync
│   ├── files
│   │   ├── confxml.xml
│   │   └── rsync.pass
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── template
│   └── vars
├── site.yml
└── web
    ├── files
    │   ├── exam.txt
    │   ├── exam.zip
    │   └── httpd.conf.template
    ├── handlers
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    ├── template
    └── vars
        └── main.yml

31 directories, 28 files
[root@manager roles]# 

2.roles变量定义方式

1)在vars目录中创建一个main.yml定义

2)在roles目录下创建一个group_vars定义,可以是主机组的名称,也可以是all(所有)

 

2.Ansible Roles 实战

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

[root@manager roles]# tree /etc/ansible/roles
/etc/ansible/roles
├── rsync
│   ├── files
│   │   ├── check_client_data.sh
│   │   ├── mail.rc
│   │   ├── rsyncd.conf.template
│   │   └── rsyncd.pass.template
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── template
│   └── vars
├── site.yml

 

2.定义roles主机清单

[root@manager roles]# cat ../hosts 
[backup]
172.26.73.200

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

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

4.查看rsync角色的 tasks任务

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

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

- name: Create Directory
  file: path={{ item }} state=directory owner=www group=www mode=755
  with_items:
    - /backup
    - /data

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

- name: Push Mail Configure
  copy: src=./files/check_client_data.sh dest=/server/scripts/ mode=755

- name: Check Scripts Crontab
  cron:
    name: 'Check Backup Scripts'
    minute: '*/10'
    hour: 05
    job: /bin/bash /server/scripts/check_client_data.sh &>/dev/null

- name: OutPut Rsync Status
  shell: netstat -lntp|grep rsync
  register: Rsync_Status
  ignore_errors: yes

- name: Print Rsync Status
  debug: msg={{ Rsync_Status.stdout_lines }}
  ignore_errors: yes
[root@manager roles]# 

 

5.查看rsync角色的 handlers

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

6.查看rsync角色的 files目录

[root@manager roles]# ll /etc/ansible/roles/rsync/files/
总用量 16
-rw-r--r-- 1 root root  426 2月  23 19:16 check_client_data.sh
-rw-r--r-- 1 root root 2179 2月  23 19:47 mail.rc
-rw-r--r-- 1 root root  319 2月  23 19:16 rsyncd.conf.template
-rw-r--r-- 1 root root   15 2月  23 19:15 rsyncd.pass.template

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

[root@manager roles]# ansible-playbook -i hosts -t rsync site.yml 

PLAY [all] ******************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [172.26.73.200]
[WARNING]: Could not match supplied host pattern, ignoring: backup


PLAY [backup] ***************************************************************************************************************************************************************
skipping: no hosts matched
[WARNING]: Could not match supplied host pattern, ignoring: nfs


PLAY [nfs] ******************************************************************************************************************************************************************
skipping: no hosts matched

PLAY [nfs] ******************************************************************************************************************************************************************
skipping: no hosts matched
[WARNING]: Could not match supplied host pattern, ignoring: web


PLAY [web] ******************************************************************************************************************************************************************
skipping: no hosts matched

PLAY RECAP ******************************************************************************************************************************************************************
172.26.73.200              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

 

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

[root@manager roles]# tree /etc/ansible/roles/
/etc/ansible/roles/
├── group_vars
│   └── all
├── hosts
├── nfs
│   ├── files
│   │   └── exports.template
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── site.yml

 

2.定义roles主机清单

[root@manager roles]# vim /etc/ansible/roles/hosts 
[nfs]
172.26.73.197

 

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

[root@manager roles]# cat site.yml 
---
- hosts: nfs
  roles:
    - nfs

4.查看 nfs 角色的tasks任务

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

- name: Configure NFS Server
  template: src=./files/exports.template dest=/etc/exports
  notify: Restart NFS Server

- name: Create Directory
  file: path={{ nfs_dir }} state=directory owner=www group=www recurse=yes mode=755

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

5.查看nfs角色的 handlers

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

- name: Configure NFS Server
  template: src=./files/exports.template dest=/etc/exports
  notify: Restart NFS Server

- name: Create Directory
  file: path={{ nfs_dir }} state=directory owner=www group=www recurse=yes mode=755

- name: Start NFS Server
  service: name=nfs-server state=started enabled=yes 
[root@manager roles]# cat /etc/ansible/roles/nfs/handlers/main.yml 
- name: Restart NFS Server
  service: name=nfs-server state=restarted

6.查看 rsync 角色的 files目录

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

7. nfs对应的变量定义

[root@manager templates]# cat /etc/ansible/roles/group_vars/all
#this nfs vars
nfs_dir: /data2
nfs_ip: 172.26.73.0/24
nfs_id: 666
#this web vars
httpd_user: www
httpd_port: 80

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

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

PLAY [all] ******************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [172.26.73.200]
fatal: [172.26.73.197]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.26.73.197 port 22: Connection timed out", "unreachable": true}
[WARNING]: Could not match supplied host pattern, ignoring: backup


PLAY [backup] ***************************************************************************************************************************************************************
skipping: no hosts matched

PLAY [nfs] ******************************************************************************************************************************************************************

PLAY [nfs] ******************************************************************************************************************************************************************
[WARNING]: Could not match supplied host pattern, ignoring: web


PLAY [web] ******************************************************************************************************************************************************************
skipping: no hosts matched

PLAY RECAP ******************************************************************************************************************************************************************
172.26.73.197              : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0   
172.26.73.200              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

 

 

https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx

https://github.com/ansible/ansible-examples

http://www.ywnds.com/?p=6218

 

作业:

  1.使用 roles完成如下: vides == 30

    base

    httpd  [2]

    nfs

    rsync

  2.验证的标准

    1.web上能正常上传数据到nfs存储

    2.web和nfs的配置文件,脚本,定时任务等,定时备份到backup服务器

 

rolus 找文件,用copy模块就会到 file文件夹中找,用template模块就会到 template文件夹中找文件。

 

yum_repostitory

yum

copy  仅拷贝文件 

template  解析拷贝过去的配置文件中的变量

file

service

group

user

unarchive

shell

command

mount

debug

cron

 

ansible-playbook

  变量

    主机和主机组

    定义在playbook中

    定义在一个文件中,使用var_files

    命令行直接传入变量

  变量注册  register

  忽略错误  ignore_errors

  条件判断  when

  循环语句  with_items

  文件复用  include include_task  roles

  文件监控  notify handlers

  文件标签  tags

 

posted on 2020-05-10 22:31  Sunjingjing  阅读(182)  评论(0)    收藏  举报