ansible软件2

常用软件安装及使用目录  ansible使用1

  

第1章 copy模块

1.1 创建文件及写入内容

1. [root@m01 scripts]# ansible oldboy -m copy -a "content='wo shi hao ren' dest=/machangwei/11"

2. [root@web02 machangwei]# cat 11

3. wo shi hao ren[root@web02 machangwei]#          应该加个换行符

4. 

5. [root@m01 scripts]# ansible oldboy -m copy -a "content='ni hen sha ' dest=/machangwei/22"

6. [root@web02 machangwei]# cat 22

7. ni hen sha

8. [root@web02 machangwei]#

1.2 创建文件改用户

[root@m01 scripts]# ansible oldboy -m copy -a "content='ni hen ' dest=/machangwei/33 owner=oldboy"           

[root@web02 machangwei]# ll

total 12

-rw-r--r-- 1 root   root 14 Oct 22 12:32 11

-rw-r--r-- 1 root   root 11 Oct 22 12:34 22

-rw-r--r-- 1 oldboy root  7 Oct 22 12:38 33  

[root@m01 scripts]# ansible oldboy -m copy -a "content='ni hen ' owner=p group=incahome dest=/machangwei/44"

[root@web02 machangwei]# ll|tail -1

-rw-r--r-- 1 p      incahome  7 Oct 22 12:47 44

1.3 创建文件并修改权限

[root@m01 scripts]# ansible oldboy -m copy -a "content='ni hen ' owner=p group=incahome dest=/machangwei/55 mode=1777"

[root@web02 machangwei]# ll|tail -1

-rwxrwxrwt 1 p      incahome  7 Oct 22 12:50 55

1.4 force 没有默认覆盖

[root@m01 scripts]# ansible oldboy -m copy -a "content='xiao ming ' owner=p group=incahome dest=/machangwei/66 mode=1777"

[root@web02 machangwei]# cat 66

xiao

[root@web02 machangwei]# cat 66

xiao ming

=no 不传送

[root@m01 scripts]# ansible oldboy -m copy -a "content='xiao ming ' owner=p group=incahome dest=/machangwei/66 mode=1777 force=no"

[root@web02 machangwei]# cat 66

xiao ming

[root@web02 machangwei]# cat 66

xiao ming

1.5 备份

[root@web02 machangwei]# cat 88

#!/bin/sh

cat >>/etc/ansible/hosts <<eof

[oldboy]

172.16.1.7

[root@m01 scripts]# ansible oldboy -m copy -a "src=/server/scripts/xiao owner=p group=incahome dest=/machangwei/88 mode=1777 backup=yes"

[root@web02 machangwei]# ls

11  22  33  44  55  66  77  88  88.4749.2017-10-22@13:15:11~

[root@web02 machangwei]# cat 88

123 456

[root@web02 machangwei]# cat 88.4749.2017-10-22@13:15:11~

#!/bin/sh

cat >>/etc/ansible/hosts <<eof

[oldboy]

172.16.1.7

172.16.1.8

1.6 复制目录

ansible oldboy -m copy -a "src=/server/scripts dest=/machangwei/"

[root@web02 machangwei]# ls

11  22  33  44  55  66  77  88  88.4749.2017-10-22@13:15:11~  scripts

[root@web02 machangwei]# cat scripts/

cat: scripts/: Is a directory

 [root@web02 machangwei]# ll scripts/

total 28

-rw-r--r-- 1 root root  143 Oct 22 13:22 hosts

 [root@m01 scripts]# ansible oldboy -m copy -a "src=/server/scripts dest=/machangwei/ directory_mode=0777"       远端有目录的权限不变,没有

                                          的建为0777

1.7 复制文件并改名

[root@m01 scripts]# echo 45678 >mama

[root@m01 scripts]# cat mama

45678

[root@m01 scripts]# ansible oldboy -m copy -a "src=/server/scripts/mama dest=/machangwei/10"

[root@web02 machangwei]# cat 10

45678

1.8 总结

copy模块在ansible里的角色就是把ansible执行机器上的文件拷贝到远程节点上。 
fetch模块相反的操作。

参数名

是否必须

默认值

选项

说明

src

no

 

 

用于定位ansible执行的机器上的文件,需要绝对路径。如果拷贝的是文件夹,那么文件夹会整体拷贝,如果结尾是”/”,那么只有文件夹内的东西被考过去。一切的感觉很像rsync

content

no

 

 

用来替代src,用于将指定文件的内容,拷贝到远程文件内

dest

yes

 

 

用于定位远程节点上的文件,需要绝对路径。如果src指向的是文件夹,这个参数也必须是指向文件夹

backup

no

no

yes/no

备份远程节点上的原始文件,在拷贝之前。如果发生什么意外,原始文件还能使用。

directory_mode

no

 

 

这个参数只能用于拷贝文件夹时候,这个设定后,文件夹内新建的文件会被拷贝。而老旧的不会被拷贝

follow

no

no

yes/no

当拷贝的文件夹内有link存在的时候,那么拷贝过去的也会有link

force

no

yes

yes/no

默认为yes,会覆盖远程的内容不一样的文件(可能文件名一样)。如果是no,就不会拷贝文件,如果远程有这个文件

group

no

 

 

设定一个群组拥有拷贝到远程节点的文件权限

mode

no

 

 

等同于chmod,参数可以为“u+rwx or u=rw,g=r,o=r”

owner

no

 

 

设定一个用户拥有拷贝到远程节点的文件权限

参数返回值

参数名

参数说明

返回值

返回值类型

样例

src

位于ansible执行机上的位置

changed

string

/home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source

backup_file

将原文件备份

changed and if backup=yes

string

/path/to/file.txt.2015-02-12@22:09~

uid

在执行后,拥有者的ID

success

int

100

dest

远程节点的目标目录或文件

success

string

/path/to/file.txt

checksum

拷贝文件后的checksum

success

string

6e642bb8dd5c2e027bf21dd923337cbb4214f827

md5sum

拷贝文件后的md5 checksum

when supported

string

2a5aeecc61dc98c4d780b14b330e3282

state

执行后的状态

success

string

file

gid

执行后拥有文件夹、文件的群组ID

success

int

100

mode

执行后文件的权限

success

string

0644

owner

执行后文件所有者的名字

success

string

httpd

group

执行后文件所有群组的名字

success

string

httpd

size

执行后文件大小

success

int

1220

第2章 command模块

command 模块用于运行系统命令,比如echo hello, 你安装在系统里的python,或者make 一类。大家能领悟就行了。

2.1 常用参数:

parameter

required

default

choices

comments

chdir

no

 

 

运行command命令前先cd到这个目录

creates

no

 

 

如果这个参数对应的文件存在,就不运行command

executable

no

 

 

shell切换为command执行,这里的所有命令需要使用绝对路径

removes

no

 

 

如果这个参数对应的文件不存在,就不运行command

2.2 切换到目录下操作

[root@m01 scripts]# ansible oldboy -m command -a "ls"    家目录

172.16.1.8 | SUCCESS | rc=0 >>

1.txt

2

2.txt

[root@m01 scripts]# ansible oldboy -m command -a "chdir=/machangwei/ ls"

172.16.1.31 | SUCCESS | rc=0 >>

10

11

1.t

22

33

44

55

66

77

88

2.3 cteates

[root@m01 scripts]# ansible oldboy -m command -a "touch creates /machangwei/cc"

[root@m01 scripts]# ansible oldboy -m command -a "touch /machangwei/aa creates"

第3章 cron模块

主要是用来对定时任务进行调度,定时任务模块会包含一句描述信息,格式如下:

"#Ansible: <name>"

name对应的为模块传递过去的参数,主要用来给以后ansible进行操作的时候,查看相关的状态或者检查相关状态

依赖的模块为cron

参数

必填

默认

选择

说明

Backup

Yes/no

如果yes,那么在修改之后会进行备份,备份的路径在backup_file

Cron_file

如果设置了,那么在cron.d中使用此文件替代单独用户的crontab,在使用此选项的时候,必须使用user选项

Day

Hour

小时 ( 0-23, *, */2, etc )

Job

需要执行的命令,必须状态为present

Minute

 ( 0-59, *, */2, etc )

Month

( 1-12, *, */2, etc )

Name

任务的描述

Reboot

No

Yes/no

重启后是否需要执行

Special_time

reboot

yearly

annually

monthly

weekly

daily

hourly

特定的执行时间

State

Present

Present

Absent

启用或停用任务

User

Root

执行任务的用户

Weekday

每一周的哪天进行运行(0-6 for Sunday-Saturday, *, etc

3.1 定时任务创建

[root@m01 scripts]# ansible oldboy -m cron -a "name='chuang jian ding shi ren wu' minute=5 job='/bin/sh /machangwei/hostname.sh >/dev/null 2>&1'"

[root@web02 machangwei]# crontab -l|tail -2

#Ansible: chuang jian ding shi ren wu

5 * * * * /bin/sh /machangwei/hostname.sh >/dev/null 2>&1

3.2 删除定时任务

[root@m01 scripts]# ansible oldboy -m cron -a "name='chuang jian ding shi ren wu' minute=5 job='/bin/sh /machangwei/hostname.sh >/dev/null 2>&1' state=absent"

[root@web02 machangwei]# crontab -l

#time sync by oldboy at 2010-2-1

*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

[root@web02 machangwei]#

[root@m01 scripts]# ansible oldboy -m cron -a "name='chuang jian ding shi ren wu' state=absent"                   有名字就可以

第4章 setup模块

这个模块在playbook中自动被查找的,从而得到远程主机的相关信息,可以作为变量使用。

参数

必填

默认

选择

说明

Fact_path

/etc/ansible/facts.d

Fact的路径

Filter

*

过滤串

4.1 收集主机网卡信息

[root@m01 scripts]#  ansible oldboy -m setup -a "filter=ansible_eth[02]"

172.16.1.8 | SUCCESS => {

    "ansible_facts": {

        "ansible_eth0": {

            "active": true,

            "device": "eth0",

            "features": {

                "fcoe_mtu": "off [fixed]",

                "generic_receive_offload": "on",

                "generic_segmentation_offload": "on",

                "highdma": "off [fixed]",

                "large_receive_offload": "off [fixed]",

                "loopback": "off [fixed]",

                "netns_local": "off [fixed]",

                "ntuple_filters": "off [fixed]",

                "receive_hashing": "off [fixed]",

                "rx_checksumming": "on",

                "rx_vlan_filter": "on [fixed]",

                "rx_vlan_offload": "on [fixed]",

                "scatter_gather": "on",

                "tcp_segmentation_offload": "on",

                "tx_checksum_fcoe_crc": "off [fixed]",

                "tx_checksum_ip_generic": "on",

                "tx_checksum_ipv4": "off",

                "tx_checksum_ipv6": "off",

                "tx_checksum_sctp": "off [fixed]",

                "tx_checksum_unneeded": "off",

                "tx_checksumming": "on",

                "tx_fcoe_segmentation": "off [fixed]",

                "tx_gre_segmentation": "off [fixed]",

                "tx_gso_robust": "off [fixed]",

                "tx_lockless": "off [fixed]",

                "tx_scatter_gather": "on",

                "tx_scatter_gather_fraglist": "off [fixed]",

                "tx_tcp6_segmentation": "off",

                "tx_tcp_ecn_segmentation": "off",

                "tx_tcp_segmentation": "on",

                "tx_udp_tnl_segmentation": "off [fixed]",

                "tx_vlan_offload": "on [fixed]",

                "udp_fragmentation_offload": "off [fixed]",

                "vlan_challenged": "off [fixed]"

            },

            "ipv4": {

                "address": "10.0.0.8",

                "broadcast": "10.0.0.255",

                "netmask": "255.255.255.0",

                "network": "10.0.0.0"

            },

            "ipv6": [

                {

                    "address": "fe80::20c:29ff:fecf:1335",

                    "prefix": "64",

                    "scope": "link"

                }

            ],

            "macaddress": "00:0c:29:cf:13:35",

            "module": "e1000",

            "mtu": 1500,

            "pciid": "0000:02:01.0",

            "promisc": false,

            "speed": 1000,

            "type": "ether"

        }

    },

    "changed": false

}

4.2 收集fact并且进行保存

ansible pythonserver -m setup --tree /tmp/facts

执行之后,会显示相关的fact,并且在/tmp/facts中会保存fact信息,如下:

[root@ansibleserver tmp]# ls -l /tmp/facts/

total 12

-rw-r--r-- 1 root root 8990 Jan 18 13:16 192.168.1.60

使用--tree选项,在分类的时候,会根据主机的名称进行分类

 收集内存信息并输出

 [root@ansibleserver tmp]# ansible pythonserver -m setup -a "filter=ansible_*_mb"

SSH password:

192.168.1.60 | success >> {

    "ansible_facts": {

        "ansible_memfree_mb": 746,

        "ansible_memtotal_mb": 996,

        "ansible_swapfree_mb": 2015,

        "ansible_swaptotal_mb": 2015

    },

    "changed": false

}

第5章 ping 模块

ping模块主要是无意义的测试模块,主要用来检查ansible是否可以用的模块以及python是否配置好的,在playbook中基本不会使用,在能成功连接之后,总是返回结果pong

[root@m01 scripts]# ansible oldboy -m ping

172.16.1.8 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

第6章 用户模块

用户模块主要用来管理用户账号和用户的属性(对远程主机用户进行批量管理)。

用户模块依赖的指令为useradduserdelusermod

参数

必填

默认值

选项

说明

Append

No

Yes/no

如果没有指定groupappend设定为yes,那么会添加到用户同名组;append设定为no,那么会添加到user组。如果指定了group,那么都会添加在指定的group

Comment

用户的备注信息

Force

No

Yes/no

当状态为absent的时候,相当于userdel -force

generate_ssh_key

No

Yes/no

是否生成秘钥

Group

可选的,设定用户的主组

Groups

用逗号分隔的组,当groups设定为空的时候,那么会移除除了主组的其他所有组

Home

可选的,设定为用户的home目录

Login_class

可选的,设定用户的登录类 FreeBSD, OpenBSD and NetBSD systems.

Name

用户创建,移除,修改

Move_home

No

Yes/no

如果使用了选项home=设置为yes,那么会将用户家目录移到不存在的home目录中

Non_unique

No

Yes/no

可选的,当使用-u选项的时候,将用户的uid设置为non_unique

Password

设定用户的密码

Remove

No

Yes/no

当使用状态为state=absent的时候,差不多和userdel --remove(删除所有信息)

Shell

设定用户的shell

Ssh_key_bits

2048

设定秘钥的位数

Ssh_key_comments

HOSTHOME

Ssh key备注信息

Ssh_key_file

.sha/id_rsa

秘钥的文件名

ssh_key_passphrase

Ssh秘钥的密码

Ssh_key_type

Rsa

Ssh秘钥的类型

State

Present

Present

Absent

新增删除

System

No

Yes/no

创建为系统账号,不会改变已经存在的用户

Uid

设定为用户的uid

Update_password

Always

Always

On_create

Always当用户

6.1 添加用户

[root@m01 scripts]# ansible oldboy -m user -a "name=xixi"

[root@web02 machangwei]# id xixi

uid=1003(xixi) gid=1003(xixi) groups=1003(xixi)

[root@m01 scripts]# ansible oldboy -m user -a "name=dong uid=576"

[root@web02 machangwei]# id dong

uid=576(dong) gid=576(dong) groups=576(dong)

[root@m01 scripts]# ansible oldboy -m user -a "name=nan group=xixi uid=579 comment='li li li'"

172.16.1.8 | SUCCESS => {

    "changed": true,

    "comment": "li li li",

    "createhome": true,

    "group": 1003,

    "home": "/home/nan",

    "name": "nan",

    "shell": "/bin/bash",

    "state": "present",

    "system": false,

    "uid": 579

}

[root@m01 scripts]# ansible oldboy -m user -a "name=bei group=xixi shell=/sbin/nologin/"

172.16.1.8 | SUCCESS => {

    "changed": true,

    "comment": "",

    "createhome": true,

    "group": 1003,

    "home": "/home/bei",

    "name": "bei",

    "shell": "/sbin/nologin/",

    "state": "present",

    "system": false,

    "uid": 1004

}

[root@m01 scripts]# ansible oldboy -m user -a "name=shang groups=xixi append=yes"                                 多个组

6.2 删除用户

[root@m01 scripts]# ansible oldboy -m user -a "name=shang state=absent remove=yes"

将用户强制删除

第7章 file模块

在之前ansible命令行的时候有copy模块,在playbook的时代自然也有一个模块专门负责文件的拷贝,当然这个时代它不仅仅是文件拷贝那么简单。

来自官方的解释:

file模块它包含了文件、文件夹、超级链接类的创立、拷贝、移动、删除操作。

常用参数:

参数名

是否必须

默认值

选项

说明

follow

no

no

yes/no

如果原来的文件是link,拷贝后依旧是link

force

no

no

yes/no

强制执行,没说的

group

no

 

 

设定一个群组拥有拷贝到远程节点的文件权限

mode

no

 

 

等同于chmod,参数可以为“u+rwx or u=rw,g=r,o=r”

owner

no

 

 

设定一个用户拥有拷贝到远程节点的文件权限

path

yes

 

 

目标路径,也可以用dest,name代替

src

yes

 

 

待拷贝文件/文件夹的原始位置。

state

no

file

file/link/directory/hard/touch/absent

file代表拷贝后是文件;link代表最终是个软链接;directory代表文件夹;hard代表硬链接;touch代表生成一个空文件;absent代表删除

修改文件的所有组、人、权限。

- file: path=/etc/foo.conf owner=foo group=foo mode=0644

# 操作链接的案例

- file: src=/file/to/link/to dest=/path/to/symlink owner=foo group=foo state=link

#参数化案例

- file: src=/tmp/{{ item.path }} dest={{ item.dest }} state=link

  with_items:

    - { path: 'x', dest: 'y' }

    - { path: 'z', dest: 'k' }

# 使用touch来创建一个空文件并定义权限

- file: path=/etc/foo.conf state=touch mode="u=rw,g=r,o=r"

# touch一个空文件,并且修改权限

- file: path=/etc/foo.conf state=touch mode="u+rw,g-wx,o-rwx"

7.1 创建目录

[root@m01 scripts]# ansible oldboy -m file -a "dest=/machangwei/dong state=directory"

172.16.1.41 | SUCCESS => {

    "changed": true,

    "gid": 0,

    "group": "root",

    "mode": "0755",

    "owner": "root",

    "path": "/machangwei/dong",

    "size": 4096,

    "state": "directory",

"uid": 0

[root@web02 machangwei]# ls

bb  cc  dd  dong  hostname.sh

7.2 创建多级目录

[root@m01 scripts]# ansible oldboy -m file -a "dest=/machangwei/s/s/d/f state=directory"

172.16.1.31 | SUCCESS => {

    "changed": true,

    "gid": 0,

    "group": "root",

    "mode": "0755",

    "owner": "root",

    "path": "/machangwei/s/s/d/f",

    "size": 4096,

    "state": "directory",

    "uid": 0

}

7.3 创建文件

[root@m01 scripts]# ansible oldboy -m file -a "dest=/machangwei/ming state=touch"

172.16.1.8 | SUCCESS => {

    "changed": true,

    "dest": "/machangwei/ming",

    "gid": 0,

    "group": "root",

    "mode": "0644",

    "owner": "root",

    "size": 0,

    "state": "file",

    "uid": 0

}

7.4 创建软链接

[root@m01 scripts]# ansible oldboy -m file -a "src=/machangwei/ming dest=/machangwei/sisi state=link"

172.16.1.8 | SUCCESS => {

    "changed": true,

    "dest": "/machangwei/sisi",

    "gid": 0,

    "group": "root",

    "mode": "0777",

    "owner": "root",

    "size": 16,

    "src": "/machangwei/ming",

    "state": "link",

    "uid": 0

}

7.5 删除文件目录

[root@m01 scripts]# ansible oldboy -m file -a "dest=/machangwei/ming state=absent"

172.16.1.31 | SUCCESS => {

    "changed": true,

    "path": "/machangwei/ming",

"state": "absent"

[root@m01 scripts]# ansible oldboy -m file -a "dest=/machangwei/a state=absent"

172.16.1.8 | SUCCESS => {

    "changed": true,

    "path": "/machangwei/a",

    "state": "absent"

}                                         a多级目录

第8章 fetch模块

8.1 拉取文件

[root@m01 scripts]# ansible oldboy -m fetch -a "src=/machangwei/bb dest=/server/scripts/"

172.16.1.8 | SUCCESS => {

    "changed": true,

    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",

    "dest": "/server/scripts/172.16.1.8/machangwei/bb",

    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",

    "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",

"remote_md5sum": null

[root@m01 scripts]# ansible oldboy -m fetch -a "src=/machangwei/dong dest=/server/scripts/"

172.16.1.41 | SUCCESS => {

    "changed": false,

    "file": "/machangwei/dong",

    "msg": "remote file is a directory, fetch cannot work on directories"目录不可啦

[root@m01 scripts]# ansible oldboy -m fetch -a "src=/machangwei/bb dest=/server/scripts/"

172.16.1.8 | SUCCESS => {

    "changed": true,

    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",

    "dest": "/server/scripts/172.16.1.8/machangwei/bb",

    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",

    "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",

    "remote_md5sum": null

}

第9章 mount模块

[root@m01 scripts]# ansible oldboy -m mount -a "fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=mounted"

172.16.1.8 | SUCCESS => {

    "changed": true,

    "dump": "0",

    "fstab": "/etc/fstab",

    "fstype": "nfs",

    "name": "/mnt",

    "opts": "ro",

    "passno": "0",

"src": "172.16.1.31:/data"

}

[root@web02 tmp]# tail -2 /etc/fstab

proc                    /proc                   proc    defaults        0 0

172.16.1.31:/data /mnt nfs ro 0 0

卸载

[root@m01 scripts]# ansible oldboy -m mount -a "fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=unmounted"

第10章 shell模块

shell模块和command模块功能类似,但是shell模块可以识别一些特殊符号信息 > >> | * ^

[root@m01 scripts]# ansible oldboy -m shell -a "cd /machangwei;pwd;hostname"

172.16.1.41 | SUCCESS | rc=0 >>

/machangwei

backup

第11章 yum模块

ansible oldboy -m yum -a "name=nmap state=installed"

参数名

是否必须

默认值

选项值

参数说明

conf_file

 

 

设定远程yum执行时所依赖的yum配置文件

disable_gpg_check

No

Yes/No

在安装包前检查包,只会影响state参数为present或者latest的时候

list

No

 

 

只能由ansible调用,不支持playbook,这个干啥的大家都懂

name

Yes

 

 

你需要安装的包的名字,也能如此使用name=python=2.7安装python2.7

state

no

present

present/latest/absent

用于描述安装包最终状态,present/latest用于安装包,absent用于remove安装包

update_cache

no

no

yes/no

用于安装包前执行更新list,只会影响state参数为present/latest的时候

第12章 service模块

ansible oldboy -m service -a "name=crond state=stop enabled=no"

第13章 script模块

参考:

http://blog.csdn.net/kellyseeme/article/details/50539312

http://blog.csdn.net/wanghailong041/article/details/45770359

http://10786462.blog.51cto.com/10776462/1886774

第14章 我的第一个剧本

14.1 nfs自动化剧本

- hosts: oldboy

  tasks:

    - name: step01

      yum: name=rpcbind state=installed

    - name: step02

      yum: name=nfs-utils state=installed

- hosts: 172.16.1.31

  tasks:

    - name: step03

      copy: content="/data/ 172.16.1.0/24(rw,sync)" dest=/etc/exports

    - name: step04

      shell: mkdir -p /data;chown nfsnobody.nfsnobody /data

    - name: step05

      command: /etc/init.d/rpcbind start

    - name: step06

      command: /etc/init.d/nfs start

    - name: step07

      shell: ps -ef|grep nfs

    - name: step11

      copy: content="wo hen shan liang" dest=/data/oldboy.txt

- hosts: nfs-C

  tasks:

    - name: step08

      command: /etc/init.d/rpcbind start

    - name: step09

      shell: mount -t nfs 172.16.1.31:/data /mnt

    - name: step10

      command: df -h

- hosts: 172.16.1.7

  tasks:

    - name: step12

      command: touch /mnt/11

- hosts: 172.16.1.8

  tasks:

    - name: step13

      command: touch /mnt/22

- hosts: 172.16.1.41

  tasks:

    - name: step14

      command: touch /mnt/33

- hosts: 172.16.1.31

  tasks:

    - name: step15

      command: ls -l /data/

原文地址:https://www.cnblogs.com/machangwei-8/p/10405626.html