自动化运维 ansible 模块详解

本文详细介绍了Ansible自动化运维工具,包括其概念、特点和架构。Ansible通过模块化工作,如ping、command、cron、user、group、copy、file、yum、service、shell、script和setup模块,实现系统配置、程序部署和命令执行等功能。文章还涵盖了Ansible的部署环境设置,如主机清单、密钥对验证,以及常用系统模块的实例应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ansible 概述

一:什么是 ansible

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet 、 cfengine 、 chef 、 func 、 fabic)的优点,实现了批里系统配置、批里程序部署、批里运行命令等功能。

ansible是基于模块工作的,本身没有批里部署的能力。真正具有批里部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

  • (1)、连接插件connection plugins:负责和被监控端实现通信;
  • (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
  • (3)、各种模块核心模块、command模块﹑自定义模块;
  • (4)、借助于插件完成记录日志邮件等功能;
  • (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

二:ansible 特点

  1. 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  2. 默认使用SSH协议对设备进行管理;
  3. 有大量常规运维操作模块,可实现日常绝大部分操作;
  4. 配置简单、功能虽大、扩展性强;
  5. 支持API及自定义模块,可通过Python轻松扩展;
  6. 通过Playbooks来定制强大的配置、状态管理;
  7. 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行—次更新即可;
  8. 提供一个功能强大、操作性强的Web管理界面和REST API接口———AWX平台。

三:ansible 架构图

在这里插入图片描述
主要模块

  • Ansible:Ansible核心程序
  • HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等
  • Playbooks :“剧本” YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能
  • CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务
  • CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言
  • ConnectionPlugins:连接插件,Ansible和Host通信使用

部署自动化运维

一:ansible 部署环境

  • 管理端 master:20.0.0.11
  • 被管理端 node1:20.0.0.12
  • 被管理端 node2:20.0.0.13

二:软件安装

[root@master ~]# yum -y install epel-release              # 安装 epel源
[root@master ~]# yum -y install ansible

查看版本

[root@master ~]# ansible --version
ansible 2.9.16
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]

查看树状结构展示文件夹

[root@master ~]# yum -y install tree
[root@master ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg
├── hosts
└── roles

三:master 配置主机清单

[root@master ~]# vi /etc/ansible/hosts 
添加
[server1]
20.0.0.12
[server2]
20.0.0.13

四:配置密钥对验证

生产密钥

[root@master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):       密码:123123
Enter same passphrase again:                      密码:123123
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Y6SqzzdPgcH1ya7yRn/2D1BI4Xuquhw9Sy2Y6r2EnBE root@master
The key's randomart image is:
+---[RSA 2048]----+
|        .   o.   |
|     . . o + .   |
|      E . + o .  |
|       * .   o   |
|      + S . o .  |
|     o =.B . +   |
|    . =.B.= o .  |
|   o  oO.o.=o  . |
|  ..ooo+O+oo ....|
+----[SHA256]-----+

将公钥发送给 node1 和 node2

[root@master ~]# ssh-copy-id root@20.0.0.12
[root@master ~]# ssh-copy-id root@20.0.0.13

免交互代理

[root@master ~]# ssh-agent bash
[root@master ~]# ssh-add
Enter passphrase for /root/.ssh/id_rsa:              密码:123123
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)

五:ansible 常用系统模块

1:ansible ping 模块

  • Ansible 最基础的模块是ping模块,主要用于判断远程客户端是否在线,用于ping本身服务器,返回值是changed、 ping
[root@master ~]# ansible all -m ping
20.0.0.13 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
20.0.0.12 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

2:ansible command 模块

命令格式:ansible 主机标识/ip -m模块 -a’参数"

  • 输出 node1 和node2 的时间
[root@master ~]# ansible server1 -m command -a 'date'
20.0.0.12 | CHANGED | rc=0 >>
20210109日 星期六 16:18:34 CST
[root@master ~]# ansible server2 -m command -a 'date'
20.0.0.13 | CHANGED | rc=0 >>
20210111日 星期一 19:54:25 CST
  • 同时输出 node1 和 node2 时间
[root@master ~]# ansible all -m command -a 'date'
20.0.0.13 | CHANGED | rc=0 >>
20210111日 星期一 19:55:23 CST
20.0.0.12 | CHANGED | rc=0 >>
20210109日 星期六 16:19:39 CST

3:ansible cron 模块

两种状态(state) : present 表示添加(可以省略),absent 表示移除

  • 创建计划任务
[root@master ~]# ansible server1 -m cron -a 'minute="*/1" job="/usr/bin/echo this is server1 >> /opt/server1.txt" name="cron server1"'
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "cron server1"
    ]
}
# 时间为每分钟输出一次、/usr/bin/echo 输出 this is server1 给 /opt 的 server1.txt、任务名为 cron server1
  • 查看 node1 节点的计划任务
[root@master ~]# ansible server1 -a 'crontab -l'
20.0.0.12 | CHANGED | rc=0 >>
#Ansible: cron server1
*/1 * * * * /usr/bin/echo this is server1 >> /opt/server1.txt
  • 到 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 96 19 16:32 server1.txt
[root@node1 opt]# cat server1.txt 
this is server1
this is server1
this is server1
this is server1
this is server1
this is server1
  • 删除计划任务
[root@master ~]# ansible server1 -m cron -a 'name="cron server1" state=absent'
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": []
}
  • 再次查看计划任务
[root@master ~]# ansible server1 -a 'crontab -l'
20.0.0.12 | CHANGED | rc=0 >>

4:ansible user 模块

(1)user 模块作用

  • user模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等
  • user模块是请求的是useradd, userdel, usermod三个指令

(2)user 模块参数

  • name参数:必须参数,用于指定要操作的用户名称,可以使用别名user

  • group参数:此参数用于指定用户所在的基本组

  • gourps参数:此参数用于指定用户所在的附加组,注意:如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合append参数使用,否则在默认情况下,当再次使用groups参数设置附加组时,用户原来的附加组会被覆盖

  • append参数:如果用户原本就存在多个附加组,那么当使用groups参数设置附加组时,当前设置会盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合append参数,将append设置为yes,表示追加附加组到现有的附加组设置,append默认值为no

  • shell参数:此参数用于指定用户的默认shell

  • uid参数:此参数用于指定用户的uid号

  • expires参数:此参数用于指定用户的过期时间,相当于设置letclshadow文件中的的第8列,比如:你想要设置用户的过期日期为2020年12月31日,那么你首先要获取到2020年12月31日的unix时间戳,使用命令"date -d2020-12-31+%s"获取到的时间戳为1609344000,所以,当设fexpires=1609344000时,表示用户的过期时间为2020年12月31日O点0分,设成功后,查看远程主机的/etclshadow文件,对应用户的第八列的值将变成18626(表示1970年1月1日到2020年12月31日的天数,unix时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在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对应的加密字符串
    up

  • date_password参数:此参数有两个值可选:always和on_create,当此参数的值设置为always时表示如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always。但是当此参数设置为on_create时,如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定,如果是新创建的用户,即使此参数设为on_create,也会将用户的密码设置为password参数对应的值

(3)操作

  • node1 和 node2 创建用户
[root@master ~]# ansible all -m user -a 'name="jack"'
20.0.0.13 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 1001, 
    "home": "/home/jack", 
    "name": "jack", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": false, 
    "uid": 1001
}
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 1001, 
    "home": "/home/jack", 
    "name": "jack", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": false, 
    "uid": 1001
}
  • 节点验证
[root@node1 ~]# id jack
uid=1001(jack) gid=1001(jack)=1001(jack)
[root@nide2 ~]# id jack
uid=1001(jack) gid=1001(jack)=1001(jack)
  • 删除 node2 的 jack 用户
[root@master ~]# ansible server2 -m user -a 'name="jack" state="absent"'
20.0.0.13 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "force": false, 
    "name": "jack", 
    "remove": false, 
    "state": "absent"
}
  • node2 节点验证
[root@nide2 ~]# id jack
id: jack: no such user

5:ansible group 模块

group模块请求的是groupadd, groupdel, groupmod三个指令

  • 创建组并将 jack 加入组

(1)创建组

[root@master ~]# ansible server1 -m group -a 'name=aaa gid=1111 system=yes'
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 1111, 
    "name": "aaa", 
    "state": "present", 
    "system": true
}

(2)在 node1 节点上查看

[root@node1 ~]# getent group | grep aaa
aaa:x:1111:

(3)将 jack 加入 aaa 组

[root@master ~]# ansible server1 -m user -a 'name=jack uid=1111 system=yes group=aaa'
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "append": false, 
    "changed": true, 
    "comment": "", 
    "group": 1111, 
    "home": "/home/jack", 
    "move_home": false, 
    "name": "jack", 
    "shell": "/bin/bash", 
    "state": "present", 
    "uid": 1111
}

(4)在 node1 节点上查看

[root@node1 ~]# id jack
uid=1111(jack) gid=1111(aaa)=1111(aaa)

6:ansible copy 模块

(1)copy 模块的作用

  • copy模块的作用就是拷贝文件,它与之前介绍过的fetch模块类似,不过,fetch模块是从远程主机中拉取文件到ansible管理主机,而 copy模块是将ansible管理主机上的文件拷贝到远程主机中

(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)操作

  • 将 /etc/fstab 文件备份到目标 /opt/fstab.bak文件里面,属主为 jack,权限为 600
[root@master ~]# ansible server1 -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=jack mode=600'
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "bb01ca6faf79ce87150e31e903f1ca3d49fb234a", 
    "dest": "/opt/fstab.bak", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "0d117018d027225f8dd19df8a4ba080a", 
    "mode": "0600", 
    "owner": "jack", 
    "secontext": "system_u:object_r:usr_t:s0", 
    "size": 617, 
    "src": "/root/.ansible/tmp/ansible-tmp-1610187428.53-55722-119712979311725/source", 
    "state": "file", 
    "uid": 1111
}
  • node1 节点验证
[root@node1 ~]# cd /opt/
[root@node1 opt]# ll
总用量 8
-rw-------. 1 jack root 617 19 18:00 fstab.bak
  • 生成一个文件备份到目标文件
[root@master ~]# ansible server1 -m copy -a 'content="this is my server" dest=/opt/server.txt'
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "77f30e925a323a230dc5316434d10622e429c801", 
    "dest": "/opt/server.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d31d4927c99cbbbbc148bb6b44077dea", 
    "mode": "0644", 
    "owner": "root", 
    "secontext": "system_u:object_r:usr_t:s0", 
    "size": 17, 
    "src": "/root/.ansible/tmp/ansible-tmp-1610187860.66-55820-102504163216950/source", 
    "state": "file", 
    "uid": 0
}
  • node1 节点验证
[root@node1 ~]# cat /opt/server.txt 
this is my server

7:ansible file 模块

(1)file 模块作用

  • file模块可以帮助我们完成一些对文件的基本操作。比如,创建文件或目录、删除文件或目录、修改文件权限等。

(2)file 模块常用参数

  • path参数:必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以。
  • state参数:此参数非常灵活,其对应的值需要根据情况设定。比如,我们想要在远程主机上创建testdiralb目录,那么则需要设置path=/testdirla/b,但是,我们无法从"testdir/alb"这个路径看出b是一个文件还是一个目录,ansible也同样无法单单从一个字符串就知道你要创建文件还是目录,所以,我们需要通过state参数进行说明。当我们想要创建的/testdirla/b是一个目录时,需要将state的值设置为directory , "drectory"为目录之意,当它与path结合,ansible就能知道我们要操作的目标是一个目录。同理,当我们想要操作的/testdirlalb是一个文件时,则需要将state的值设置为touch。当我们想要创建软链接文件时,需将state设置为link。想要创建硬链接文件时,需要将state设置为hard。当我们想要删除一个文件时(删除时不用区分目标是文件、目录、还是链接),则需要将state的值设置为
    absent,"absent"为缺席之意,当我们想让操作的目标"缺席"时,就表示我们想要删除目标。
  • src:当state设置为link或 hard 时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源。
  • force参数:state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。不过强制创建链接文件分为三种情况。情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二∶当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三︰当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。
  • owner参数:于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。
  • group参数:于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。
  • mode参数:于指定被操作文件的权限,比如,如果想要将文件权限设置为TW-F-X—",则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的。如果想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700.

(3)操作

  • 修改文件的属组
[root@master ~]# ansible server1 -m file -a 'owner=root group=aaa mode=666 path=/opt/fstab.bak'
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 1111, 
    "group": "aaa", 
    "mode": "0666", 
    "owner": "root", 
    "path": "/opt/fstab.bak", 
    "secontext": "system_u:object_r:usr_t:s0", 
    "size": 617, 
    "state": "file", 
    "uid": 0
}
  • node1 节点验证
[root@node1 ~]# cd /opt/
[root@node1 opt]# ll
总用量 12
-rw-rw-rw-. 1 root aaa  617 19 18:00 fstab.bak
  • 设置/opt/fstab.link为/opt/fstab.back的链接文件
[root@master ~]# ansible server1 -m file -a 'path=/fstab.link src=/opt/fstab.bak state=link'
20.0.0.12 | 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
}
  • node1 节点验证
[root@node1 ~]# cd /opt/
[root@node1 opt]# ll /
总用量 30
lrwxrwxrwx.   1 root root   14 19 19:32 fstab.link -> /opt/fstab.bak
  • 删除链接文件
[root@master ~]# ansible server1 -m file -a 'path=/opt/fstab.bak state=absent'
20.0.0.12 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/opt/fstab.bak", 
    "state": "absent"
}
  • 创建文件并授权
[root@master ~]# ansible server1 -m file -a 'path=/opt/abc state=touch'
[root@master ~]# ansible server1 -m file -a 'path=/opt/share state=directory mode=777'

8:ansible yum 模块

(1)yum 模块的作用

  • 用于 yum 仓库软件的安装与卸载

(2)操作

  • 安装软件
[root@master ~]# ansible server1 -m yum -a 'name=httpd'
  • node1 节点验证
[root@node1 ~]# rpm -q httpd
httpd-2.4.6-67.el7.centos.x86_64
  • 卸载软件
[root@master ~]# ansible server1 -m yum -a 'name=httpd state=absent'
  • node1 节点验证
[root@node1 ~]# rpm -q httpd
未安装软件包 httpd 

9:ansible service 模块

(1)service 模块作用

  • service模块可以帮助我们餐管理远程主机.上的服务,比如,启动或停止远程主机中的apache服务

(2)service 模块参数

  • name参数:参数用于指定需要操作的服务名称,比如httpd
  • state参数:参数用于指定服务的状态,比如:我们想要启动远程主机中的httpd,则可以将state的值设置为started,要停止远程主机中的服务,则可以将state的值设置为stopped。此参数的可用值有started、stopped、restarted、reloaded
  • enabled参数:参数用于指定是否将服务设为开机启动项,设置为yes表示将对应服务设置为开机启动,设置为no表示不会开机启动

(3)操作

  • 先安装软件
[root@master ~]# ansible server1 -m yum -a 'name=httpd'
  • 开启服务
[root@master ~]# ansible server1 -m service -a 'name=httpd state=started enabled=true'
  • 查看状态
[root@master ~]# ansible server1 -a 'systemctl status httpd'

10:ansible shell 模块

(1)shell 模块作用

  • shell模块可以帮助我们在远程主机上执行命令。与command.模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理。

(2)shell 模块常用参数

  • free_form参数须参数,指定需要远程执行的命令,但是并没有具体的一个参数名叫free_form,具体解释参考command模块。
  • chdir参数:参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
  • creates参数:用此参数指定一个文件,当指定的文件存在时,就不执行对应命令,可参考command模块中的解释。
  • removes参数:用此参数指定一个文件,当指定的文件不存在时,就不执行对应命令,可参考command模块中的解释。
  • executable参数:认情况下,shell模块会调用远程主机中的/binlsh 去执行对应的命令,通常情况下,远程主机中的默认 shelI都是bash。如果你想要使用其他类型的 shell 执行命令,则可以使用此参数指定某种类型的shell去执行对应的命令。指定 shell文件时,需要使用绝对路径。

(3)操作

  • command参数不识别追加符号
[root@master ~]# ansible server1 -m command -a 'echo aaa > /opt/aaa.txt'
  • 验证
[root@node1 ~]# cd /opt/
[root@node1 opt]# ll
  • 使用 shell 模块参数识别
[root@master ~]# ansible server1 -m shell -a 'echo aaa > /opt/aaa.txt'
20.0.0.12 | CHANGED | rc=0 >>
  • 验证
[root@node1 ~]# cd /opt/
[root@node1 opt]# ll
总用量 12
-rw-r--r--. 1 root root   4 19 20:12 aaa.txt
  • 指定工作目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中
[root@master ~]# ansible server1 -m shell -a 'chdir=/usr/local echo bbb > bbb.txt'
20.0.0.12 | CHANGED | rc=0 >>
  • 验证
[root@node1 ~]# cd /usr/local/
[root@node1 local]# ll
总用量 4
-rw-r--r--. 1 root root  4 19 20:15 bbb.txt

11:ansible script 模块

(1)script 模块作用

  • script模块可以帮助我们在远程主机上执行ansible管理主机上的脚本,也就是说,脚本一直存在于ansible管理主机本地,不需要手动拷贝到远程主机后再执行。

(2)script 模块常用参数

  • free_form参数︰必须参数,指定需要执行的脚本,脚本位于ansible管理主机本地,并没有具体的一个参数名叫free_form

  • chdir参数∶此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到chdir参数指定的目录中。

  • creates参数∶使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本。

  • removes参数∶使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本。

(3)操作

  • 创建一个脚本执行
[root@master ~]# vi aaa.sh

#!/bin/bash
echo "this is my web" > /opt/web.txt

[root@master ~]# ansible all -m script -a 'aaa.sh'
  • 验证
[root@node1 ~]# cat /opt/web.txt 
this is my web
[root@nide2 ~]# cat /opt/web.txt 
this is my web

12:ansible setup 模块

(1)setup 模块作用

  • setup模块用于收集远程主机的—些基本信息

(2)setup 模块常用参数

  • filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

(3)操作

  • 查看node1 节点主机参数
[root@master ~]# ansible server1 -m setup
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值