ansible的roles组织方式

Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles。 这样的组织方式使得复用更为简便。每个相对独立的处理动作独立出来,可以适用于更复杂的场景。
一个role 的文件大概包括这些:

  • tasks 文件:主要编写某个独立模块的处理动作
  • handlers 文件:
  • vars 文件: 主要编写某个独立模块的变量
  • meta 文件:主要编写依赖关系,即一个独立模块引用另一个role
  • defaults 文件:默认的变量文件
  • templates 文件: 模板文件
  • files 文件
    注意文件夹下可以有多个后缀名为yml的文件,但一定要有main.yml 文件
检索路径

在不使用绝对路径的情况下,ansible检索role的默认路径有:

  • 执行ansible-playbook命令时所在的当前目录
  • playbook文件所在的目录及playbook文件所在目录的roles目录
  • 当前系统用户下的~/.ansible/roles目录
  • /usr/share/ansible/roles目录
  • ansible.cfg 中roles_path指定的目录,默认值为/etc/ansible/roles目录
示例:
  1. 拷贝管理节点 /home/ubuntu/zartclient 下的 zartcli 和 zartcli.ini 文件至节点主机 /home/centos/zartclient 下
  2. 在上一步的基础之上,拷贝 /home/centos/zartclient/zartcli 至 /usr/bin/zartcli
  3. 拷贝管理节点文件/root/yum.tar.gz至节点主机的/home/centos/download目录
  4. 在节点主机上解压管理节点文件/root/yum.tar.gz至 /temp/data 目录下
  5. 在节点主机上查看解压后指定文件相应字段
    任务执行目录结构如下:
[root@ansible roles_example]# tree
.
├── ansible.cfg
├── hosts
├── roles
│   ├── cat_grep
│   │   └── tasks
│   │       └── main.yml
│   ├── master_copy
│   │   └── tasks
│   │       └── main.yml
│   ├── slave_copy
│   │   ├── defaults
│   │   │   └── main.yml
│   │   └── tasks
│   │       └── main.yml
│   └── unarchive
│       └── tasks
│           └── main.yml
└── role_task.yml

各roles下的tasks文件如下:

[root@ansible roles_example]# cat roles/master_copy/tasks/main.yml
---
- name: is /home/centos/zartclient exists
  stat:
    path: /home/centos/zartclient
  register: result

- name: show result
  debug:
    msg: "{{result}}"

- name: create dest path in remote
  file:
    path: "{{item}}"
    state: directory
  with_items:
    - "/home/centos/zartclient"
  when: not result.stat.exists

- name: copy file to remote
  copy:
    src: "{{item.src}}"
    dest: "{{item.dest}}"
  with_items:
    - { src: "/home/centos/zartclient/zartcli", dest: "/home/centos/zartclient" }
    - { src: "/home/centos/zartclient/zartcli.ini", dest: "/home/centos/zartclient" }

- name: copy zartcli into /usr/bin
  copy:
    src: "{{item.src}}"
    dest: "{{item.dest}}"
  with_items:
    - { src: "/home/centos/zartclient/zartcli", dest: "/usr/bin"}
##################################################################################
[root@ansible roles_example]# cat roles/slave_copy/tasks/main.yml
---
- name: is /home/centos/download exists
  stat:
    path: /home/centos/download
  register: result

- name: show result
  debug:
    msg: "{{result}}"

- name: create /home/centos/download
  file:
    path: "{{item}}"
    state: directory
  with_items:
    - "/home/centos/download"
  when: not result.stat.exists

- name: copy tar_file to remote
  copy:
    src: "{{master_file}}"
    dest: "{{slave_file}}"
#  vars:                        //变量存放至defaults目录,如下所示
#    master_file: /root/yum.tar.gz
#    slave_file: /home/centos/download
**************************************************************************************************
[root@ansible roles_example]# cat roles/slave_copy/defaults/main.yml
---
#files
master_file: /root/yum.tar.gz
slave_file: /home/centos/download
##################################################################################
[root@ansible roles_example]# cat roles/unarchive/tasks/main.yml
---
- name: create /temp/data
  file:
    path: "/temp/data"
    state: directory

- name: untar file
  unarchive:
    src: "{{src_path}}"        //src为管理主机上的压缩文件
    dest: "{{dest_path}}"    //dest为远程目标主机的目录
    remote_src: False       //远程节点不存在要解压的源文件时,则将管理节点文件解压至节点主机
  vars:
    src_path: "/root/yum.tar.gz"
    dest_path: "/temp/data"
##################################################################################
[root@ansible roles_example]# cat roles/cat_grep/tasks/main.yml
---
- name: cat file
  shell: cat /temp/data/epel.repo|grep gpgkey
  register: result
- name: cat
  debug:
    msg: "{{result.stdout}}"

任务执行文件如下:

[root@ansible roles_example]# cat role_task.yml
---
- hosts: all
  user: root
  tasks:
  - include_role:
      name: master_copy
  - include_role:
      name: slave_copy
  - include_role:
      name: unarchive
  - include_role:
      name: cat_grep

任务执行情况如下:

[root@ansible roles_example]# ansible-playbook -i hosts role_task.yml

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

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

TASK [include_role] *********************************************************************************************

TASK [master_copy : is /home/centos/zartclient exists] **********************************************************
ok: [192.168.2.109]

TASK [master_copy : show result] ********************************************************************************
ok: [192.168.2.109] => {
    "msg": {
        "changed": false,
        "failed": false,
        "stat": {
            "exists": false
        }
    }
}

TASK [master_copy : create dest path in remote] *****************************************************************
changed: [192.168.2.109] => (item=/home/centos/zartclient)

TASK [master_copy : copy file to remote] ************************************************************************
changed: [192.168.2.109] => (item={u'dest': u'/home/centos/zartclient', u'src': u'/home/centos/zartclient/zartcli'})
changed: [192.168.2.109] => (item={u'dest': u'/home/centos/zartclient', u'src': u'/home/centos/zartclient/zartcli.ini'})

TASK [master_copy : copy zartcli into /usr/bin] *****************************************************************
changed: [192.168.2.109] => (item={u'dest': u'/usr/bin', u'src': u'/home/centos/zartclient/zartcli'})

TASK [include_role] *********************************************************************************************

TASK [slave_copy : is /home/centos/download exists] *************************************************************
ok: [192.168.2.109]

TASK [slave_copy : show result] *********************************************************************************
ok: [192.168.2.109] => {
    "msg": {
        "changed": false,
        "failed": false,
        "stat": {
            "exists": false
        }
    }
}

TASK [slave_copy : create /home/centos/download] ****************************************************************
changed: [192.168.2.109] => (item=/home/centos/download)

TASK [slave_copy : copy tar_file to remote] *********************************************************************
changed: [192.168.2.109]

TASK [include_role] *********************************************************************************************

TASK [unarchive : create /temp/data] ****************************************************************************
changed: [192.168.2.109]

TASK [unarchive : untar file] ***********************************************************************************
changed: [192.168.2.109]

TASK [include_role] *********************************************************************************************

TASK [cat_grep : cat file] **************************************************************************************
changed: [192.168.2.109]

TASK [cat_grep : cat] *******************************************************************************************
ok: [192.168.2.109] => {
    "msg": "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7"
}

PLAY RECAP ******************************************************************************************************
192.168.2.109              : ok=14   changed=8    unreachable=0    failed=0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值