文章目录
ansible 概述
一:什么是 ansible
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet 、 cfengine 、 chef 、 func 、 fabic)的优点,实现了批里系统配置、批里程序部署、批里运行命令等功能。
ansible是基于模块工作的,本身没有批里部署的能力。真正具有批里部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
- (1)、连接插件connection plugins:负责和被监控端实现通信;
- (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
- (3)、各种模块核心模块、command模块﹑自定义模块;
- (4)、借助于插件完成记录日志邮件等功能;
- (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
二:ansible 特点
- 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
- 默认使用SSH协议对设备进行管理;
- 有大量常规运维操作模块,可实现日常绝大部分操作;
- 配置简单、功能虽大、扩展性强;
- 支持API及自定义模块,可通过Python轻松扩展;
- 通过Playbooks来定制强大的配置、状态管理;
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行—次更新即可;
- 提供一个功能强大、操作性强的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 >>
2021年 01月 09日 星期六 16:18:34 CST
[root@master ~]# ansible server2 -m command -a 'date'
20.0.0.13 | CHANGED | rc=0 >>
2021年 01月 11日 星期一 19:54:25 CST
- 同时输出 node1 和 node2 时间
[root@master ~]# ansible all -m command -a 'date'
20.0.0.13 | CHANGED | rc=0 >>
2021年 01月 11日 星期一 19:55:23 CST
20.0.0.12 | CHANGED | rc=0 >>
2021年 01月 09日 星期六 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 3月 26 2015 rh
-rw-r--r--. 1 root root 96 1月 9 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 1月 9 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 1月 9 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 1月 9 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 1月 9 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 1月 9 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