linux学习

Ansible Roles

基本概念

Roles介绍

Ansible从1.2版本开始支持Roles。Roles是管理Ansible文件的一种规范(目录结构),可以更加高效地、层次性的组织playbooks,通常角色存放在/etc/ansible/roles/目录下,也可定义其他目录。

Roles分别将变量、文件、任务、模板以及处理器放在单独的目录中,再把一些固定的值,如用户名、软件包、服务等,用变量来表示。执行Ansible时按照标准的规范,自动到特定的目录和文件中读取数据,适合比较复杂的场景,可实现playbook重用。

Roles规范的目录结构

例如创建名称为user.example的Role,目录名user.example就是角色名,至少要有一个tasks任务,其他目录可选择,其标准的目录结构如下所示:

image001

Roles应用

创建role

使用ansible-galaxy命令可以创建、管理自己的roles。

1、 创建角色目录

[root@pubserver ansible]# mkdir roles
[root@pubserver ansible]# ansible-galaxy init roles/motd
- roles/motd was created successfully

2、 创建名为motd的角色

[root@pubserver ansible]# yum -y install tree
[root@pubserver ansible]# ls roles/
motd

3、查看生成的角色目录

[root@pubserver ansible]# tree roles/motd/
roles/motd/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files

修改role

将不同的内容分别写到对应目录的main.yml中,代码示意如下:

1、创建motd模板文件

[root@pubserver ansible]# vim roles/motd/templates/motd
Hostname: {{ansible_hostname}}
Date: {{ansible_date_time.date}}
Contact to: {{admin}}

2、创建变量

[root@pubserver ansible]# vim roles/motd/vars/main.yml 
---
# vars file for roles/motd
admin: lzl@tedu.cn

3、创建任务

[root@pubserver ansible]# vim roles/motd/tasks/main.yml 
---
- name: modify motd
  template:
    src: motd
    dest: /etc/motd

在Playbook中调用Role

1、声明角色存放的位置

在ansible.cfg设置roles_path=路径,代码示意如下:

[root@pubserver ansible]# vim ansible.cfg 
[defaults]
host_key_checking = false
inventory = inventory
roles_path = roles

2、创建playbook,调用motd角色

编写playbook文件,通过roles关键词调用role,代码示意如下:

[root@pubserver ansible]# vim role_motd.yml
---
- name: modify motd with role
  hosts: webservers
  roles:
    - motd

3、执行playbook

[root@pubserver ansible]# ansible-playbook role_motd.yml 

PLAY [modify motd with role] ***********************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [web1]
ok: [web2]

TASK [motd : modify motd] **************************************************************************************************************************
changed: [web1]
changed: [web2]

PLAY RECAP *****************************************************************************************************************************************
web1                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web2                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

留言

您的邮箱地址不会被公开。 必填项已用 * 标注