ansible常用模块总结

常见模块

模块说明

command(重要模块)

执行命令模块,ansible命令执行默认模块

shell(重要模块)

执行shell脚本模块

script(重要模块)

把脚本发到客户端然后执行;执行脚本命令在远程服务器上

copy(重要模块)

把本地文件发送到远端

file

设定文件属性模块

service

系统服务管理模块

cron

计划任务管理模块

yum

yum软件包安装管理模块

synchronize

使用rsync同步文件模块

mount

挂载模块

ansible帮助信息系统中查看方法:ansible-doc -l        <-查看全部模块列表信息

ansible-doc -s [模块]   <-查看指定模块用法参数信息

 

1 ping模块

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m ping
 2 172.16.1.41 | SUCCESS => {
 3     "changed": false,
 4     "ping": "pong"
 5 }
 6 
 7 172.16.1.31 | SUCCESS => {
 8     "changed": false,
 9     "ping": "pong"
10 }


ansible怎么取消自动换行 ansible changed_数据

说明:ansible连接测试成功结果

ansible怎么取消自动换行 ansible changed_数据


1 ansible 172.16.1.8 -m ping
2 
3 172.16.1.8 | UNREACHABLE! => {
4 "changed": false,
5 "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n",
6 "unreachable": true
7 }


ansible怎么取消自动换行 ansible changed_数据

说明:ansible连接测试不成功结果

模块概要:

a.ping是一个简单的测试模块,这个模块在成功连接时返回"pong"信息。在剧本中没有意义,但能够使用ansible命令验证登录能力和用于python的配置

b.这并不是传统的ICMP ping,而是先检查是否通过ssh登录节点,在检查python版本是否满足要求,能满足要求就返回pong


连接正常返回pong通过帮助信息可以获得: ansible-doc -v ping 可以获得该模块的说明 ansible-doc -s file 参看模块的具体信息


实例:

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible-doc -v ping
2 Using /etc/ansible/ansible.cfg as config file
3 > PING    (/usr/lib/python2.6/site-packages/ansible/modules/system/ping.py)
4 
5 A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to verify the ability to login and that a usable  python is configured. This is NOT ICMP ping, this is just a trivial test module.


ansible怎么取消自动换行 ansible changed_数据

2 command模块

常见模块

模块说明

chdir

在执行命令之前,通过cd命令进入到指定目录中

ansible banana -m command -a "chdir=/tmp ls"

create

定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤

executable

改变shell使用command进行执行,并且执行时要使用绝对路径

free_form

命令模块采用自由形式命令运行;即可以输入任意linux命令

removes

定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤

warn

如果ansible配置文件中定义了命令警告,如果参数设置了no/false,将不会警告此行命令

 

实例01.

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible all -m command -a "date"
2 172.16.1.8 | SUCCESS | rc=0 >>
3 Thu Oct 19 17:12:27 CST 2017
4 
5 172.16.1.31 | SUCCESS | rc=0 >>
6 Thu Oct 19 17:12:28 CST 2017
7 
8 172.16.1.41 | SUCCESS | rc=0 >>
9 Thu Oct 19 17:12:27 CST 2017


ansible怎么取消自动换行 ansible changed_数据

实例02.

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m command -a "chdir=/tmp pwd"
2 172.16.1.31 | SUCCESS | rc=0 >>
3 /tmp
4 
5 172.16.1.8 | SUCCESS | rc=0 >>
6 /tmp
7 
8 172.16.1.41 | SUCCESS | rc=0 >>
9 /tmp


ansible怎么取消自动换行 ansible changed_数据

实例03.

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m command -a "pwd creates=/tmp/banana_file"
 2 
 3 172.16.1.31 | SUCCESS | rc=0 >>
 4 skipped, since /tmp/banana_file exists
 5 
 6 172.16.1.8 | SUCCESS | rc=0 >>
 7 /root
 8 
 9 172.16.1.41 | SUCCESS | rc=0 >>
10 /root


ansible怎么取消自动换行 ansible changed_数据

模块概要:

a.命令模块中的多个参数设置用空格进行分割

b.命令模块中不能出现 "<", ">", "|", ";" and "&",如需使用这些功能,可用shell模块

提示:command模块作为默认模块,在-m不指定具体模块时,即采用默认模块command

3 debug模块

msg:设置打印自定义消息;如果忽略,则打印通用信息

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m debug -a "msg=banana"
 2 172.16.1.8 | SUCCESS => {
 3     "msg": "banana"
 4 }
 5 
 6 172.16.1.31 | SUCCESS => {
 7     "msg": "banana"
 8 }
 9 
10 172.16.1.41 | SUCCESS => {
11     "msg": "banana"
12 }


ansible怎么取消自动换行 ansible changed_数据

模块概要:这个模块会打印语句在执行时,并且能够用于调试变量或表达式,可以不需要停止剧本;可以结合when指令一起进行调试

4 copy模块

参数

参数说明

src

被复制到远程主机的本地文件。如果路径是一个目录,它将递归复制。如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制

remote_src

如果这个值设置为True,将到远程/目标主机的机器上搜索

dest

必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

owner

设置复制传输后的数据属主信息

group

设置复制传输后的数据属组信息

mode

设置文件数据权限信息(注意4位)

backup

在覆盖远端服务器文件之前,将远端服务器源文件备份,备份文件包含时间信息。有两个选项:yes|no

content

用于替代"src”,可以直接设定指定文件的值

force

如果目标主机包含该文件,但内容不同。

如果设置为yes,则强制覆盖;如果为no,则只有当目标主机的目标位置不存在该文件时才复制,默认为yes

directory_mode

递归设定目录的权限,默认为系统默认权限

 

模块概要:

a.copy模块拷贝文件从本地或远程机器到远程机器的一个目录区域中;使用fetch模块来拷贝文件从远程区域到本地

b.如果需要复制文件中插入的变量值,可以使用template模块

说明:第一次执行时结果为黄色,即文件传输;第二次执行没有发生任何改变,即为绿

实例01. 使用copy 模块,将/etc/hosts文件传输到各个服务器送,权限修改为044,属主属组为banana

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=banana group=banana "
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
 6     "dest": "/tmp/hosts",
 7     "gid": 500,
 8     "group": "banana",
 9     "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308",
10     "mode": "0600",
11     "owner": "banana",
12     "size": 357,
13     "src": "/root/.ansible/tmp/ansible-tmp-1508410846.63-224022812989166/source",
14     "state": "file",
15     "uid": 500
16 }


ansible怎么取消自动换行 ansible changed_数据

实例02.移动远程主机上的文件remote_src=true参数

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m copy -a "remote_src=true src=/etc/hosts dest=/opt"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": false,
 5     "checksum": "545f587595b5c60d66243fca48e052ed34eed782",
 6     "dest": "/opt/hosts",
 7     "gid": 0,
 8     "group": "root",
 9     "md5sum": "fe08440ffebed54cab7a9b4cb3c3beda",
10     "mode": "0644",
11     "owner": "root",
12     "size": 371,
13     "src": "/etc/hosts",
14     "state": "file",
15     "uid": 0
16 }


ansible怎么取消自动换行 ansible changed_数据

实例03.定义文件中的内容content=bananaedu.com默认没有换行

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m copy -a "content=bananaedu.com dest=/opt/banana.txt"
 2 
 3 172.16.1.31 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "291694840cd9f9c464263ea9b13421d8e74b7d00",
 6     "dest": "/opt/banana.txt",
 7     "gid": 500,
 8     "group": "banana",
 9     "md5sum": "0a6bb40847793839366d0ac014616d69",
10     "mode": "0600",
11     "owner": "banana",
12     "size": 13,
13     "src": "/root/.ansible/tmp/ansible-tmp-1508649097.07-180967115147583/source",
14     "state": "file",
15     "uid": 500
16 }


ansible怎么取消自动换行 ansible changed_数据

5 shell模块

注意:shell模块在远程执行脚本时,远程主机上一定要有相应的脚本

01.把脚本文件复制到远程服务器,执行远程服务器的脚本

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m shell -a "/bin/sh /server/scripts/ssh-key.sh"
2 172.16.1.31 | SUCCESS | rc=0 >> 
3 fenfa 172.16.1.31 [  OK  ]
4 
5 fenfa 172.16.1.41 [  OK  ]  
6 
7 fenfa 172.16.1.8 [  OK  ]

ansible怎么取消自动换行 ansible changed_数据

02.把/etc/hosts文件中的内容重定向到/banana.txt

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m shell -a "cat /etc/hosts >/banana.txt"
2 
3 172.16.1.41 | SUCCESS | rc=0 >>
4 
5 172.16.1.8 | SUCCESS | rc=0 >>
6  
7 172.16.1.31 | SUCCESS | rc=0 >>

ansible怎么取消自动换行 ansible changed_数据

说明:可支持command模块不能完成的特殊符号,同时汇总所有的模块

6 script模块

ansible怎么取消自动换行 ansible changed_数据

1 [root@m01 ~]# ansible banana -m script -a "/server/scripts/ip.sh"
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "rc": 0,
 6     "stderr": "Shared connection to 172.16.1.8 closed.\r\n",
 7     "stdout_lines": [
 8         "eth0      Link encap:Ethernet  HWaddr 00:0C:29:4B:16:9D  ",
 9         "          inet addr:10.0.0.8  Bcast:10.0.0.255  Mask:255.255.255.0",
10         "          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1",
11         "          RX bytes:86527 (84.4 KiB)  TX bytes:76532 (74.7 KiB)",
12     ]
13 }


ansible怎么取消自动换行 ansible changed_数据

提示:script模块与shell模块的区别

shell:需要将脚本文件都知道远端服务器,然后sh执行远端服务器的脚本

script:不需要将脚本文件复制到远端服务器,实质是将脚本执行过程在远端服务器上进行执行

7 file模块

参数

参数说明

owner

设置复制传输后的数据属主信息

group

设置复制传输后的数据属组信息

mode

设置文件数据权限信息

dest

要创建的文件或目录命令,以及路径信息

src

指定要创建软链接的文件信息

state

参数

参数说明

directory

所有不存在的子目录将会被创建

file

文件不存在将不能被创建

link

符号链接(软链接)将被创建或更改

hard

创建出硬链接

absent

目录将被递归删除以及文件,链接被取消

注意:定义文件不存在不会失败,只是输出没有发生任何改变的结果

touch

如果路径不存在将创建一个空文件,如果文件或目录存在将接收更新的文件访问和修改时间

 

实例01.创建远端目录

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_dir state=directory"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "gid": 0,
 6     "group": "root",
 7     "mode": "0755",
 8     "owner": "root",
 9     "path": "/tmp/banana_dir",
10     "size": 4096,
11     "state": "directory",
12     "uid": 0
13 }


ansible怎么取消自动换行 ansible changed_数据

实例02.创建远端文件

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_file state=touch"
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "dest": "/tmp/banana_file",
 6     "gid": 0,
 7     "group": "root",
 8     "mode": "0644",
 9     "owner": "root",
10     "size": 0,
11     "state": "file",
12     "uid": 0
13 }

ansible怎么取消自动换行 ansible changed_数据

8 yum模块

参数

参数说明

name=name

指定安装的软件

state=installed

安装

 

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m yum -a "name=nmap state=installed"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": false,
 5     "msg": "",
 6     "rc": 0,
 7     "results": [
 8         "nmap-2:5.51-6.el6.x86_64 providing nmap is already installed"
 9     ]
10 }

ansible怎么取消自动换行 ansible changed_数据

提示:这里的state状态均为过去式ed/d

9 service模块

参数

参数说明

name=service name

服务的名称

state=参数

停止服务 服务状态信息为过去时

stared/stoped/restarted/reloaded

enabled=yes

设置开机自启动

 

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m service -a "name=crond state=restarted"
2 
3 172.16.1.8 | SUCCESS => {
4     "changed": true,
5     "name": "crond",
6     "state": "started"
7 }


ansible怎么取消自动换行 ansible changed_数据

说明:此时name即服务名,表示将名为crond的服务停止,并且取消开机自启动

10 cron模块

实例01.创建定时任务

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m cron -a "name=01 minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"   #name识别定时任务唯一性的标识,但只管理ansible信息
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "envs": [],
 6     "jobs": [
 7         "None",
 8         "banana666"
 9     ]
10 }


ansible怎么取消自动换行 ansible changed_数据

实例02.删除定时任务

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m cron -a "name=None minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' state=absent"
2 
3 172.16.1.41 | SUCCESS => {
4     "changed": true,
5     "envs": [],
6     "jobs": [
7         "banana666"
8     ]
9 }

ansible怎么取消自动换行 ansible changed_数据

实例03.查看定时任务

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m shell -a "crontab -l"
2 
3 172.16.1.8 | SUCCESS | rc=0 >>
4 #time sync by banana at 2017-10-1
5 
6 #web_backup by rsync
7 #*/5 * * * * /bin/sh /server/scripts/web_backup.sh &>/dev/null
8 #Ansible: banana666
9 #00 00 * * * /bin/sh /server/scripts/ip.sh &>/dev/null


ansible怎么取消自动换行 ansible changed_数据

11 fetch模块

参数

参数说明

dest

将远程主机拉取过来的文件保存在本地的路径信息

src

指定从远程主机要拉取的文件信息,只能拉取文件

flat

默认设置为no,如果设置为yes,将不显示172.16.1.8/etc/信息

 

实例01.从远程主机拉取文件

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m fetch -a "dest=/tmp  src=/etc/hosts"
 2 
 3 172.16.1.8 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "bd9a0f82db17051a305f6a5974fa1fd95ead73d5",
 6     "dest": "/tmp/172.16.1.8/etc/hosts",
 7     "md5sum": "27b1ddf7c360698b439627b057f77d51",
 8     "remote_checksum": "bd9a0f82db17051a305f6a5974fa1fd95ead73d5",
 9     "remote_md5sum": null
10 }


ansible怎么取消自动换行 ansible changed_数据

实例02.拉取时不创建目录(同名文件会覆盖)

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]# ansible banana -m fetch -a "dest=/tmp/  src=/etc/hosts flat=yes"
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "checksum": "bcb7c85bad6008ede9e73d18ae0bb78f2b11f612",
 6     "dest": "/tmp/hosts",
 7     "md5sum": "211bd00bf9ba8a735db1c7953d7cebc4",
 8     "remote_checksum": "bcb7c85bad6008ede9e73d18ae0bb78f2b11f612",
 9     "remote_md5sum": null
10 }


ansible怎么取消自动换行 ansible changed_数据

12 mount模块

参数

参数说明

fstype

指定挂载文件类型;-t nfs == fstype=nfs

opts

设定挂载的参数选项信息;-o ro == opts=ro

path

指定挂载点 path=/mnt

src

要被挂载的目录设备信息 src=172.16.1.31:/data/w

state

01.如果为mountd

在fstab文件中的设备将被激活挂载和适当配置

02.如果为unmounted

设备将被卸载并不会改变fstab文件信息,absent和present只处理fstab,但不影响目前的挂载

 

实例01.挂载

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ~]#ansible banana -m mount -a “fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=mounted”
 2 
 3 172.16.1.41 | SUCCESS => {
 4     "changed": true,
 5     "dump": "0",
 6     "fstab": "/etc/fstab",
 7     "fstype": "nfs",
 8     "name": "/mnt",
 9     "opts": "ro",
10     "passno": "0",
11     "src": "172.16.1.31:/data/w"
12 }


ansible怎么取消自动换行 ansible changed_数据

实例02.卸载

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 tmp]# ansible banana -m mount -a "fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=unmounted"
 2 
 3     172.16.1.8 | SUCCESS => {
 4     "changed": false,
 5     "dump": "0",
 6     "fstab": "/etc/fstab",
 7     "fstype": "nfs",
 8     "name": "/mnt",
 9     "opts": "ro",
10     "passno": "0",
11     "src": "172.16.1.31:/data"
12 }


ansible怎么取消自动换行 ansible changed_数据

 

第5章 ansible剧本编写

5.1 ansible基础知识部分补充

5.1.1 ansible软件特点

01.可以实现批量管理

02.可以实现批量部署

03.ad-hoc(批量执行命令)---针对临时性的操作

ansible banana -m command -a "hostname"   <-批量执行命令举例

04.编写剧本-脚本(playbook)---针对重复性的操作

5.1.2 ansible核心功能

01.pyYAML  <-用于ansible编写剧本所使用的语言格式(saltstack---python)

02.paramiko  <-远程连接与数据传输

03.Jinja2     <-用于编写ansible的模板信息

5.2 ansible剧本编写规则说明

①规则一:缩进/空格

yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成,一定不能使用tab键

注意:编写ansible-playbook文件,一定忘记有tab键

②规则二:冒号

CMD="echo"

yaml :

mykey :

注意:每个冒号前后一定要有空格(以冒号结尾不需要空格,表示文件路径的模板不需要空格)

③规则三:短横线

想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab的

5.3 剧本编写环境准备

外网IP

内网IP

主机名

10.0.0.8

172.16.1.8

web01

10.0.0.31

172.16.1.31

nfs01

10.0.0.41

172.16.1.41

backup

10.0.0.61

172.16.1.61

m01

 

5.4 剧本书写格式

ansible怎么取消自动换行 ansible changed_数据


1 剧本的开头,可以不写 2 - hosts: all #处理所有服务器,找到所有服务器; -(空)hosts:(空)all 3 tasks: #剧本所要干的事情; -(空)(空)task: 4 - command: echo hello banana linux. 5 (空)(空)(空)(空)-(空)模块名称:(空)模块中对应的功能 6 ansible all -m command -a "echo hello banana linux"


ansible怎么取消自动换行 ansible changed_数据

剧本编写内容扩展:剧本任务定义名称


1 - hosts: 172.16.1.7   #处理指定服务器                   -(空)hosts:(空)all
2 task:    #剧本所要干的事情;                          -(空)(空)task:
3 - name:
4 command: echo hello banana linux.                  
5 (空)(空)(空)(空)-(空)模块名称:(空)模块中对应的功能


5.4.1 剧本格式示例

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ansible-playbook]# vim rsync_sever.yml
2 
3 - hosts: 172.16.1.41
4   tasks:
5     - name: install rsync
6       yum: name=rsync state=installed


ansible怎么取消自动换行 ansible changed_数据

5.5 剧本编写后检查方法


01:ansible-playbook --syntax-check 01.yml   进行剧本配置信息语法检查

02:ansible-playbook -C 01.yml   模拟剧本执行(彩排)


5.5.1 语法检查

1 [root@m01 ansible-playbook]# ansible-playbook --syntax-check 01.yml
2
3 playbook: 01.yml

5.5.2 模拟剧本执行

ansible怎么取消自动换行 ansible changed_数据


1 [root@m01 ansible-playbook]# ansible-playbook -C 01.yml
 2 
 3 PLAY [all] ***************************************************************
 4 
 5 TASK [Gathering Facts] ***************************************************************
 6 ok: [172.16.1.41]
 7 ok: [172.16.1.8]
 8 ok: [172.16.1.31]
 9 
10 TASK [cron] ***************************************************************
11 ok: [172.16.1.8]
12 ok: [172.16.1.41]
13 ok: [172.16.1.31]
14 
15 PLAY RECAP ***************************************************************
16 172.16.1.31                : ok=2    changed=0    unreachable=0    failed=0
17 172.16.1.41                : ok=2    changed=0    unreachable=0    failed=0
18 172.16.1.8                 : ok=2    changed=0    unreachable=0    failed=0


ansible怎么取消自动换行 ansible changed_数据

5.6 剧本示例

5.6.1 剧本编写内容扩展:剧本任务编写多个任务

ansible怎么取消自动换行 ansible changed_数据


1 - hosts: all
2   tasks:
3     - name: restart-network
4       cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
5     - name: sync time
6       cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"


ansible怎么取消自动换行 ansible changed_数据

5.6.2 剧本编写内容扩展:剧本任务编写多个主机

ansible怎么取消自动换行 ansible changed_数据


1 - hosts: 172.16.1.7
 2   tasks:
 3     - name: restart-network
 4       cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
 5     - name: sync time
 6       cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
 7 - hosts: 172.16.1.31
 8   tasks:
 9     - name: show ip addr to file
10       shell: echo $(hostname -i) >> /tmp/ip.txt


ansible怎么取消自动换行 ansible changed_数据

5.7 剧本编写方式

01.多主机单任务编写方式

02.多主机多任务编写方式

03.不同主机多任务编写方式

 

第6章 ansible编写剧本排错思路

6.1 剧本排错方法

1. ansible-playbook编写完,检査语法和模拟测试运行

2.打开剧本,定位异常问題原因,将剧本中的内容转换命令执行一次

3. 将参数中的脚本文件推送到远程屎务器,在远程服务器本地执行脚本 sh -x test.sh

说明:ansible执行时,加上-vvvv显示ansible详细执行过程,也可以定位异常原因

--syntax-check或-C ansible语法检查和模拟执行(彩排)

6.2 排错逻辑

01.剧本执行中的错误

02.把剧本中的内容转换为ansible命令执行

ansible banana -m yum -a "name=rsync state=installed"

03.把参数中的脚本文件推送到远端服务器,放在远端被管理服务器本地上执行

     sh -x /server/scripts/test.sh

6.3 ansible无法正常使用

6.3.1 常见问题一:在被控端上 root@notty进程一直存在

ansible怎么取消自动换行 ansible changed_数据


1 [root@backup ~]# ps -ef|grep sshd
2 
3 root      35274      1  0 15:25 ?        00:00:00 /usr/sbin/sshd
4 root      37004  35274  0 16:23 ?        00:00:00 sshd: root@pts/2
5 root      37062  35274  0 16:55 ?        00:00:00 sshd: root@notty
6 root      37154  37006  0 16:55 pts/2    00:00:00 grep --color=auto sshd


ansible怎么取消自动换行 ansible changed_数据

解决思路:kill pid将该进程杀死,然后使用ansible的 -vvvv 参数查看执行的错误信息

ansible怎么取消自动换行 ansible changed_数据


Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.6/site-packages/ansible/plugins/callback/__init__.pyc

META: ran handlers
Using module file /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
<172.16.1.8> ESTABLISH SSH CONNECTION FOR USER: None
<172.16.1.8> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/923ebeb605 172.16.1.8 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''


ansible怎么取消自动换行 ansible changed_数据

可能为:在/etc/ssh/sshd_config 文件中的第132行为空,导致sftp 无法连接出错


133 Subsystem       sftp    /usr/libexec/openssh/sftp-server


6.3.2 常见问题二:

1 [root@m01 ~]# ansible -k 172.16.1.51 -m ping
2
3 SSH password:
4 [WARNING]: No hosts matched, nothing to do

解决思路:在ansible的hosts文件中,没有配置相应主机地址信息

6.3.3 常见问题三:

ansible怎么取消自动换行 ansible changed_数据


1 # ansible -k 172.16.1.51 -m ping
2 
3 SSH password:
4 172.16.1.51|FAILED! => {
5 "failed": true,
6 "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
7 }


ansible怎么取消自动换行 ansible changed_数据

解决思路:在known_hosts文件中没有受控端指纹信息

6.4 [附录]pssh命令使用扩展

6.4.1 pssh命令使用场景说明

背景:若同时给上千台服务器执行一个命令,拷贝一个文件,杀一个进程等,有什么简化运维管理的工具呢?

在小型企业中通常使用for循环,但是数量巨大时:一方面不确定操作是否成功;另一方面for循环语句性能不好估计且是否是同步并行执行,故此时会用到批量并行执行的命令如 pdsh,mussh,cssh,dsh等,及下面说明提到的pssh

6.4.2 pssh软件安装部署方式

①通过yum安装pssh软件

 1 yum install -y pssh <-pssh软件下载需要依靠epel源 

说明:pssh是一个软件大礼包,里面有很多软件命令

②通过编译方式安装pssh软件

ansible怎么取消自动换行 ansible changed_数据


1 wget http://peak.telecommunity.com/dist/ez_setup.py
2 python ez_setup.py
3 wget http://parallel-ssh.googlecode.com/files/pssh-2.2.2.tar.gz
4 tar zxvf pssh-2.2.2.tar.gz
5 cd pssh-2.2.2
6 python setup.py install


ansible怎么取消自动换行 ansible changed_数据

③pssh软件使用操作说明(ssh key认证密钥配置完毕)

01.pssh 多主机并行运行命令


1 [root@server pssh-2.2.2]# vim hosts_info.txt
2 
3 172.16.1.31:22
4 172.16.1.41:22
5 172.16.1.7:22  //注意我的端口号不仅是默认的22


说明:如果想将执行命令的批量输出信息重定向到一个文件 加-o 目录 选项

参数说明:


-h HOST_FILE,  --hosts=HOST_FILE       hosts file (each line "[user@]host[:port]")
-o OUTDIR,     --outdir=OUTDIR         output directory for stdout files (OPTIONAL)
-P,             --print                   print output as we get it


02.pscp 把文件并行地复制到多个主机上(从服务器端给客户端传送文件)

 1 [root@server pssh-2.2.2]# pscp -h test.txt /etc/sysconfig/network /tmp/network 

03.prsync 使用rsync协议从本地计算机同步到远程主机

1 [root@server ~]# pssh -h test.txt -P mkdir /tmp/etc

2 [root@server ~]# prsync -h test.txt -l dongwm -a -r /etc/sysconfig /tmp/etc  

04.pslurp 将文件从远程主机复制到本地,和pscp方向相反

ansible怎么取消自动换行 ansible changed_数据


1 [root@server ~]# pslurp -h test.txt   -L /tmp/test -l root /tmp/network test 
 2 
 3 [1] 14:53:54 [SUCCESS] 192.168.9.102 9922
 4 [2] 14:53:54 [SUCCESS] 192.168.9.104 9922
 5 
 6 [root@server ~]# ll /tmp/test/192.168.9.10
 7 192.168.9.102/ 192.168.9.104/
 8 
 9 [root@server ~]# ll /tmp/test/192.168.9.102/
10 总计 4.0K
11 -rw-r--r-- 1 root root 60 2011-04-22 14:53 test
12 
13 [root@server ~]# ll /tmp/test/192.168.9.104/
14 总计 4.0K
15 -rw-r--r-- 1 root root 60 2011-04-22 14:53 test