ansible命令详解与ansible常用模块介绍

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 >>
20210114日 星期四 01:15:00 CST
[root@master ~]# ansible 192.168.140.21 -m command -a 'date'
192.168.140.21 | CHANGED | rc=0 >>
20210114日 星期四 01:15:00 CST

[root@master ~]# ansible all -m command -a 'date'	//选择所有主机
192.168.140.21 | CHANGED | rc=0 >>
20210120日 星期三 00:34:32 CST
192.168.140.22 | CHANGED | rc=0 >>
20201214日 星期一 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 326 2015 rh
-rw-r--r--. 1 root root 64 120 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 1214 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 1214 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 1214 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 120 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模块有很多,我们要根据实际情况去选择并合理应用。部分模块有共通性,我们可以理解结合记忆,避免出现模糊不清的概念。

猜你喜欢

转载自blog.csdn.net/weixin_42449832/article/details/112598318