Ansible三 角色
Posted nsthink-666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible三 角色相关的知识,希望对你有一定的参考价值。
第一章 Ansible 角色介绍
1.为什么需要使用角色
1.不太灵活,臃肿
2.全部写在一起,修改不方便
3.配置文件随便放,不标准
2.角色解决了什么问题
1.把剧本 拆分 拆分 拆分
2.解耦,结构更清晰,调试更方便
3.编写角色的最佳实践
1.初级阶段,不要直接写角色,先写好剧本,然后再拆分
2.一开始不要想一步到位,不用拆的很细,尤其是变量
第二章 角色目录规划
0.官方说明
https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html
1.目录说明
注意!这里的目录结构必须按照官方定义的要求来做!不是自己随便乱起!
tasks #存放主任务执行文件
handlers #存放handlers文件
files #存放需要发送的文件或压缩包
templates #存放jinja模版配置文件
vars #存放变量文件
第三章 实战演练-编写rsync角色
3.0 编写思路
1.先写好剧本
2.创建角色目录
3.拷贝需要发送的文件到指定目录
4.拆分剧本
3.1 编写剧本
- hosts: backup
vars:
user_id: ‘666‘
rsync_user: ‘www‘
tasks:
#1.创建www组和www用户
- name: create_group
group:
name: "{{ rsync_user }}"
gid: "{{ user_id }}"
#2.创建www用户
- name: create_user
user:
name: "{{ rsync_user }}"
uid: "{{ user_id }}"
group: "{{ rsync_user }}"
create_home: no
shell: /sbin/nologin
#3.创建数据目录并更改授权
- name: create_data
file:
path: "{{ item }}"
state: directory
owner: "{{ rsync_user }}"
group: "{{ rsync_user }}"
mode: ‘755‘
loop:
- /data/
- /backup/
#4.安装rsync软件
- name: install_rsync
yum:
name: rsync
state: latest
#5.复制配置文件和密码文件
- name: copy pwd&conf
copy:
src: "{{ item.src }}"
dest: /etc/
mode: "{{ item.mode }}"
notify:
- restart rsyncd
loop:
- { src: /root/script/rsync/rsyncd.conf, mode: ‘644‘}
- { src: /root/script/rsync/rsync.passwd, mode: ‘600‘}
#6.启动服务
- name: start
systemd:
name: rsyncd
state: started
enabled: yes
#7.重启服务
handlers:
- name: restart rsyncd
systemd:
name: rsyncd
state: restarted
3.2 创建角色目录
[root@m01 ~]# cd /etc/ansible/roles/
[root@m01 /etc/ansible/roles]# mkdir rsync_server/{tasks,handlers,files,templates,vars} -p
[root@m01 /etc/ansible/roles]# tree rsync_server/
rsync_server/
├── files
├── handlers
├── tasks
├── templates
└── vars
3.3 把剧本复制到tasks目录
├── tasks
│ └── main.yaml
3.4 把配置文件复制到file目录
cp script/rsync/* /etc/ansible/roles/rsync_server/files/
3.5 拆分handlers
[root@m01 ~]# cat /etc/ansible/roles/rsync_server/handlers/main.yaml
- name: restart rsyncd
systemd:
name: rsyncd
state: restarted
3.6 拆分vars
[root@m01 ~]# cat /etc/ansible/roles/rsync_server/vars/main.yaml
user_id: ‘666‘
rsync_user: ‘www‘
3.7 精简tasks任务文件
[root@m01 ~]# cat /etc/ansible/roles/rsync_server/tasks/main.yaml
#1.创建www组和www用户
- name: create_group
group:
name: "{{ rsync_user }}"
gid: "{{ user_id }}"
#2.创建www用户
- name: create_user
user:
name: "{{ rsync_user }}"
uid: "{{ user_id }}"
group: "{{ rsync_user }}"
create_home: no
shell: /sbin/nologin
#3.创建数据目录并更改授权
- name: create_data
file:
path: "{{ item }}"
state: directory
owner: "{{ rsync_user }}"
group: "{{ rsync_user }}"
mode: ‘755‘
loop:
- /data/
- /backup/
#4.安装rsync软件
- name: install_rsync
yum:
name: rsync
state: latest
#5.复制配置文件和密码文件
- name: copy pwd&conf
copy:
src: "{{ item.src }}"
dest: /etc/
mode: "{{ item.mode }}"
notify:
- restart rsyncd
loop:
- { src: rsyncd.conf, mode: ‘644‘}
- { src: rsync.passwd, mode: ‘600‘}
#6.启动服务
- name: start
systemd:
name: rsyncd
state: started
enabled: yes
3.8 编写调用文件
[root@m01 ~]# cat /etc/ansible/rsync_server.yaml
- hosts: rsync_server
roles:
- rsync_server
3.9 编写主机清单
[root@m01 ~]# cat /etc/ansible/hosts
[rsync_server]
172.16.1.41
3.10 调试运行
cd /etc/ansible/
ansible-playbook -C rsync_server.yaml
ansible-playbook rsync_server.yaml
第四章 实战演练-编写sshd角色
4.1 编写思路
1.先拷贝配置文件到template目录下并重命名为j2
2.编写tasks文件
3.调试运行
4.2 创建角色目录
cd /etc/ansible/roles/
mkdir sshd/{tasks,handlers,files,templates,vars} -p
4.3 编写jinja模版文件
jinja模板注意:
1.模块必须是template
2.模版文件必须以.j2结尾
3.模版文件必须放在template目录下
关键配置:
#复制sshd配置文件到template文件夹下
Port {{ ssh_port }}
ListenAddress {{ ansible_facts.eth1.ipv4.address }}
4.4 编写变量文件
[root@m01 /etc/ansible/roles/sshd]# cat vars/main.yaml
ssh_port: ‘22‘
4.5 编写handlers文件
[root@m01 /etc/ansible/roles/sshd]# cat handlers/main.yaml
- name: restart sshd
systemd:
name: sshd
state: restarted
4.6 编写主任务文件
[root@m01 /etc/ansible/roles/sshd]# cat tasks/main.yaml
#1.复制配置文件和密码文件
- name: 01_copy_sshd
template:
src: sshd_config.j2
dest: /etc/ssh/sshd_config
mode: ‘600‘
backup: yes
notify:
- restart sshd
#2.启动服务
- name: start
systemd:
name: sshd
state: started
enabled: yes
4.7 查看最终的目录
[root@m01 /etc/ansible/roles]# tree sshd/
sshd/
├── files
├── handlers
│ └── main.yaml
├── tasks
│ └── main.yaml
├── templates
│ └── sshd_config.j2
└── vars
└── main.yaml
4.8.编写主调用文件
[root@m01 /etc/ansible/roles]# cat ../sshd.yaml
- hosts: ssh
roles:
- sshd
第五章 实战演练-编写nfs角色
5.1 编写思路
1.先拷贝配置文件到template目录下并重命名为j2
2.编写handlers
3.编写tasks
5.2 创建角色目录
cd /etc/ansible/roles/
mkdir nfs_server/{tasks,handlers,files,templates,vars} -p
5.3 编写jinja模版文件
[root@m01 ~]# cat /etc/ansible/roles/nfs_server/templates/exports.j2
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
5.4 编写handlers文件
[root@m01 ~]# cat /etc/ansible/roles/nfs_server/handlers/main.yaml
- name: restart nfs
systemd:
name: nfs
state: restarted
5.5 编写主任务文件
[root@m01 ~]# cat /etc/ansible/roles/nfs_server/tasks/main.yaml
#1.创建www组和www用户
- name: create_group
group:
name: www
gid: 666
#2.创建www用户
- name: create_user
user:
name: www
uid: 666
group: www
create_home: no
shell: /sbin/nologin
#3.创建数据目录并更改授权
- name: create_data
file:
path: "{{ item }}"
state: directory
owner: www
group: www
mode: ‘755‘
loop:
- /data/
- /backup/
#4.安装nfs软件
- name: install_nfs
yum:
name: nfs-utils
state: latest
#5.复制配置文件和密码文件
- name: copy_exports
template:
src: exports.j2
dest: /etc/exports
notify:
- restart nfs
#6.启动服务
- name: start
systemd:
name: nfs
state: started
enabled: yes
5.6 编写调用文件
[root@m01 ~]# cat /etc/ansible/nfs_server.yaml
- hosts: nfs
roles:
- nfs_server
第六章 实战演练-编写lsyncd服务
第七章 拆分init角色
7.0 编写思路
1.先分析以前写过所有的角色里重复的操作
2.把重复的操作内容单独写一个角色,例如:init
3.先备份一份以前写好的角色文件
4.精简以前的角色文件,删除重复的内容
5.调试,运行,检查
7.1 找出重复的操作
1.创建www组和www用户
2.创建www用户
3.创建数据目录并更改授权
4.安装rsync软件
4.安装nfs软件
7.2 创建角色目录
cd /etc/ansible/roles/
mkdir init/{tasks,handlers,files,templates,vars} -p
7.3 编写jinja模版文件
7.4 编写handlers文件
7.5 编写主任务文件
[root@m01 /etc/ansible]# cat /etc/ansible/roles/init/tasks/main.yaml
#1.创建www组和www用户
- name: create_group
group:
name: www
gid: 666
#2.创建www用户
- name: create_user
user:
name: www
uid: 666
group: www
create_home: no
shell: /sbin/nologin
#3.创建数据目录并更改授权
- name: create_data
file:
path: "{{ item }}"
state: directory
owner: www
group: www
mode: ‘755‘
loop:
- /data/
- /backup/
#4.安装nfs软件
- name: install_soft
yum:
name: "{{ item }}"
state: latest
loop:
- rsync
- nfs-utils
第八章 拆分后的各个服务角色文件
8.1 拆分后的rsync角色
[root@m01 ~]# cat /etc/ansible/roles/rsync_server/tasks/main.yaml
#1.复制配置文件和密码文件
- name: copy pwd&conf
copy:
src: "{{ item.src }}"
dest: /etc/
mode: "{{ item.mode }}"
notify:
- restart rsyncd
loop:
- { src: rsyncd.conf, mode: ‘644‘}
- { src: rsync.passwd, mode: ‘600‘}
#2.启动服务
- name: start
systemd:
name: rsyncd
state: started
enabled: yes
8.2 拆分后的nfs角色
[root@m01 ~]# cat /etc/ansible/roles/nfs_server/tasks/main.yaml
#1.复制配置文件和密码文件
- name: copy_exports
template:
src: exports.j2
dest: /etc/exports
notify:
- restart nfs
#2.启动服务
- name: start
systemd:
name: nfs
state: started
enabled: yes
8.3 拆分后的lsyncd角色
8.4 调用文件
rsync
[root@m01 ~]# cat /etc/ansible/rsync_server.yaml
- hosts: rsync_server
roles:
- init
- rsync_server
nfs
[root@m01 ~]# cat /etc/ansible/nfs_server.yaml
- hosts: nfs
roles:
- init
- nfs_server
以上是关于Ansible三 角色的主要内容,如果未能解决你的问题,请参考以下文章