ansible-role
一、为什么用role
把单个的大剧本,拆分为小剧本,便于维护,修改、使用
完成解耦、结构更清晰、调试更方便
如果是小部署, 还是剧本更方便,大型项目,必须通过role管理
在实际的工作当中,一个完整的项目实际上是很多功能体的组合,如果将所有的功能写在一个playbook中会存在如代码耦合程度高、playbook长而维护成本大、灵活性低等一系列的问题。
使用roles能巧妙的解决这一系列的问题。
roles是ansible1.2版本后加入的新功能,适合于大项目playbook的编排架构。
二、先明确,创建好role的规范目录
1.定义好role存放路径
grep '^role' /etc/ansible/ansible.cfg
roles_path = /etc/ansible/roles
2. 创建role的固定目录
site.yml
nfs_servers.yml
rsync_servers.yml
roles/
nfs_servers/
tasks/
handlers/
files/
templates/
vars/
rsync_servers/
tasks/
handlers/
files/
templates/
vars/
3. 创建如上的目录结构
mkdir -p /etc/ansible/roles
touch /etc/ansible/{site.yml,nfs_servers.yml,rsync_servers.yml}
4. 创建关于rsync_servers的目录
mkdir -p /etc/ansible/roles/rsync_servers/{tasks,handlers,files,templates,vars}
5.检查创建好的目录结构
[root@master-61 /etc/ansible]
/etc/ansible/
├── ansible.cfg
├── hosts
├── nfs_servers.yml
├── roles
│ └── rsync_servers
│ ├── files
│ ├── handlers
│ ├── tasks
│ ├── templates
│ └── vars
├── rsync_servers.yml
└── site.yml
三、部署rsyncd服务的role角色
1.准备写装rsync服务的role
2.创建好对应的目录结构
3.写好playbook模式
4.拆开即可
1、写好playbook模式
- hosts: backup
vars:
rsync_id: '666'
rsync_name: 'www'
tasks:
- name: 01_create_group
group:
name: "{{ rsync_name }}"
gid: "{{ rsync_id }}"
- name: 02_create_user
user:
name: "{{ rsync_name }}"
gid: "{{ rsync_id }}"
group: "{{ rsync_name}}"
create_home: no
shell: /sbin/nologin
- name: 03_createUdata
file:
path: "{{ item }}"
state: direcotry
owner: "{{ rsync_name }}"
group: "{{ rsync_name}}"
mode: "755"
loop:
- /data
- /backup
- name: 04_install_rsync
yum:
name: rsync
state: latest
- name: 05_copy_config
copy:
src: "{{ item.src }}"
dest: /etc/
mode: "{{ item.mode }}"
notify:
- restart_rsyncd
loop:
- { src:/script/rsyncd.conf,mode:'644'}
- { src:/script/rsync.passwd,mode:'600'}
- name: 06_start_rsync
systemd:
name: rsyncd
state: started
enabled: yes
handlers:
- name: restart_rsyncd
systemd:
name: rsyncd
state: restarted
2、拆分
1.创建tasks/main.yml
touch /etc/ansible/roles/rsync_servers/tasks/main.yml
往tasks的主体文件中,写入拆分出来的任务列表
只需要复制原本的剧本中的 tasks任务列表,无须携带tasks这个key了,复制粘贴如下的任务列表即可,写入到该 tasks/main.yml
剧本中,依然会调用 变量信息,但是不写在这个tasks/main.yml中了
而是role角色会自动的去vars/main.yml 寻找这个变量 {{rsync_name}}
- name: 01 create_group
group:
name: "{{rsync_name}}"
gid: "{{rsync_id}}"
- name: 02 create_user
user:
name: "{{rsync_name}}"
uid: "{{rsync_id}}"
group: "{{rsync_name}}"
create_home: no
shell: /sbin/nologin
- name: 03 create_data
file:
path: "{{item}}"
state: directory
owner: "{{rsync_name}}"
group: "{{rsync_name}}"
mode: 755
loop:
- /data
- /buckup/
- name: 04 install_rsync
yum:
name: rsync
state: latest
- name: 05 copy_file
copy:
src: "{{item.src}}"
dest: /etc
mode: "{{item.mode}}"
loop:
- {src: rsyncd.conf,mode: 644}
- {src: rsync.passwd,mode: 600}
notify:
- restart_rsyncd
- name: 06 start_rsyncd
systemd:
name: rsyncd
state: started
enabled: yes
2.创建vars/main.yml
touch /etc/ansible/roles/rsync_servers/vars/main.yml
写入剧本需要用到的变量即可,也是一样,不需要添加 vars: 这个脑袋了
roles判断,只要在vars/main.yml就识别这是一个变量yml文件
写入如下信息,无须缩进
rsync_name: www
rsync_id: 666
3.files文件编写
找到你原本的配置文件所在地儿,复制到roles的files目录下即可
cp /tmp/rsync* /etc/ansible/roles/rsync_servers/files/
ls /etc/ansible/roles/rsync_servers/files/
rsyncd.conf rsync.passwd
cat rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 800
ignore errors
read only = false
list = false
auth users = rsync
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chunjueH about rsync
path = /backup
[data]
comment = this is secord backup dir,to website data..
path = /data
cat rsync.passwd
rsync:rsync
4.创建handlers/main.yml
touch /etc/ansible/roles/rsync_servers/handlers/main.yml
- name: restart_rsyncd
systemd:
name: rsyncd
state: restarted
5.安装rsync的role创建好了,创建启动文件即可
vim /etc/ansible/rsync_server.yml
- hosts: test
roles:
- rsync_servers
6.正式运行该rsync角色
ansible-playbook rsync_servers.yml
template模块
专门用于动态替换配置文件中的值,需要学习jinja2这个模板语言,这里学习它的 创建,使用规则;以及变量替换功能;实现配置文件的变量替换
一个纯普通的文本文件,是没法识别变量的
rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_bakcup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chaoge rsync backup!
path = /backup
[data]
comment = yuchaoit.cn rsync!
path = /data
使用template模板替换配置文件的思路
第一件事,改造配置文件为 j2类型
1.创建配置文件,但是后缀必须是 j2格式的
rsyncd.j2
该j2文件写入配置
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = {{ rsync_auth_user }}
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chaoge rsync backup!
path = /backup
[data]
comment = yuchaoit.cn rsync!
path = /data
第二件事,修改vars变量文件,去替换j2文件中的变量值
只需要在vars/main.yml中写入变量即可
rsync_auth_user: "rsync_backup"
第三件事,修改tasks任务yaml文件
还得修改tasks任务yaml文件,指定配置文件路径,为j2模板形式
以部署sshd服务为演示(role角色)
1、先创建部署sshd的tasks任务文件
2、写入剧本语法
[root@master-61 /etc/ansible/roles/sshd_server]
- name: 01_copy_sshd
template:
src: sshd_config.j2
dest: /etc/ssh/sshd_config
mode: '600'
backup: yes
notify:
- restart sshd
- name: start sshd service
systemd:
name: sshd
state: started
enabled: yes
3.创建template信息
3.1、准备好 sshd_config的配置文件
cp /etc/ssh/sshd_config /etc/ansible/roles/sshd_server/templates/sshd_config.j2
3.2、修改这个sshd_config.j2文件,修改需要用变量替换的参数
修改端口
禁止公钥登录
Port {{ sshd_port }}
PubkeyAuthentication {{ pubkey_yes_no }}
4.创建变量文件,写入这个对应的变量值
vim vars/main.yml
sshd_port: "2999"
pubkey_yes_no: "no"
5.创建handlers文件,用于重启sshd
vim handlers/main.yml
- name: restart sshd
systemd:
name: sshd
state: restarted
6.检查当前服务的roles目录信息
[root@master-61 /etc/ansible/roles/sshd_server]
.
├── files
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ └── sshd_config.j2
└── vars
└── main.yml
5 directories, 4 files
7.创建启动文件
必须和roles同级,roles角色定义的工作目录名,必须和roles/文件夹名字对应的上
[root@master-61 /etc/ansible]
- hosts: backup
roles:
- sshd_server
8.测试剧本运行
[root@master-61 /etc/ansible/roles/sshd_server]
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性