1 ansible-playbook 任务剧本

1.1 剧本文件概念

(1)playbook可以将多个批量操作模块功能整合,完成一件事情。
(2)简化运维工作复杂度
(3)playbook通过yaml语法识别描述的状态文件,扩展名是yaml

1.2 剧本文件组成部分

(1)剧本的角色(hosts)定义的是主机信息
(2)剧本的任务(tasks)定义的是具体任务信息
(3)一个剧本文件有多个hosts组成,一个hosts可以包含多个tasks任务

1.3 剧本文件优势特点

(1)实现自动化功能更加全面
(2)可以更好的控制逻辑关系
(3)剧本展现命令语法更直观
(4)拥有持久反复执行的特性

1.4 剧本文件编写规范

(1)缩进特点:  两个空格表示一个缩进关系
(2)冒号用法:  冒号后面需要有空格  冒号结尾不需要有空格
主机信息: 172.16.1.41   --- key: value (键值写法)
(3)列表用法:  利用短横线加空格构建列表清单

1.5 剧本执行使用方法

(1)检查剧本语法:ansible-playbook --syntax-check test.yaml
(2)剧本模拟执行:ansible-playbook -C test.yaml
(3)剧本真实运行:ansible-playbook  test.yaml

1.6 剧本编写扩展功能

(1)剧本变量编写功能
(2)剧本信息通知功能
(3)剧本信息判断功能
(4)剧本信息循环功能
(5)剧本编写忽略错误
(6)剧本标签设置功能
(7)剧本忽略采集功能
(8)剧本信息触发功能

1.6.1 剧本变量编写功能

设置变量方法一: 在剧本执行命令参数中设置变量,命令行最优先

[root@m01 ansible_playbook]#ansible-playbook -e dir=/etc -e file=rsyncd.conf test_变量编写.yaml

设置变量方法二: 在剧本中设置变量,剧本变量其次优先

[root@m01 ansible_playbook]#vim test_变量编写.yaml
- hosts: 172.16.1.41
vars:
dir: /etc
file: rsyncd.conf
tasks:
- name: copy file
copy: src={{ dir }}/{{ file }} dest={{ dir }}/
# {{}}调用变量

设置变量方法二: 在主机清单中设置变量,主机清单变量最不优先

[root@m01 ansible_playbook]#vim /etc/ansible/hosts
[sersync_server]
172.16.1.31
[sersync_client]
172.16.1.41
[sersync_server:vars]
dir=/etc
file=rsyncd.conf
# 直接给主机组设置变量,这样主机组内的所有主机都可以调用变量了

1.6.2 剧本信息通知功能

编辑剧本

[root@m01 ansible_playbook]#vim 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 }}
# 将shell中命令执行结果通过register注册给oldboy,oldboy相当于一个变量,{{}}调取oldboy
# debug类似echo,输出信息
# stdout_lines 将输出的信息变得有格式

运行剧本

[root@m01 ansible_playbook]#ansible-playbook test_通知功能.yaml 

PLAY [172.16.1.41] ***********************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.41] TASK [boot server] ***********************************************************************************
ok: [172.16.1.41] TASK [check server boot] *****************************************************************************
changed: [172.16.1.41] TASK [debug] *****************************************************************************************
ok: [172.16.1.41] => {
"msg": [
"tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3708/rsync ",
"tcp6 0 0 :::873 :::* LISTEN 3708/rsync "
]
} PLAY RECAP *******************************************************************************************
172.16.1.41 : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

1.6.3 剧本信息判断功能

nfs服务客户端三台主机
centos7  10.0.0.7、centos6  10.0.0.8、centos7  10.0.0.9
此时在批量启动的时候需要进行判断,因为centos6,centos7启动命令不一样
判断的格式

- hosts: nfs_client
tasks:
- name: boot centos7 nfs
shell: systemctl start nfs
判断: 如果是centos7 ???
- name: boot centos6 nfs
shell: /etc/init.d/nfs start
判断: 如果是centos6 ???

setup模块:收集远程主机信息
语法:

[root@m01 ansible_playbook]#ansible 172.16.1.41 -m setup -a "filter=ansible_hostname"
172.16.1.41 | SUCCESS => {
"ansible_facts": {
"ansible_hostname": "backup",
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
} # filter 过滤 筛选

实现收集子信息的方法

问题: 获取主机信息,以及子信息
方法一:
- hosts: rsync
tasks:
- name: touch file
file: path=/etc/oldboy01.txt state=touch
when: (ansible_eth1.ipv4.address == "172.16.1.41")
方法二:
- hosts: rsync
tasks:
- name: touch file
file: path=/etc/oldboy01.txt state=touch
when: (ansible_eth1["ipv4"]["address"] == "172.16.1.41")

setup模块常用来收集的信息

根据 ip 地址进行判断创建目录

[root@m01 ansible_playbook]#vim test_判断功能.yaml
- hosts: nfs_client
tasks:
- name: create file for 41 host
file: path=/tmp/172.16.1.41 state=directory
when: (ansible_hostname == "backup")
- name: create file for 7 host
file: path=/tmp/172.16.1.7 state=directory
when: (ansible_hostname == "web01")

运行剧本

root@m01 ansible_playbook]#ansible-playbook -C test_判断功能.yaml 

PLAY [nfs_client] ************************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.41]
ok: [172.16.1.7] TASK [create file for 41 host] ***********************************************************************
skipping: [172.16.1.7]
changed: [172.16.1.41] TASK [create file for 7 host] ************************************************************************
skipping: [172.16.1.41]
changed: [172.16.1.7] PLAY RECAP *******************************************************************************************
172.16.1.41 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
172.16.1.7 : ok=2 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

1.6.4 剧本信息循环功能

循环创建多个用户

[root@m01 ansible_playbook]#vim test_循环功能.yaml
- hosts: 172.16.1.41
tasks:
- name: create user
user: name={{ item }}
with_items:
- oldgirl01
- oldgirl02
- oldgirl03
- oldgirl04
- oldgirl05

循环创建多个用户  多个用户uid数值是不同的

[root@m01 ansible_playbook]#vim test_循环功能.yaml
- hosts: 172.16.1.41
tasks:
- name: create user
user: name={{ item.name }} uid={{ item.uid }}
with_items:
- {name: "oldgirl06", uid: "3006"}
- {name: "oldgirl07", uid: "3007"}
- {name: "oldgirl08", uid: "3008"}
- {name: "oldgirl09", uid: "3009"}
- name: check create user info
shell: grep oldgirl0 /etc/passwd
register: user_info
- debug: msg={{ user_info.stdout_lines }}

1.6.5 剧本编写忽略错误功能

忽略功能主要用来调试剧本

[root@m01 ansible_playbook]#vim test_h忽略功能.yaml
- hosts: 172.16.1.41
tasks:
- name: create rsync user
shell: useradd rsync -M -s /sbin/nologin
ignore_errors: yes
- name: create backup dir
shell: mkdir /backup
ignore_errors: yes
- name: boot server
shell: systemctl start rsyncd
ignore_errors: yes

在使用shell进行一些操作时,shell产生的结果已经存在时,会导致剧本无法进行下去,因此使用忽略功能可以有效的使剧本进行下去。

1.6.6 剧本标签设置功能

标签功能主要用来调试剧本
tags:标签

[root@m01 ansible_playbook]#vim test_标签功能.yaml
- hosts: 172.16.1.41
tasks:
- name: 01:安装软件
yum: name=rsync state=installed
ignore_errors: yes
- name: 02:创建用户
user: name=rsync create_home=no shell=/sbin/nologin
ignore_errors: yes
tags: create_user
- name: 03:创建目录
file: path=/backup state=directory

运行剧本

ansible-playbook -t create_user test_标签功能.yaml             --- 执行剧本中标签任务
ansible-playbook --skip-tags create_user test_标签功能.yaml --- 跳过指定标签任务,执行其他任务
ansible-playbook -t create_user,create_dir test_标签功能.yaml --- 执行多个标签
# -t=tags

1.6.7 剧本忽略采集功能

[root@m01 ansible_playbook]#vim test_忽略采集.yaml
- hosts: 172.16.1.41
gather_facts: no
tasks:
- name: 01:安装软件
yum: name=rsync state=installed
ignore_errors: yes
- name: 02:创建用户
user: name=rsync create_home=no shell=/sbin/nologin
ignore_errors: yes
tags: create_user
- name: 03:创建目录
file: path=/backup state=directory
tags: create_dir

当剧本采集大量主机信息时,可能会变得卡,慢,影响剧本后面的操作执行的效率。所以在这个时候,可以忽略采集功能,提高效率,在hosts下面添加 gather_facts: no
如果剧本中有判断功能,不能使用此参数,因为采集的信息会与判读信息对比

1.6.8 剧本信息触发功能

编写剧本

[root@m01 ansible_playbook]#vim test_触发功能.yaml
- hosts: 172.16.1.41
tasks:
- name: 01:传输配置文件
copy: src=/etc/ansible/ansible_playbook/rsyncd.conf dest=/etc/
notify: rsync_restart
- name: 02:启动服务程序
service: name=rsyncd state=started
handlers:
- name: rsync_restart
service: name=rsyncd state=restarted

handlers:一般用于配置文件修改时,才会进行触发功能,对服务进行重启
notify:传输配置文件过来,notify通知rsync_restart这个触发器。然后handlers会进行重启服务
说明: 整体任务执行完毕,才会执行触发功能

1.7 编写剧本练习题

要求:
(1)在172.16.1.41主机上操作:
       ①将定时任务服务停止
       ②创建一个/etc/目录软连接 在/opt目录中生成  
       ③将本地/etc/hosts文件分发给41主机 保存到/tmp目录中
(2)在172.16.1.31主机上操作:
       ①将防火墙服务开机自动运行
       ②将主机上安装keepalived软件
实践:
编写剧本文件

[root@m01 ansible_playbook]#vim test.yaml
- hosts: 172.16.1.41
tasks:
- service: name=crond state=stopped
- file: src=/etc path=/opt/etc_link state=link
- copy: src=/etc/hosts dest=/tmp
- hosts: 172.16.1.31
tasks:
- service: name=firewalld enabled=yes
- yum: name=keepalived state=installed

剧本语法检查

# 语法检查剧本文件
[root@m01 ansible_playbook]#ansible-playbook --syntax-check test.yaml playbook: test.yaml

剧本模拟执行

[root@m01 ansible_playbook]#ansible-playbook -C test.yaml

PLAY [172.16.1.41] ***********************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.41] TASK [service] ***************************************************************************************
ok: [172.16.1.41] TASK [file] ******************************************************************************************
ok: [172.16.1.41] TASK [copy] ******************************************************************************************
ok: [172.16.1.41] PLAY [172.16.1.31] *********************************************************************************** TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.31] TASK [service] ***************************************************************************************
ok: [172.16.1.31] TASK [yum] *******************************************************************************************
ok: [172.16.1.31] PLAY RECAP *******************************************************************************************
172.16.1.31 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.1.41 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

剧本真实执行

[root@m01 ansible_playbook]#ansible-playbook test.yaml

PLAY [172.16.1.41] ***********************************************************************************

TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.41] TASK [service] ***************************************************************************************
ok: [172.16.1.41] TASK [file] ******************************************************************************************
ok: [172.16.1.41] TASK [copy] ******************************************************************************************
ok: [172.16.1.41] PLAY [172.16.1.31] *********************************************************************************** TASK [Gathering Facts] *******************************************************************************
ok: [172.16.1.31] TASK [service] ***************************************************************************************
ok: [172.16.1.31] TASK [yum] *******************************************************************************************
ok: [172.16.1.31] PLAY RECAP *******************************************************************************************
172.16.1.31 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.1.41 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

补充:
如果系统中装有cowsay软件,在执行命令时,会产生图案信息,影响查阅结果,可以关闭。

[root@m01 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
把# nocows = 1 中的 # 去掉即可。

1.8 ansible剧本实现rsync一键化部署

第一个历程: 按照模块方式,完成服务每个步骤部署
第一步:服务端配置

# 安装软件程序
ansible rsync -m yum -a "name=rsync state=installed"
# 编写配置文件:要在批量管理主机上提前写好,然后推送给服务端
# 在管理端准备好服务配置文件
ansible rsync_server -m copy -a "src=/etc/ansible/conf_file/rsyncd.conf dest=/etc/"
# 创建虚拟用户
ansible rsync_server -m user -a "name=rsync create_home=no shell=/sbin/nologin"
# 创建密码文件 (授权600)
ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"
# 创建备份目录 (授权 属主 属组)
ansible rsync_server -m file -a "path=/backup state=directory owner=rsync group=rsync"
@ 启动程序服务
ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"

第二步:客户端配置

# 创建密钥文件 (授权600)
ansible rsync_client -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
# 批量测试传输文件
ansible rsync_client -m shell -a "rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password"

第二个历程: 编写剧本信息

[root@m01 ansible_playbook]#vim rsync_auto.yaml
- hosts: rsync_server
tasks:
- name: 01:install rsync
yum: name=rsync state=installed
- name: 02:copy conf file
copy: src=/etc/ansible/conf_file/rsyncd.conf dest=/etc/
- name: 03:create rsync user
user: name=rsync create_home=no shell=/sbin/nologin
- name: 04:create password file
copy: content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600
- name: 05:create backup dir
file: path=/backup state=directory owner=rsync group=rsync
- name: 06:boot rsync server
service: name=rsyncd state=started enabled=yes - hosts: rsync_client
tasks:
- name: 01:create password file
copy: content='oldboy123' dest=/etc/rsync.password mode=600

恢复环境剧本

[root@m01 ansible_playbook]#vim rsync_backup.yaml
- 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

1.9 ansible剧本实现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"

第二个历程编写剧本:

[root@m01 ansible_playbook]#vim nfs_auto.yaml
- hosts: nfs_server
tasks:
- name: 1:install rpcbind nsf-utils
yum:
name:
- rpcbind
- nfs-utils
state: installed
- name: 2:copy conf file
copy: src=/etc/ansible/ansible_playbook/nfs.conf dest=/etc/exports
- name: 3:create data dir
file: path=/data/ state=directory owner=nfsnobody group=nfsnobody
- name: 4:boot server rcbind
service: name=rpcbind state=started enabled=yes
- name: 4:boot server nfs
service: name=nfs state=restarted enabled=yes
- hosts: nfs_client
tasks:
- name: 1:install nfs
yum: name=nfs-utils state=installed
- name: 2:mount data dir
mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted

恢复环境剧本

[root@m01 ansible_playbook]#vim nfs_backup.yaml
- hosts: nfs_server
tasks:
- name: 01:install rpcbind nfs-utils
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-utils state=removed
- name: 02:mount data dir
mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=unmounted

优化剧本:

[root@m01 ansible_playbook]#vim nfs_auto.yaml
- hosts: nfs_server
vars:
conf_file: exports
data_dir: /data
tasks:
- name: 01:install nfs rpcbind
yum:
name: ['nfs-utils', 'rpcbind']
state: installed
- name: 02:copy conf file
copy: src=/etc/ansible/ansible_playbook/nfs.conf dest=/etc/{{ conf_file }}
notify:
- nfs_restart
- name: 03:create data dir
file: path={{ data_dir }} state=directory owner=nfsnobody group=nfsnobody
- name: 04:boot server rpcbind
service: name={{ item.name }} state={{ item.state }} enabled={{ item.enabled }}
with_items:
- {name: "rpcbind", state: "started", enabled: "yes"}
- {name: "nfs", state: "started", enabled: "yes"}
handlers:
- name: nfs_restart
service: name=nfs state=reloaded
- hosts: nfs_client
vars:
data_dir: /data
tasks:
- name: 01:install nfs
yum: name=nfs-utils state=installed
- name: 02:mount data dir
mount: src=172.16.1.31:{{ data_dir }} path=/mnt fstype=nfs state=mounted
- name: 03:check mount info
shell: df -h|grep mnt
register: mount_info
- debug: msg={{ mount_info.stdout_lines }}

1.10 ansible剧本实现sersync一键化部署

第一个历程: 按照模块方式,完成服务每个步骤部署

配置hosts主机清单
[server_server]
172.16.1.31
[server_client]
172.16.1.41 #安装rsync
ansible backup_server -m yum -a "name=rsync state=installed"
#在批量管理主机上下载sersync,解压发送给客户端
ansible backup_server -m file -a "src=/usr/local/sersync_installdir_64bit/sersync dest=/usr/local"
#在批量管理主机上写好sersync配置文件,发送给客户端
ansible backup_server -m copy -a "src=/usr/local/sersync_installdir_64bit/sersync/conf/confxml.xml dest=/usr/local/sersync/conf/"
#给sersync加上执行权限
ansible backup_server -m file -a "path=/usr/local/sersync/bin/sersync mode=a+x"
#给sersync创建软链接
ansible backup_server -m file -a "src=/usr/local/sersync/bin/sersync path=/usr/local/sbin/sersync state=link"
#启动sersync 测试实时同步
ansible backup_server -m shell -a "sersync -dro /usr/local/sersync/conf/confxml.xml"

第二个历程,编写剧本

[root@m01 ansible_playbook]#vim sersync_auto.yaml
- hosts: sersync_server
tasks:
- name: 安装rsync
yum: name=rsync state=installed
- name: 将sersync传输到客户端
file: src=/usr/local/sersync_installdir_64bit/sersync/ dest=/usr/local
- name: 将写好的配置文件传输到客户端
copy: src=/usr/local/sersync_installdir_64bit/sersync/conf/confxml.xml dest=/usr/local/sersync/conf/
- name: 加上执行权限
file: path=/usr/local/sersync/bin/sersync mode=a+x
- name: 创建软链接
file: src=/usr/local/sersync/bin/sersync path=/usr/local/sbin/sersync state=link
- name: 启动sersync 测试实时同步
shell: sersync -dro /usr/local/sersync/conf/confxml.xml

恢复环境剧本

[root@m01 ansible_playbook]#cat sersync_backup.yaml
- hosts: sersync_server
tasks:
- name: 卸载rsync
yum: name=rsync state=removed
- name: 删除sersync
file: path=/usr/local/sersync

2 多个剧本如何进行整合

第一个历程: 确保每个剧本执行成功
第二个历程: 进行剧本整合
方法一:不建议使用

[root@m01 ansible_playbook]#vim zhenghe.yaml  # ---角色里使用
- hosts: all
remote_user: root
tasks:
- include_tasks: nfs_auto.yml
- include_tasks: rsync_auto.yml
# 不写hosts信息,只写任务信息

方法二:在以后的ansible中可能会取消include功能

[root@m01 ansible_playbook]#vim zhenghe.yaml
- include:nfs_auto.yml
- include:rsync_auto.yml

方法三:建议使用这个方法

[root@m01 ansible_playbook]#vim zhenghe.yaml
- import_playbook: nfs_auto.yaml
- import_playbook: rsync_auto.yaml

3 ansible剧本编写方式:角色

(1)规范ansible程序目录结构
(2)汇总剧本中有定义的主机信息

3.1 角色调用流程图

3.2 nfs服务角色编写

第一个历程: 创建角色目录结构

cd roles/;mkdir {nfs,rsync,web,sersync}
cd nfs/{vars,tasks,templates,handlers,files}
# vars: 定义变量信息
# tasks: 定义任务信息
# templates: 定义模板文件(jinja2模板文件)
# handlers: 定义触发器信息
# files: 定义需要分发的文件

第二个历程: 编写文件信息
tasks:  任务信息编写方式一:
nfs服务编写

vim main.yaml
- name: 01:install nfs rpcbind
yum:
name: ['nfs-utils', 'rpcbind']
state: installed
- name: 02:copy conf file
copy: src=/etc/ansible/ansible_playbook/nfs.conf dest=/etc/{{ conf_file }}
notify:
- nfs_restart
- name: 03:create data dir
file: path={{ data_dir }} state=directory owner=nfsnobody group=nfsnobody
- name: 04:boot server rpcbind
service: name={{ item.name }} state={{ item.state }} enabled={{ item.enabled }}
with_items:
- {name: "rpcbind", state: "started", enabled: "yes"}
- {name: "nfs", state: "started", enabled: "yes"}
- name: 01:install nfs
yum: name=nfs-utils state=installed
- name: 02:mount data dir
mount: src=172.16.1.31:{{ data_dir }} path=/mnt fstype=nfs state=mounted
- name: 03:check mount info
shell: df -h|grep mnt
register: mount_info
- debug: msg={{ mount_info.stdout_lines }}

tasks:  任务信息编写方式二:
tasks:定义任务信息

cd tasks
vim main.yaml
vim nfs_boot.yaml
vim nfs_conf.yaml
vim nfs_datadir.yaml
vim nfs_install.yaml
vim nfs_mount.yaml
#########################
vim main.yaml
- include_tasks: nfs_install.yaml
- include_tasks: nfs_conf.yaml
- include_tasks: nfs_datadir.yaml
- include_tasks: nfs_boot.yaml
- include_tasks: nfs_mount.yaml

vars:定义变量信息

vim main.yaml
conf_file: exports
data_dir: /data

files:定义需要分发的文件

[root@m01 files]# ll
total 4
-rw-r--r-- 1 root root 42 Jul 29 10:34 nfs.conf

handlers:定义触发器信息

vim main.yaml
- name: nfs_restart
service: name=nfs state=reloaded

ansible批量管理服务 下的更多相关文章

  1. 六.ansible批量管理服务

    期中集群架构-第六章-ansible批量管理服务介绍====================================================================== 01. ...

  2. Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务

    SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Worki ...

  3. ansible批量管理服务 上

    1 ansible简介 1.1 ansible批量管理服务概述 (1)是基于python语言开发的自动化软件工具(2)是基于SSH远程管理服务实现远程主机批量管理(3)并行管理,部署简单,应用也简单方 ...

  4. Ansible 批量管理Windows Server服务器

    Ansible批量管理Windows Server         Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具,  它用Python写成,类似于saltstack和Puppe ...

  5. 使用ansible批量管理远程服务器

    使用ansible批量管理远程服务器 背景 本地需要管理远程的一批服务器,主要执行以下任务: 1) 将本地的文件复制到远端所有服务器: 2) 需要在远程服务器中执行一个个命令: 远端服务器路径并非完全 ...

  6. ansible批量管理软件部署及剧本

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_6 ...

  7. Linux中ansible批量管理软件部署及剧本编写

    服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29: ...

  8. Linux系统——Ansible批量管理工具

    批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

  9. ansible批量管理常见的配置方法

    第7章 ansible的管理 7.1 ansible概念的介绍 ansible-playbook –syntax            检查语法 ansible-playbook -C         ...

随机推荐

  1. Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境

    一.JDK1.8 环境搭建 1.上传文件解压 [root@localhost mysoft]# tar -zxvf jdk-8u161-linux-x64.tar.gz [root@localhost ...

  2. Java连载3-编译与运行阶段详解&JRE,JDK,JVM关系

    ·一. 1.JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html ...

  3. C++学习书籍推荐《Effective C++ 第三版》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)>前两个版本抓住了全世界无数程序员的目光.原因十分明显:S ...

  4. c++学习书籍推荐《C++编程思想第二卷》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++编程思想>(第2卷)是惟一一本如此清晰地阐述如何重新思考以面向对象方法构造程序的书籍.<C++编程思想>(第2卷)介绍实用的编 ...

  5. Asp.Net url参数加密存在特殊符号处理方法

    Url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,服务器端无法获得正确的参数值,解决办法. 使用System.Web.HttpUtility.UrlEncode()方法将这些字符 ...

  6. Bzoj 2281 [Sdoi2011]黑白棋 题解

    2281: [Sdoi2011]黑白棋 Time Limit: 3 Sec  Memory Limit: 512 MBSubmit: 592  Solved: 362[Submit][Status][ ...

  7. .Net微信网页开发之JSSDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解

    前言: 因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享,获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解.而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS ...

  8. WinForm控件之【Button】

    基本介绍 普通按钮大部分情况下用作页面对某系列操作后的提交确认,应用较为广泛,在winfrom控件当中使用设置都相对的简单. 常设置属性.事件 Image:控件上显示的图片: Enabled  :指示 ...

  9. MyBatis bind标签的用法

    From<MyBatis从入门到精通> <!-- 4.5 bind用法 bind标签可以使用OGNL表达式创建一个变量并将其绑定到上下文中. 需求: concat函数连接字符串,在M ...

  10. UVA1103 古代象形符号 Ancient Messages 题解

    题目链接: https://www.luogu.org/problemnew/show/UVA1103 题目分析: 我们可以先进行矩阵的还原 for(int k=1;k<=4;k++) { a[ ...