文章目录
前言
一、ansible角色简介
- Ansible roles 是为了层次化,结构化的组织Playbook
- roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们
- roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高
- 以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个功能切割成片段来执行。
1.1 roles目录结构
files ##存放copy或script等模块调用的函数
tasks ##定义各种task,要有main.yml,其他文件include包含调用
handlers ##定义各种handlers,要有main.yml,其他文件include包含调用
vars ##定义variables,要有main.yml,其他文件include包含调用
templates ##存储由template模块调用的模板文本
meta ##定义当前角色的特殊设定及其依赖关系,要有main.yml的文件
defaults ##要有main.yml的文件,用于设定默认变量
tests ##用于测试角色
1.2 role存放的路径在配置文件ansible.cfg中定义
roles_path = path/roles (默认目录:/etc/ansible/roles)
1.3 创建目录结构
- ansible-galaxy init apache (创建apache目录结构,即角色)
- ansible-galaxy role list ##查看角色列表
1.4 playbook中怎样调用roles
- playbook中使用roles:
---
- hosts: server2
roles:
- role: role1
- role: role2
var1: value1 ##此处变量会覆盖roles中的定义变量
...
1.5 控制任务执行顺序
---
- hosts: server2
roles:
- role: role1 ##角色任务
pre_tasks: ##角色执行前执行的play
- tasks1
tasks: ##普通任务
- tasks2
post_tasks: ##在角色和普通任务执行完毕后执行的play
- tasks3
handlers:
...
1.6 ansible—galaxy命令工具
- Ansible Galaxy 是一个免费共享和下载 Ansible 角色的网站,可以帮助我们更好的定义和学习roles。
- ansible-galaxy命令默认与https://galaxy.ansible.com网站API通信,可以查找、下载各种社区开发的 Ansible 角色
- ansible-galaxy在 Ansible 1.4.2 就已经被包含了
- 在galaxy.ansible.com网站查询roles
1.7 安装选择的角色
#install https://galaxy.ansible.com roles
$ansible-galaxy install geerlingguy.nginx
#install local roles
$ vim install_apache_role.yml
---
- src: file:///mnt/apache.tar.gz
name: apache
$ ansible-galaxy install -r install_apache_role.yml ##主要用的
二、角色使用示例
2.1 下载nginx角色部署到server2
1 ) 指定roles的目录:vim ansible.cfg
2 )下载nginx角色
ansible-galaxy install geerlingguy.nginx
这个安装会放到哪个目录?
2.2 ansible设置HAProxy滚动更新apahce服务器
之前更新都是并行的,在更新时要全部当机,影响客户
实验目的:改成串行,一个个更新(相当于不停机更新,不影响用户)
1)配置好haprxy,关闭http,不然端口会冲突,再安装socat工具。
2)配置好apache角色,使用ansible-galaxy init apche
命令下载角色目录的结构,然后补充内容。
3)写playbook2.yml文件
4)测试
配置角色:
playbook2.yml文件:
测试,一个个更新:
2.3 ansible统一设置时间源
- 安装roles源工具
修改ip地址
重新设置roles路径!
2.4 ansible批量设置修改selinux
实验目的:
修改server3和server4 selinux安全上下文,其次其中主机的selinux状态(enforceing or disabled)改变,就重启该主机,不变则不重启!
- 这里server3的selinux状态为disabled
- server4的selinux状态为enforceing
1)/usr/share/doc/rhel-system-roles/selinux下找到 example-selinux-playbook.yml模板文件cp到/home/haojin/ansible目录下,然后修改成下面这样:
[haojin@server1 ansible]$ cat example-selinux-playbook.yml
---
- hosts: pord
vars:
selinux_policy: targeted
selinux_state: enforcing
selinux_booleans:
- { name: 'samba_enable_home_dirs', state: 'on' }
selinux_fcontexts:
- { target: '/samba(/.*)?', setype: 'samba_share_t', ftype: 'd' }
selinux_restore_dirs:
- /samba
tasks:
- name: Creates directory
file:
path: /samba
state: directory
- name: execute the role and catch errors
block:
- include_role:
name: rhel-system-roles.selinux
rescue:
# Fail if failed for a different reason than selinux_reboot_required.
- name: handle errors
fail:
msg: "role failed"
when: not selinux_reboot_required
- name: restart managed host
shell: sleep 2 && shutdown -r now "Ansible updates triggered"
async: 1
poll: 0
ignore_errors: true
- name: wait for managed host to come back
wait_for_connection:
delay: 10
timeout: 300
- name: reapply the role
include_role:
name: rhel-system-roles.selinux
2) ansible-playbook 一下
安全上下文修改成功