目录
1)主机连通性测试
我们使用ansible node1 -m ping命令来进行主机连通性测试,效果如下
[root@ansible-control ~]# ansible node1 -m ping node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } |
这样就说明我们的主机是连通状态的。接下来的操作才可以正常进行。
2)command 模块
这个模块可以直接在远程主机上执行命令,并将结果返回本主机。
命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行。它不会通过shell进行处理,比如$HOME和操作如"<",">","|",";","&" 工作(需要使用(shell)模块实现这些功能)。
注意,该命令不支持| 管道命令。
chdir # 在执行命令之前,先切换到该目录
executable # 切换shell来执行命令,需要使用命令的绝对路径
free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。
creates # 一个文件名,当这个文件存在,则该命令不执行,可以
用来做判断,当文件不存在,执行后面命令
removes # 一个文件名,这个文件不存在,则该命令不执行,文件存在的话执行后面的命令
实例:
不存在的话执行后面命令 存在提示存在,后面ls命令不执行 |
文件存在,则ls 文件不存在则不执行后面命令 |
3)shell 模块
shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。
只要是我们的shell命令,都可以通过这个模块在远程主机上运行,这里就不一一举例了。
4)copy 模块
这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。
其相关选项如下:
src#被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync" content#用于替换"src",可以直接指定文件的值 dest#必选项,将源文件复制到的远程主机的绝对路径 backup#当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息 directory_mode#递归设定目录的权限,默认为系统默认权限 force#当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes" others#所有的 file 模块中的选项可以在这里使用 |
用法实例:
① 复制文件:
② 给定内容生成文件,并制定权限 (dest指定的是远程主机node1的路径,如果没有name文件则会创建文件,如果有文件则会覆盖内容)
③ 关于覆盖
5)file 模块
该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。
下面是一些常见的命令:
force #需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no group #定义文件/目录的属组。后面可以加上mode:定义文件/目录的权限 owner#定义文件/目录的属主。后面必须跟上path:定义文件/目录的路径 recurse#递归设置文件的属性,只对目录有效,后面跟上src:被链接的源文件路径,只应用于state=link的情况 dest#被链接到的路径,只应用于state=link的情况 state#状态,有以下选项: directory:如果目录不存在,就创建目录 file:即使文件不存在,也不会被创建 link:创建软链接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件 |
用法举例如下:
① 创建目录:
② 创建链接文件
③ 删除文件
查看以后可以看到现在已经没有了链接文件
6)yum 模块
顾名思义,该模块主要用于软件的安装。
其选项如下:
name= #所安装的包的名称 state= #present--->安装, latest--->安装最新的, absent---> 卸载软件。 update_cache #强制更新yum的缓存 conf_file #指定远程yum安装时所依赖的配置文件(安装本地已有的包)。 disable_pgp_check #是否禁止GPG checking,只用于presentor latest。 disablerepo #临时禁止使用yum库。 只用于安装或更新时。 enablerepo #临时使用的yum库。只用于安装或更新时。 |
示例:
安装一个httpd包
安装成功
然后卸载httpd包
7)user 模块
该模块主要是用来管理用户账号。
其主要选项如下:
comment # 用户的描述信息 force # 在使用state=absent时, 行为与userdel –force一致. group # 指定基本组 groups # 指定附加组,如果指定为(groups=)表示删除所有组 home # 指定用户家目录 move_home # 如果设置为home=时, 试图将用户主目录移动到指定的目录 create_home #是否建立家目录 name # 指定用户名 non_unique # 该选项允许改变非唯一的用户ID值 password # 指定用户密码(使用前先把密码加密) remove # 在使用state=absent时, 是否删除家目录 shell # 指定默认shell state # 设置帐号状态,不指定为创建,指定值为absent表示删除 system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户 uid # 指定用户的uid append= yes|no #用户是否追加到其他组 |
举例如下:
① 添加一个用户并指定其 uid
② 删除用户
③ 给用户设置密码(明文密码不能使用) 示例: 使用user模块创建一个用户,用户名tom,家目录在/tom,给用户设置密码为123 密码必须是密文,所以先要把明文转换一下,生成md5密文 再把password=对应的密文密码
|
8)group 模块
该模块主要用于添加或删除组。
常用的选项如下:
gid=#设置组的GID号 name=#指定组的名称 state=#指定组的状态,默认为创建,设置值为absent为删除 system=#设置值为yes,表示创建为系统组 |
举例如下:
① 创建组
② 删除组
9)service 模块
该模块用于服务程序的管理。
其主要选项如下: arguments #命令行提供额外的参数 enabled #设置开机启动。 name= #服务名称 runlevel #开机启动的级别,一般不用指定。 sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。(定义在剧本中。) state #有四种状态,分别为:started--->启动服务, stopped--->停止服务, restarted--->重启服务, reloaded--->重载配置 |
① 开启httpd服务并设置自启动
② 关闭服务
我们也可以通过该模块来关闭我们的服务:
10)yum_repository 模块
yum_repository模块管理远程主机上的yum仓库
其主要选项如下:
|
示例:
1.创建一个本地yum
2.删除本地yum
11)Firewalld 模块
firewalld模块用于在防火墙中添加或删除服务和端口
firewalld模块常用参数 state:##必须参数,指定防火墙策略状态,enable表示策略生效,disable表示策略禁用,present表示新建策略,absent表示删除策略 service:##向防火墙添加/删除的服务名称,该服务必须在firewall-cmd --get-services可以查询到 port:##要从防火墙添加或删除端口或端口范围,必须以端口/协议,端口范围/协议的形式书写 permanent:##保存策略,在下次启动时自动加载 immediate:##配置永久策略后立即生效 interface:##添加/删除 出入防火墙的接口 offline:##脱机状态运行防火墙 zone:##添加/删除防火墙区域,有如下区域可供配置 drop:## 丢弃所有进入的包,而不给出任何响应 block:## 拒绝所有外部发起的连接,允许内部发起的连接 public: ##允许指定的进入连接 external: ##同上,对伪装的进入连接,一般用于路由转发 dmz: ##允许受限制的进入连接 work:## 允许受信任的计算机被限制的进入连接,类似 workgroup home:## 同上,类似 homegroup internal:#### 同上,范围针对所有互联网用户 trusted: ##信任所有连接 source:##指定从防火墙添加/删除的网段 timeout:##非永久性规则的生效时间 |
示例:
放行http服务
放行82端口
查看node1节点防火墙内容
12)replace模块
replace 模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换。
常用参数: path:##必须参数,指定要操作的文件,2.3版本之前,只能使用 dest, destfile, name指定要操作的文件,2.4版本中,仍然可以使用这些参数名,这些参数名作为 path 参数的别名使用。 regexp : ##必须参数,指定一个 python 正则表达式,文件中与正则匹配的字符串将会被替换。 replace:##替换regexp参数匹配到的字符串, owner:##结果文件或目录的所属用户名,相当于chown命令修改 group:##结果文件或目录的所属组名,相当于chown命令修改 mode:##结果文件或目录的权限,与chmod命令不一致的是,replace模块的mode参数需要添加前导零,以便ansible的YAML解析器知道它是八进制;1.8版本后可以设置为符号模式(u+rwx或u=rw),2.6版本后可以是特殊字符串(preserve),当设置为’preserve’时,文件将被赋予与源文件相同的权限。 others:##可以指定file模块的所有参数 encoding:##用于读取和写入文件的字符编码 before:##如果指定,则仅替换/删除此匹配之前的内容,可以和after参数结合使用 after:##如果指定,则仅替换/删除此匹配之后的内容,可以和before参数结合使用 attributes:##结果文件或目录的特殊属性,相当chattr,默认使用=运算符,指定文件或目录的某项属性 backup:##修改源文件前创建一个包含时间戳信息的备份文件 |
示例:把node1里的根目录下111.txt文件里的qwe替换为ggg
13)parted模块
磁盘分区和分区大小调整工具
(创建分区只能顺着创建,不能用已经用过的大小,假如第一个分区起始位置创建的是1G,结束位置创建的是2G,第二个分区创建只能用3和4不能再用1和2.)
device :##指定分区的介质 number :##分区编号 part_end :##划分分区大小,指定分区结束位置。单位可以用百分制(%),也可以用传统的存储单位,默认结束位置是100%。 part_start :## 划分分区大小,指定分区起始位置。单位可以用百分制(%),也可以用传统的存储单位,默认结束位置是0%。 state :##模块状态,absent代表删除分区,present代表新建分区,info代表查看信息,默认值是info。 unit :##选择显示信息的存储单位,可以用s, B, KB, KiB, MB, MiB, GB, GiB, TB, TiB, %, cyl, chs, compact,KiB是默认单位。 flags:##分区标记 |
示例:
创建一个分区,这样没有指定分区大小,所以直接把所有的空间给了
删除一个分区
创建一个1G的分区
创建一个lvm分区
14)fetch模块
该模块用于从远程某主机获取(复制)文件到本地。
有两个选项: dest:用来存放文件的目录 src:在远程拉取的文件,并且必须是一个file,不能是目录 |
示例:
复制远程主机node1里的/root/gao的文件到ansible服务端的/root/目录下,
在ansible服务端上查看我们是否复制成功,我们可以看到我们复制的内容路径是以node1节点为目录文件的下面,其实这个node1节点的目录原本应该是以IP为目录,只不过我们做了hosts文件,所以显示的是node1节点为目录(要注意,文件保存的路径是我们设置的接收目录下的被管制主机ip目录下:)
15)cron模块
该模块适用于管理cron计划任务的。
其使用的语法跟我们的crontab文件中的语法一致,同时,可以指定
以下选项: day= #日应该运行的工作( 1-31, *, */2, )*/2的意思是每隔两日 hour= # 小时 ( 0-23, *, */2, ) minute= #分钟( 0-59, *, */2, ) month= # 月( 1-12, *, /2, ) weekday= # 周 ( 0-6 for Sunday-Saturday,, ) job= #指明运行的命令是什么 name= #定时任务描述 reboot # 任务在重启时运行,不建议使用,建议使用special_time special_time #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时) state #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务 user # 以哪个用户的身份执行 |
示例:
① 添加计划任务 */2表示的是每隔两分钟,*表示的是没分钟/每小时/以此类推
② 删除计划任务(添加上state状态命令即可)
16)script模块
该模块用于将本机的脚本在被管理端的机器上运行。
该模块直接指定脚本的路径即可,我们通过例子来看一看到底如何使用的:
首先,我们写一个脚本,并给其加上执行权限:
去node1节点上看到原来是没有tom这个用户的
我们再来执行一个脚本,更改useradd.sh的内容,将挂载信息写入到后面这个文件中
查看
17)setup模块
该模块主要用于收集信息,是通过调用facts组件来实现的
facts组件是Ansible用于集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。
facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。
①查看信息
打印node1机器的所有信息
打印node1机器的CPU信息
打印node1机器的内核信息
打印node1机器的主机名
打印node1机器的网卡信息
其它常见的过滤条件
ansible_all_ipv4_addresses:显示ipv4的信息。 ansible_devices:显示磁盘设备信息。 ansible_distribution_major_version:显示是系统主版本。 ansible_distribution_version:仅显示系统版本。 ansible_machine:显示系统类型,例:32位,还是64位。 ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。 ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。 ansible_swapfree_mb:显示swap内存的可用内存。 ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。 ansible_processor_vcpus:显示cpu个数(只显示总的个数)。
② 保存信息
我们的setup模块还有一个很好用的功能就是可以保存我们所筛选的信息至我们的主机上,同时,文件名为我们被管制的主机的IP(写入host文件的话就是我们的域名),这样方便我们知道是哪台机器出的问题。
查看node1的主机名并把它保存在/root/下的fact目录中
18)Lvg模块
创建、删除卷组以及动态改变卷组大小
常用参数: vg:要创建的卷组名称 pvs:要加入到卷组中的物理卷列表 pesize:指定pe大小,默认值是4M,默认单位是M state:模块状态:absent表示删除,present代表新建 |
示例1:
创建卷组(vg.group)并且将物理卷sdb1加入到卷组中,指定PE大小为40M
首先先创建一个sdb1分区
再创建卷组
在示例1的基础上新增物理卷sdb3(不能只写/dev/sdb3,不然会移除sdb1,所以用逗号分隔,都写上)
删除卷组
19)Lvol模块
创建、删除逻辑卷以及动态改变逻辑卷大小。
常用模块:
vg:在哪个卷组上创建lv
lv:逻辑卷名
size:逻辑卷大小,默认单位是M。
pvs:指定物理卷
force:默认不允许缩小和删除lv操作,如果一定要执行就force=yes
state:模块状态,absent代表删除,present代表新建,默认是present。
active:卷是否已激活并且对主机可见
示例1:创建一个512M的逻辑卷
2.用物理卷sdb3,sdb4创建一个逻辑卷
3.增加lv大小
4.用vg的所有剩余空间新建lv
5.调整lv大小至80%VG
6.缩小lv
7.调整lv状态成不激活
8.删除lv
20)lineinfile模块
确保”某一行文本”存在于指定的文件中,或者确保从文件中删除指定的”文本”(即确保指定的文本不存在于文件中),还可以根据正则表达式,替换”某一行文本”。
常用参数:
path参数 :必须参数,指定要操作的文件。 line参数 : 使用此参数指定文本内容。 regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。 state参数:当想要删除对应的文本时,需要将state参数的值设置为absent,absent为缺席之意,表示删除,state的默认值为present。 insertafter参数:将文本插入到指定行之后,也可以设置为EOF的正则表达式(EOF为End Of File,表示插入到文档的末尾),默认情况下是EOF,如果正则并没有匹配到任何行,则插入到文件末尾 insertbefore参数:将文本插入到指定行之前,也可以设置为BOF的正则表达式(BOF为Begin Of File,表示插入到文档的开头),如果正则并没有匹配到任何行,则插入到文件末尾。 backup参数:是否在修改文件之前对文件进行备份。 create参数 :当要操作的文件并不存在时,是否创建对应的文件。 backrefs参数:默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变。 |
示例:
我们写一个文件作为被操作文件
确保指定的”一行文本”存在于文件中,如果指定的文本本来就存在于文件中,则不做任何操作,如果不存在,默认在文件的末尾插入这行文本,如下命令表示确保 “test lineinfile” 这行文本存在于/mnt/test文件中。
由上面我们可以看出,没有test lineinfile这行文本,所以在文件末尾插入这行文本
如下命令表示根据正则表达式替换”某一行”,如果不止一行能够匹配正则,那么只有最后一个匹配正则的行才会被替换,被匹配行会被替换成 line 参数指定的内容,但是如果指定的表达式没有匹配到任何一行,那么 line 中的内容会被添加到文件的最后一行。
由上我们可以看出共有两行内容是line开头的,匹配到两行,但是只替换了最后一行的匹配
如下命令表示根据正则表达式替换”某一行”,如果不止一行能够匹配正则,那么只有最后一个匹配正则的行才会被替换,被匹配行会被替换成 line 参数指定的内容,但是如果指定的表达式没有匹配到任何一行,那么则不对文件进行任何操作。
删除行
本分部分节选以下博客,感谢大力分享
https://www.cnblogs.com/keerya/p/7987886.html