文章目录
- 1.ansible 常用命令
- 1.1 ansible 命令集
- 1.2 ansible-doc 命令
- 2.ansible 命令详解
- 3.ansible 常用模块
- 3.1 command 模块
- 3.2 ping 模块
- 3.3 cron 模块
- 3.4 user 模块
- 3.4.1 user 模块作用
- 3.4.2 user 模块参数
- 3.4.3 user 命令操作
- 3.5 group 模块
- 3.6 copy 模块
- 3.6.1 copy 模块的作用
- 3.6.2 copy 模块常用参数
- 3.6.3 copy 命令操作
- 3.7 file 模块
- 3.7.1 file 模块作用
- 3.7.2 file 模块常用参数
- 3.7.3 file 命令操作
- 3.8 yum 模块
- 3.8.1 yum 模块的作用
- 3.8.2 应用示例
- 3.9 service 模块
- 3.9.1 service 模块作用
- 3.9.2 service 模块参数
- 3.9.3 应用示例
- 3.10 shell 模块
- 3.10.1 shell 模块作用
- 3.10.2 shell 模块常用参数
- 3.10.3 应用示例
- 3.11 script 模块
- 3.11.1 script 模块作用
- 3.11.2 script 模块常用参数
- 3.11.3 应用示例
- 3.12 setup 模块
- 4.总结
1.ansible 常用命令
1.1 ansible 命令集
/usr/bin/ansible ##Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc ##Ansible 模块功能查看工具
/usr/bin/ansible-galaxy ##下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook ##Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull ##Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault ##Ansible 文件加密工具
/usr/bin/ansible-console ##Ansible基于Linux Consoble界面可与用户交互的命令执行工具
其中,我们比较常用的是/usr/bin/ansible和/usr/bin/ansible-playbook。
1.2 ansible-doc 命令
- ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下:
ansible-doc -l ##获取全部模块的信息
ansible-doc -s MOD_NAME ##获取指定模块的使用帮助
- 查看一下ansible-doc的全部用法:
[root@master ~]# ansible-doc
Usage: ansible-doc [options] [module...]
Options:
-h, --help show this help message and exit #显示命令参数API文档
-l, --list List available modules #列出可用的模块
-M MODULE_PATH, --module-path=MODULE_PATH #指定模块的路径
specify path(s) to module library (default=None)
-s, --snippet Show playbook snippet for specified module(s) #显示playbook制定模块的用法
-v, --verbose verbose mode (-vvv for more, -vvvv to enable #显示ansible-doc的版本号查看模块列表:
connection debugging)
--version show program's version number and exit
- 以mysql相关的为例:
[root@master ~]# ansible-doc -l | grep mysql
mysql_info Gather information about MySQL s...
mysql_db Add or remove MySQL databases fr...
mysql_variables Manage MySQL global variables
mysql_user Adds or removes a user from a My...
mysql_replication Manage MySQL replication
2.ansible 命令详解
- 命令的具体格式如下:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
- 也可以通过ansible -h来查看帮助
- 下面列出一些比较常用的选项,并解释其含义:
-m,MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-a,MODULE_ARGS #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等
-k,--ask-pass #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass #ask for su password。su切换密码
-K,--ask-sudo-pass #ask for sudo password。提示密码使用sudo,sudo表示提权操作
--ask-vault-pass #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
-B,SECONDS #后台运行超时时间
-C #模拟运行环境并进行预运行,可以进行查错测试
-c,CONNECTION #连接类型使用
-f,FORKS #并行任务数,默认为5
-i,INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts #查看有哪些主机组
-o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
-S #用 su 命令
-R,SU_USER #指定 su 的用户,默认为 root 用户
-s #用 sudo 命令
-U,SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户
-T,TIMEOUT #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
-u,REMOTE_USER #远程用户,默认为 root 用户
-v #查看详细信息,同时支持-vvv,-vvvv可查看更详细信息
3.ansible 常用模块
这里ansible主机清单如下:
[webserver]
192.168.140.21 --》对应node1
[mysql]
192.168.140.22 --》对应node2
3.1 command 模块
- 命令格式
ansible 主机标识/ip -m 模块 -a "参数"
- 应用示例
指定IP执行date
[root@master ~]# ansible webserver -m command -a 'date'
192.168.140.21 | CHANGED | rc=0 >>
2021年 01月 14日 星期四 01:15:00 CST
[root@master ~]# ansible 192.168.140.21 -m command -a 'date'
192.168.140.21 | CHANGED | rc=0 >>
2021年 01月 14日 星期四 01:15:00 CST
[root@master ~]# ansible all -m command -a 'date' //选择所有主机
192.168.140.21 | CHANGED | rc=0 >>
2021年 01月 20日 星期三 00:34:32 CST
192.168.140.22 | CHANGED | rc=0 >>
2020年 12月 14日 星期一 18:08:33 CST
3.2 ping 模块
- Ansible 最基础的模块是ping模块,主要用于判断远程客户端是否在线
- 用于ping本身服务器返回值是changed、 ping
[root@master ~]# ansible all -m ping
192.168.140.22 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.140.21 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
3.3 cron 模块
- 两种状态(state) :
present 表示添加 (可以省略),absent 表示移除 - 应用示例
1)创建计划任务
[root@master ~]# ansible webserver -m cron -a 'minute="*/1" job="/usr/bin/echo This is server1 >> /opt/server1.txt" name="cron server1"'
192.168.140.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": [],
"jobs": [
"cron server1"
]
}
//选择webserver主机每分钟输出一次、/usr/bin/echo输出This is server1给/opt目录下的 server1.txt、任务名为 cron server1
2)查看 node1 节点的计划任务
[root@master ~]# ansible webserver -a 'crontab -l'
192.168.140.21 | CHANGED | rc=0 >>
#Ansible: cron server1
*/1 * * * * /usr/bin/echo This is server1 >> /opt/server1.txt
3)到 node1 节点上验证
[root@node1 ~]# cd /opt/
[root@node1 opt]# ll
总用量 4
drwxr-xr-x. 2 root root 6 3月 26 2015 rh
-rw-r--r--. 1 root root 64 1月 20 00:45 server1.txt
[root@node1 opt]# cat server1.txt
This is server1
This is server1
This is server1
This is server1
- 删除计划任务
[root@master ~]# ansible webserver -m cron -a 'name="cron server1" state=absent'
192.168.140.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": [],
"jobs": []
}
- 再次查看计划任务
[root@master ~]# ansible webserver -a 'crontab -l'
192.168.140.21 | CHANGED | rc=0 >>
3.4 user 模块
3.4.1 user 模块作用
- user模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等
- user模块是请求的是useradd、userdel、usermod三个指令
3.4.2 user 模块参数
name参数:必须参数,用于指定要操作的用户名称,可以使用别名user
group参数:此参数用于指定用户所在的基本组
gourps参数:此参数用于指定用户所在的附加组,注意:如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合append参数使用,否则在默认情况下,当再次使用groups参数设置附加组时,用户原来的附加组会被覆盖
append参数:如果用户原本就存在多个附加组,那么当使用groups参数设置附加组时,当前设置会盖原来的附加组设置。
如果不想覆盖原来的附加组设置,需要结合append参数,将append设置为yes,表示追加附加组到现有的附加组设置,append默认值为no
shell参数:此参数用于指定用户的默认shell
uid参数:此参数用于指定用户的uid号
expires参数:此参数用于指定用户的过期时间,相当于设置/etc/shadow文件中的的第8列,目前此参数只支持在Linux和EreeBSD系统中使用
comment参数:此参数用于指定用户的注释信息
state参数:此参数用于指定用户是否存在于远程主机中,可选值有present、absent,默认值为present,表示用户需要存在,当设为absent时表示删除用户
remove参数:当state的值设置为absent时,表示要删除远程主机中的用户,但是在删除用户时,不会删除用户的家目录等信息。
这是因为remoove参数的默认值为no;如果设置为yes,在删除用户的同时,会删除用户的家目录,当state=absent并且remove=yes时,相当于执行"userdel -r"命令
passWord参数:此参数用于指定用户的密码,但是这个密码不能是明文的密码,而是一个对明文密码"加密后"的字符串,相当于/etc/shadow文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在python的命令提示符下输入如下命令,生成明文密码对应的加密字符串:
import crypt crypt.crypt ( ' 666666 ' ) 输入上述命令后,即可得到明文密码666666对应的加密字符串
date_password参数:此参数有两个值可选:always和on_create。
当此参数的值设置为always时表示如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always。
但是当此参数设置为on_create时,如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定,如果是新创建的用户,即使此参数设为on_create,也会将用户的密码设置为password参数对应的值
3.4.3 user 命令操作
- node1 和 node2 创建用户
[root@master ~]# ansible all -m user -a 'name="namei"'
192.168.140.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": 1001,
"home": "/home/namei",
"name": "namei",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1001
}
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": 1001,
"home": "/home/namei",
"name": "namei",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1001
}
- 节点验证
[root@node1 ~]# id namei
uid=1001(namei) gid=1001(namei) 组=1001(namei)
[root@node2 ~]# id namei
uid=1001(namei) gid=1001(namei) 组=1001(namei)
- 删除 node1 的 namei 用户
[root@master ~]# ansible webserver -m user -a 'name="namei" state="absent"'
192.168.140.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"force": false,
"name": "namei",
"remove": false,
"state": "absent"
}
- node1 节点验证
[root@node1 ~]# id namei
id: namei: no such user
3.5 group 模块
- group模块请求的是groupadd, groupdel, groupmod三个指令
- 应用示例
1)创建组并将 namei 加入组
[root@master ~]# ansible mysql -m group -a 'name=ab gid=1007 system=yes' //创建组ab
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 1007,
"name": "ab",
"state": "present",
"system": true
}
[root@node2 ~]# getent group | grep ab //在对应的node2节点上验证
tape:x:30:amandabackup
abrt:x:173:
ab:x:1007:
将节点2上的namei用户添加到ab组
[root@master ~]# ansible mysql -m user -a 'name=namei uid=1007 system=yes group=ab'
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"append": false,
"changed": true,
"comment": "",
"group": 1007,
"home": "/home/namei",
"move_home": false,
"name": "namei",
"shell": "/bin/bash",
"state": "present",
"uid": 1007
}
2)查看结果
[root@node2 ~]# id namei
uid=1007(namei) gid=1007(ab) 组=1007(ab)
3.6 copy 模块
3.6.1 copy 模块的作用
- copy模块的作用就是拷贝文件,它与之前介绍过的fetch模块类似。不过,fetch模块是从远程主机中拉取文件到ansible管理主机,而 copy模块是将ansible管理主机上的文件拷贝到远程主机中
3.6.2 copy 模块常用参数
- src参数:用于指定需要copy的文件或目录
- dest参数:用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数
- content参数:当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错
- force参数:当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变
- backup参数:当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机
- owner参数:指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错
- group参数:指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错
- mode参数:指定文件拷贝到远程主机后的权限,如果你想将权限设置为"TW–",则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示
3.6.3 copy 命令操作
- 将/etc/fstab文件备份到目标 /opt/fstab.bak文件里面,属主为 namei,权限为 600
[root@master ~]# ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=namei mode=600'
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "2a8e1b7fd3df8864fb168a42ef385027600b1ad7",
"dest": "/opt/fstab.bak",
"gid": 0,
"group": "root",
"md5sum": "653255b8de8fbe366b9f9024e1e07c16",
"mode": "0600",
"owner": "namei",
"secontext": "system_u:object_r:usr_t:s0",
"size": 690,
"src": "/root/.ansible/tmp/ansible-tmp-1611075979.37-68236-205339789297678/source",
"state": "file",
"uid": 1007
}
- 到对应的 node2 上节点验证
[root@node2 ~]# cd /opt
[root@node2 opt]# ll
总用量 12
-rw-------. 1 namei root 690 12月 14 18:40 fstab.bak
- 生成一个文件备份到目标文件
[root@master ~]# ansible mysql -m copy -a 'content="This is my server1" dest=/opt/server.txt'
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "069687ec920bf07271b9a00c3c45c861c30bf9e2",
"dest": "/opt/server.txt",
"gid": 0,
"group": "root",
"md5sum": "d373cf366e0a72514faf5a0e70c20ea8",
"mode": "0644",
"owner": "root",
"secontext": "system_u:object_r:usr_t:s0",
"size": 18,
"src": "/root/.ansible/tmp/ansible-tmp-1611076136.83-68293-205300087695242/source",
"state": "file",
"uid": 0
}
- node2 节点验证
[root@node2 ~]# cat /opt/server.txt
This is my server1
3.7 file 模块
3.7.1 file 模块作用
- file模块可以帮助我们完成一些对文件的基本操作。
比如,创建文件或目录、删除文件或目录、修改文件权限等。
3.7.2 file 模块常用参数
- path参数:必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以。
- state参数:此参数非常灵活,其对应的值需要根据情况设定。
1) 当我们想要创建的/testdirla/b是一个目录时,需要将state的值设置为directory , "drectory"为目录之意,当它与path结合,ansible就能知道我们要操作的目标是一个目录。
2) 同理,当我们想要操作的/testdirlalb是一个文件时,则需要将state的值设置为touch。
3) 当我们想要创建软链接文件时,需将state设置为link。想要创建硬链接文件时,需要将state设置为hard。
4) 当我们想要删除一个文件时(删除时不用区分目标是文件、目录、还是链接),则需要将state的值设置为absent,"absent"为缺席之意,当我们想让操作的目标"缺席"时,就表示我们想要删除目标。
5) src:当state设置为link或 hard 时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源。
- force参数:state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。
强制创建链接文件分为三种情况。
1) 情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。
2) 情况二∶当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。
3) 情况三︰当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。
- owner参数:于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。
- group参数:于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。
- mode参数:于指定被操作文件的权限,比如,如果想要将文件权限设置为TW-F-X—",则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的。如果想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700.
3.7.3 file 命令操作
- 修改文件的属组
[root@master ~]# ansible mysql -m file -a 'owner=root group=ab mode=666 path=/opt/fstab.bak'
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 1007,
"group": "ab",
"mode": "0666",
"owner": "root",
"path": "/opt/fstab.bak",
"secontext": "system_u:object_r:usr_t:s0",
"size": 690,
"state": "file",
"uid": 0
}
- node2 节点验证
[root@node2 ~]# cd /opt
[root@node2 opt]# ll
总用量 16
-rw-rw-rw-. 1 root ab 690 12月 14 18:40 fstab.bak
- 设置/opt/fstab.link为/opt/fstab.back的链接文件
[root@master ~]# ansible mysql -m file -a 'path=/fstab.link src=/opt/fstab.bak state=link'
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"dest": "/fstab.link",
"gid": 0,
"group": "root",
"mode": "0777",
"owner": "root",
"secontext": "unconfined_u:object_r:root_t:s0",
"size": 14,
"src": "/opt/fstab.bak",
"state": "link",
"uid": 0
}
- node2 节点验证
[root@node2 ~]# cd /opt
[root@node2 opt]# ll /
...
lrwxrwxrwx. 1 root root 14 12月 14 18:51 fstab.link -> /opt/fstab.bak
- 删除链接文件
[root@master ~]# ansible mysql -m file -a 'path=/fstab.link state=absent'
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"path": "/fstab.link",
"state": "absent"
}
- 创建文件并授权
[root@master ~]# ansible mysql -m file -a 'path=/opt/abc state=touch'
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"dest": "/opt/abc",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:usr_t:s0",
"size": 0,
"state": "file",
"uid": 0
}
[root@master ~]# ansible mysql -m file -a 'path=/opt/share state=directory mode=777'
192.168.140.22 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 0,
"group": "root",
"mode": "0777",
"owner": "root",
"path": "/opt/share",
"secontext": "unconfined_u:object_r:usr_t:s0",
"size": 6,
"state": "directory",
"uid": 0
}
3.8 yum 模块
3.8.1 yum 模块的作用
- 用于 yum 仓库软件的安装与卸载
3.8.2 应用示例
- 安装软件
[root@master ~]# ansible webserver -m yum -a 'name=httpd'
- node1 节点验证
[root@node1 ~]# rpm -q httpd
httpd-2.4.6-67.el7.centos.x86_64
- 卸载软件
[root@master ~]# ansible webserver -m yum -a 'name=httpd state=absent'
- node1 节点验证
[root@node1 ~]# rpm -q httpd
未安装软件包 httpd
3.9 service 模块
3.9.1 service 模块作用
- service模块可以帮助我们餐管理远程主机.上的服务。比如,启动或停止远程主机中的apache服务
3.9.2 service 模块参数
- name参数:参数用于指定需要操作的服务名称,比如httpd
- state参数:参数用于指定服务的状态,比如:
我们想要启动远程主机中的httpd,则可以将state的值设置为started;
要停止远程主机中的服务,则可以将state的值设置为stopped。
此参数的可用值有started、stopped、restarted、reloaded - enabled参数:参数用于指定是否将服务设为开机启动项,设置为yes表示将对应服务设置为开机启动,设置为no表示不会开机启动
3.9.3 应用示例
- 首先还是安装软件
[root@master ~]# ansible webserver -m yum -a 'name=httpd'
- 开启服务
[root@master ~]# ansible webserver -m service -a 'name=httpd state=started enabled=true'
- 查看服务状态
[root@master ~]# ansible webserver -a 'systemctl status httpd'
3.10 shell 模块
3.10.1 shell 模块作用
- shell模块可以帮助我们在远程主机上执行命令。与command.模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理。
3.10.2 shell 模块常用参数
- free_form参数:指定需要远程执行的命令,但是并没有具体的一个参数名叫free_form,具体解释参考command模块。
- chdir参数:参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
- creates参数:用此参数指定一个文件,当指定的文件存在时,就不执行对应命令,可参考command模块中的解释。
- removes参数:用此参数指定一个文件,当指定的文件不存在时,就不执行对应命令,可参考command模块中的解释。
- executable参数:默认情况下,shell模块会调用远程主机中的/binlsh去执行对应的命令。通常情况下,远程主机中的默认shelI都是bash。如果你想要使用其他类型的 shell 执行命令,则可以使用此参数指定某种类型的shell去执行对应的命令。注意:指定shell文件时,需要使用绝对路径。
3.10.3 应用示例
- 指定工作目录,在执行对应的命令之前,会先进入到 chdir 参数指定的目录中
[root@master ~]# ansible webserver -m shell -a 'chdir=/usr/local echo yql > y.txt'
192.168.140.21 | CHANGED | rc=0 >>
验证
[root@node1 ~]# cd /usr/local/
[root@node1 local]# ll
...
-rw-r--r--. 1 root root 4 1月 20 01:40 y.txt
- 注意:command 参数不识别追加符号;shell 模块参数能识别追加符号
3.11 script 模块
3.11.1 script 模块作用
- script模块可以帮助我们在远程主机上执行ansible管理主机上的脚本,也就是说,脚本一直存在于ansible管理主机本地,不需要手动拷贝到远程主机后再执行。
3.11.2 script 模块常用参数
- free_form参数︰必须参数,指定需要执行的脚本,脚本位于ansible管理主机本地,并没有具体的一个参数名叫free_form
- chdir参数∶此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到chdir参数指定的目录中。
- creates参数∶使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本。
- removes参数∶使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本。
3.11.3 应用示例
- 创建一个脚本
[root@master ~]# vi ax.sh
#!/bin/bash
echo "This is my web1" > /opt/web.txt
- 在所有主机上运行脚本
[root@master ~]# ansible all -m script -a 'ax.sh'
192.168.140.21 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.140.21 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.140.21 closed."
],
"stdout": "",
"stdout_lines": []
}
192.168.140.22 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.140.22 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.140.22 closed."
],
"stdout": "",
"stdout_lines": []
}
- 在对应的主机节点上查看
[root@node1 ~]# cat /opt/web.txt
This is my web1
[root@node2 ~]# cat /opt/web.txt
This is my web1
3.12 setup 模块
- setup 模块作用
setup模块用于收集远程主机的—些基本信息 - setup 模块常用参数
filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。 - 应用示例
查看node1 节点主机参数
[root@master ~]# ansible webserver -m setup
4.总结
- ansible模块有很多,我们要根据实际情况去选择并合理应用。部分模块有共通性,我们可以理解结合记忆,避免出现模糊不清的概念。