示例:
---
- hosts: www.example.com
roles:
- role1
- role2
var1:var1
var2:var2 #为 role2 定义了两个变量,任何 defaults 和 vars 中的变量都会被覆
盖
#######################控制执行顺序#######################
有时需要在角色之前或之后执行一些任务,这是就需要使用到关键字:
pre_tasks #角色之前
post_tasks #角色之后
安装系统角色:dnf install -y rhel-system-roles
查看安装好的角色位置:ls -l /usr/share/ansible/roles
查看系统中有哪些角色可以使用: ansible-galaxy list
时间同步角色示例:
(1)创建目录保存变量: mkdir -p group_vars/all
(2)查看帮助获得示例:cat /usr/share/doc/rhel-system-roles/timesync/README.md
(3)时区设置的example:ansible-doc timezone | grep -A 5 “EXAMPLES”
(4)配置清单和配置文件:
(5)编辑主playbook:
---
- name: Time Sync
hosts: groups
roles:
- rhel-system-roles.timesync #使用系统角色
post_tasks:
- name: Set Timezone
timezone: #同步时间
name: "{{ host_timezone }}"
notify: restart crond
handlers:
- name: restart crond
service:
name: crond
state: restarted
...
(6)创建针对主机组的变量目录: mkdir -p group_vars/{group1,group2}
(7)在创建的变量目录中分别编辑时间yml文件: vim group_vars/group1/timezone.yml
host_timezone: Asia/Shanghai
(8)检测和运行:
ansible-playbook --syntax-check configure_time.yml;
ansible-playbook configure_time.yml
角色创建流程,分三个步骤:
1.创建角色目录结构;2.定义角色内容;3.在 playbook 中使用角色。
创建角色框架:
使用命令自动创建:ansible-galaxy init my_role
一般来说,默认情况下,ansible会在当前项目目录中的roles目录中查看角色,前提是roles目录存在。如果不存在就查找当前环境变量中指定的角色。
结构说明:
my_role/ :具体的角色项目名称,比如 nginx、tomcat、php(自由设置)
├── defaults :用于为当前角色设定默认变量,此目录应当包含一个 main.yml 文件
│ └── main.yml :main.yml,类似代码中的主函数,进行统一管理
├── files :用来存放由 copy 模块或 script 模块等模块调用的文件
├── handlers :用于定义此角色中触发条件时执行的动作,此目录应当包含一个
main.yml 文件
│ └── main.yml
├── meta :用于定义此角色的特殊设定及其依赖关系,此目录应当包含一个
main.yml 文件
│ └── main.yml
├── README.md :说明文件
├── tasks :用于定义当前角色的任务列表,此目录应当包含一个 main.yml 文件
│ └── main.yml
├── templates :用来存放 jinjia2 模板,template 模块会自动在此目录中寻找jinjia2 模板文件
├── tests :用于存放测试 role 本身功能的 playbook 和主机定义文件,在开发测试阶段比较常用,此目录应当包含一个 main.yml 文件和自身资源设定 invetory
│ ├── inventory
│ └── test.yml
└── vars :用于定义此角色用到的变量,此目录应当包含一个 main.yml 文件
└── main.yml
角色实验示例: 使用角色配置虚拟主机
(1)创建并初始化:
(2)配置角色myvhost中tasks的playbook:
---
# tasks file for myvhost
- name: Install httpd
yum:
name: httpd
state: latest
- name: Start and Enabled httpd
service:
name: httpd
state: started
enabled: true
- name: Install vhost file
template:
src: vhost.conf.j2
dest: /etc/httpd/conf.d/vhost.conf
owner: root
group: root
mode: 0644
notify:
- restart httpd
(3)编写角色myvhost中的处理程序handlers:
(4)在项目目录role-create中编写html文件:
(5)配置角色myvhost中的模板templates:
(6)在项目目录role-create中编写使用roles的主playbook:
---
- name: use myvhost
hosts: web
pre_tasks: #执行角色之前
- name: pre_tasks message
debug: #输出信息
msg: 'Ensure web server configuration'
roles: #调用编辑好的角色
- myvhost
post_tasks: #执行角色之后
- name: Configure html
copy:
src: files/html/ #html文件源:上面步骤中配置的发布目录路径
dest: "/var/www/vhosts/{{ ansible_hostname }}"
- name: post_tasks message
debug: #打印信息
msg: "Web server is configured."
...
注意:这里使用的主机清单是系统默认的。在/etc/ansible/hosts文件中的指定主机