ansible批量管理剧本概念
可以将多个批量操作模块功能整合
简化运维工作复杂度
ansible剧本编写规范
ymal 语法格式 = python 语法格式
缩进特点: 两个空格表示一个缩进关系
不同的级别都要缩进。
如:主题01
副标题01
正文
副标题02
正文
主题02
副标题01
#要有一个tasks要进行缩进
(2)冒号用法
冒号后面需要有空格
冒号结尾不需要有空格
主机信息: 172.16.1.41 --- key - value (键值写法)
做什么事:
01备份数据
02创建目录
(3)列表用法:
利用短横线加空格构建列表清单
家务活列表信息:
- 扫地
- 擦桌子
- 洗床单
ansible剧本内容组成:
演员信息-主机信息
hosts: 管理主机信息
动作信息-任务信息
tasks:
copy: xxx
file: xxx
ansible剧本语法检查方法
[root@m01 ansible_playbook]# cat test01.yaml
- hosts: 172.16.1.41
tasks:
- file: path=/oldboy/ state=directory
- copy: content=oldboy62 dest=/oldboy/oldboy.txt
命令
ansible-playbook --syntax-check inotify_server.yaml
ansible-playbook -i /root/hosts test.yaml #指定其他路径的主机配置清单。
ansible剧本执行过程:
如果系统安装了cowsay运行的时候就会出现小牛的形状。
解决办法:进入/etc/ansible/vim ansible.cfg这个文件中,
# don't like cows? that's unfortunate.
# set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1
nocows = 1 #执行的过程中,不会出现小牛的状况。
[root@m01 ansible_playbook]# ansible-playbook -C test01.yaml --- 剧本模拟执行
PLAY [172.16.1.41] ******************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************
ok: [172.16.1.41]
TASK [file] *************************************************************************************************************************
changed: [172.16.1.41]
TASK [copy] *************************************************************************************************************************
changed: [172.16.1.41]
PLAY RECAP **************************************************************************************************************************
172.16.1.41 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@m01 ansible_playbook]# ansible-playbook test01.yaml --- 剧本正式执行
PLAY [172.16.1.41] ******************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************
ok: [172.16.1.41]
TASK [file] *************************************************************************************************************************
changed: [172.16.1.41]
TASK [copy] *************************************************************************************************************************
changed: [172.16.1.41]
PLAY RECAP **************************************************************************************************************************
172.16.1.41 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
题目练习:
- 在172.16.1.41主机上操作:
1) 将定时任务服务停止
2) 创建一个/etc/目录软连接 在/opt目录中生成
3) 将本地/etc/hosts文件分发给41主机 保存到/tmp目录中
- hosts: 172.16.1.41
tasks:
- service: name=crond state=stopped
- file: src=/etc/ path=/opt/etc_soft_link state=link
- shell: ln -s /etc/ /opt/etc_soft_link
- copy: src=/etc/hosts dest=/tmp/
- 在172.16.1.31主机上操作:
1) 将防火墙服务开机自动运行
2) 将主机上安装keepalived软件
- hosts: 172.16.1.31
tasks:
- service: name=firewalld enabled=yes
- yum: name=keepalived state=installed
注意事项:
01. 剧本语法格式 ansible脚本不识别tab空格
02. 模块书写规范
03. 剧本逻辑顺序
04. 尽量少用万能模块 无法重复执行剧本
shell模块没法判断事情是否干过,其他模块会判断。
ansible剧本实现服务一键化部署
rsync服务一键化部署:
第一个历程: 按照模块方式,完成服务每个步骤部署
服务端配置:
01. 安装软件程序
ansible rsync -m yum -a "name=rsync state=installed"
02. 编写配置文件
在管理端准备好服务配置文件
ansible rsync_server -m copy -a "src=/etc/ansible/conf_file/rsyncd.conf dest=/etc/"
03. 创建虚拟用户
ansible rsync_server -m user -a "name=rsync create_home=no shell=/sbin/nologin"
04. 创建密码文件 (授权600)
ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"
05. 创建备份目录 (授权 属主 属组)
ansible rsync_server -m file -a "path=/backup state=directory owner=rsync group=rsync"
06. 启动程序服务
ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"
客户端配置:
01. 创建密钥文件 (授权600)
ansible rsync_client -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
02. 批量测试传输文件
ansible rsync_client -m shell -a "rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password"
rsync服务一键化还原:
- hosts: rsync_server
tasks:
- name: 01:delete conf file
file: path=/etc/rsyncd.conf state=absent
- name: 02:delete rsync user
user: name=rsync state=absent
- name: 03:delete password file
file: path=/etc/rsync.password state=absent
- name: 04:delete backup dir
file: path=/backup/ state=absent
- name: 05:boot rsync server
service: name=rsyncd state=stopped enabled=no
客户端一键还原
- hosts: rsync_client
tasks:
- name: 01:delete password file
file: path=/etc/rsync.password state=absent
nfs服务一键化部署:
nfs服务一键化部署:(解析)
第一个历程: 按照模块方式,完成服务每个步骤部署
服务端配置:
01. 安装部署软件程序: rpcbind nfs-utile
ansible nfs_server -m yum -a "name=rpcbind state=installed"
ansible nfs_server -m yum -a "name=nfs-utile state=installed"
02. 编写配置文件:
/etc/ansible-playbook/nfs.conf
ansible nfs_server -m copy -a "src=/etc/ansible/ansible_playbook/nfs.conf dest=/etc/exports"
03. 创建共享目录:
ansible nfs_server -m file -a "path=/data/ state=directory owner=nfsnobody group=nfsnobody"
04. 启动程序服务:
ansible nfs_server -m service -a "name=rpcbind state=started enabled=yes"
ansible nfs_server -m service -a "name=nfs state=started enabled=yes"
客户端配置:(分析)
01. 安装部署软件
ansible nfs_client -m yum -a "name=nfs-utile state=installed"
02. 挂载共享目录
ansible nfs_client -m mount -a "src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted"
编写NFS服务部署剧本
- hosts: nfs_server
tasks:
- name: 01:install nfs rpcbind
yum:
name:
- rpcbind
- nfs-utils
state: installed //saltstack语言
- name: 02:copy conf file
copy: src=/etc/ansible/ansible_playbook/nfs.conf dest=/etc/exports
- name: 03:create data dir
file: path=/data/ state=directory owner=nfsnobody group=nfsnobody
- name: 04:boot server rpcbind
service: name=rpcbind state=started enabled=yes
- name: 04:boot server nfs
service: name=nfs state=restarted enabled=yes
- hosts: nfs_client
tasks:
- name: 01:install nfs
yum: name=nfs-utils state=installed
- name: 02:mount data dir
mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted
nfs恢复环境剧本
- hosts: nfs_server
tasks:
- name: 01:install nfs rpcbind
yum:
name:
- rpcbind
- nfs-utils
state: removed
- name: 02:copy conf file
shell: echo "" >/etc/exports
- name: 03:create data dir
file: path=/data/ state=absent
- hosts: nfs_client
tasks:
- name: 01:install nfs
yum: name=nfs-utile state=removed
- name: 02:mount data dir
mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=unmounted(anbsent自动挂载取消)
04. ansible剧本编写扩展功能
- a 剧本变量编写功能
- b 剧本信息通知功能
- c 剧本信息判断功能
- d 剧本信息循环功能
- e 剧本编写忽略错误
- f 剧本标签设置功能
- g 剧本忽略采集功能
- h 剧本信息触发功能
剧本变量编写功能
设置变量方法一: 在剧本中设置变量 命令变量>剧本变量>主机清单变量
- hosts: 172.16.1.41
vars:
dir: /etc
file: rsyncd.conf
tasks:
- name: copy file
copy: src={{ dir }}/{{ file }} dest={{ dir }}/
设置变量方法二: 在主机清单中设置变量 主机清单变量最不优先
172.16.1.41 ansible_user=root ansible_password=123456
172.16.1.31
[rsync_server:vars] --- 给指定主机组统一设置变量
dir=/etc
file=rsyncd.conf
设置变量方法三: 在剧本执行命令参数中设置变量 命令行最优先
ansible-playbook -e dir=/etc -e file=rsyncd.conf test_变量功能.yaml
剧本信息通知功能(会将执行的结果输出到屏幕)
- hosts: 172.16.1.41
tasks:
- name: boot server
service: name=rsyncd state=started
- name: check server boot
shell: netstat -lntup|grep 873
register: oldboy
- debug: msg={{ oldboy.stdout_lines }} debug: msg{{ }}