1.include文件包含
应用场景:
1个ansible剧本内容过多,涉及到多个play(- host:web),可读性变弱,不方便调试.
于是人们想出把单个大的剧本拆分为多个,小的剧本.
多个小的剧本可以通过include功能合并使用.
在我们书写剧本的时候,会涉及到多个步骤,还会涉及到服务端和客户端.
发现剧本越来越大,不容易进行分析与阅读.
把剧本拆分开,分成2个文件服务端,客户端.
这时候可以通过include_tasks的功能把多个剧本文件合并在一起,让剧本变成多个方便阅读与维护.
include_tasks
以之前安装的nfs为例:服务端和客户端都写在同一个yaml文件里,如果需要进行分离


nfs分离
# 分离服务端
mkdir /ansible/nfs
vim /ansible/nfs/nfs_server.yml
- name: 01 . 部署nfs-utils,rpcbind
yum:
name: nfs-utils,rpcbind
state: present
tags:
- 01.install
ignore_errors: True
- name: 02 . 修改配置文件
lineinfile:
path: /etc/exports
line: "/backup-nfs 172.16.1.0/24(rw,all_squash)"
create: true
tags:
- 02.conf
- name: 03 . 创建共享目录并改所有者
file:
path: /backup-nfs
owner: ec2-user
group: ec2-user
state: directory
tags:
- 03.dir
- name: 04. 启动服务rpcbind,nfs(注意顺序)
systemd:
name: "{{ item }}"
enabled: yes
state: started
loop:
- rpcbind
- nfs
tags:
- 04.start_srv
# 分离客户端,空格可处理,也可以不用处理
vim /ansible/nfs/nfs_client.yml
- name: 01 . 部署nfs-utils
yum:
name: nfs-utils
state: present
- name: 02 . 挂载nfs
mount:
src: 172.16.1.41:/backup-nfs
path: /ans-upload
fstype: nfs
state: mounted
# include主执行文件配置:
# cat include-nfs.yml
- hosts: ywmonitor
tasks:
- include_tasks: /home/ec2-user/other/nfs/nfs_server.yml
#nfs客户端部署
- hosts: www
tasks:
- include_tasks: /home/ec2-user/other/nfs/nfs_client.yml
# handler:
2.roles
通过使用include_tasks功能,大型剧本,缩小体积,变的更加模块化.
我们发现新的问题,handlers,变量文件,发送配置文件(可能是j2文件)存放比较 混乱 .
于是人们发明了一套规范,这个规范是一套剧本目录结构的要求与标准,让我们书写剧本的时候,把剧本的内容和需要的文件,按照目录要求,分门别类存储.
这套规则一般叫roles规则,roles的本质就是规定了1套目录结构,用于书写剧本的.
官网:https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_reuse_roles.html

以nfs为例进行拆分
# 第一步新建目录(没有需要放的目录可以不用新建,本次都建立)
# tasks 核心目录
mkdir -p roles/nfs/nfs-server/{file,handlers,tasks,templates}
cd roles/nfs/
mkdir group_vars/all -p
touch top.yml hosts
# hosts我直接拷贝
cp /etc/ansible/hosts .
cat hosts
[nfs-server]
172.31.0.1
$ tree roles/
roles/
└── nfs
├── group_vars # 可以建成只有nfs使用的vars/main.yml
│ └── all
│ └── main.yml
├── hosts
├── nfs-server
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ └── templates
│ └── exports.j2
└── top.yaml
8 directories, 6 files
# 第二步:拆分
1.将tasks里需要替换成变量的全部替换成变量
2.templates按规定配置好,放到对应目录
3.添加变量group_vars/all/main.yml
4.添加触发器,文件变动后自动重启程序
5.编写控制文件top.yml
# 1.tasks
vim nfs-server/tasks/main.yml
- name: 01 . 部署nfs-utils,rpcbind
yum:
name: nfs-utils,rpcbind
state: present
tags:
- 01.install
ignore_errors: True
- name: 02 . 修改配置文件
template:
src: exports.j2
dest: /etc/exports
create: true
tags:
- 02.conf
- name: 03 . 创建共享目录并改所有者
file:
path: "{{ nfs_dir }}"
owner: "{{ nfs_user }}"
group: "{{ nfs_user }}"
state: directory
tags:
- 03.dir
- name: 04. 启动服务rpcbind,nfs(注意顺序)
systemd:
name: "{{ item }}"
enabled: yes
state: started
loop:
- rpcbind
tags:
- 04.start_srv
# 2.exports.j2
cat nfs-server/templates/exports.j2
# author: {{ author }}
{{ nfs_dir }} 172.31.0.0/24(rw,all_squash)
# 3.group_vars
#cat group_vars/all/main.yml
author: xc
nfs_user: ec2-user
nfs_dir: /backup-nfs
# 4.handlers
# cat nfs-server/handlers/main.yml
- name: restart_nfs
systemd:
name: nfs
enabled: yes
state: restarted
# 编写控制文件roles/nfs/top.yml
cat top.yml
- hosts: ywmonitor
roles:
- role: nfs-server
#- hosts: www
# roles:
# - role: nfs-client
# 执行
ansible-playbook -C top.yml
PLAY [ywmonitor] *************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************
ok: [172.31.0.1]
TASK [nfs-server : 01 . 部署nfs-utils,rpcbind] *******************************************************************************************
ok: [172.31.0.1]
TASK [nfs-server : 02 . 修改配置文件] ****************************************************************************************************
changed: [172.31.0.1]
TASK [nfs-server : 03 . 创建共享目录并改所有者] ******************************************************************************************
changed: [172.31.0.1]
TASK [nfs-server : 04. 启动服务rpcbind,nfs(注意顺序)] ************************************************************************************
changed: [172.31.0.1] => (item=rpcbind)
PLAY RECAP *******************************************************************************************************************************
172.31.0.1 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
roles小结:
roles本质是:目录规范
模块化思想
尽量多使用变量,循环,handlers .
3.valut
加密指定的文件: ansible-vault用于加密敏感信息
hosts文件加密
变量文件加密
#进行加密
ansible-vault encrypt 文件#enable
#进行使用
ansible或ansible-playbook --ask-vault-pass 即可
#彻底解密
ansible-vault decrypt hosts#
# 例如加密hosts,要记住密码
ansible-vault encrypt hosts
New Vault password:
Confirm New Vault password:
Encryption successful
# cat hosts
$ANSIBLE_VAULT;1.1;AES256
37356337353765646562363366386463633836356234346637653162353765323732383934326465
6139653938353162646138653134623262316366323538630a383434326436303634393136626562
36613361363630346538376135383565646165396434653463653133323765623536333832613936
3732356434666163610a666166623331393165616366636437373365333837633465666665636663
6365
# 执行命令
ansible-playbook -C top.yml --ask-vault-pass
Vault password:
# 解密:就恢复成原样了
ansible-vault decrypt hosts
4.Galaxy
官网:https://galaxy.ansible.com/ui/
其它用户上传的,如果网络不好,可以采用下载到本地:Download tarball

浙公网安备 33010602011771号