ansible笔记

安装ansible

选择yum自动安装,先配置好阿里云的yum源、epel源

yum install epel-release -y
yum install ansible -y

查看安装情况(查看配置文件、可执行命令)

rpm -ql ansible | grep -E '^/etc|^/usr/bin'

配置ssh免密登陆

在ansible主机上生成密钥

ssh-keygen                  //生成密钥
ssh-copy-id  root@ip地址    //将密钥拷贝给客户机

一、远程拉取文件(fetch)

1.主机分组

目前ansible的配置分为A组B组,IP如下图:

[A]
192.168.0.106
[B]
192.168.0.107
[test]
A
B

2.fetct命令

从客户机远程拉取文件到ansible主机用到fetch命令,例如:

ansible A -m fetch -a "src=/etc/fstab dest=/xy/ansible/"

A:ansible配置中的A组

-m:调用指定命令

 -a:用于传递模块所需要使用的参数

src:从客户机需要拉取的目标文件

dest:拉取到本机的什么地址

上述命令的执行结果如下:

 可以看到changed一栏显示为ture,说明执行成功。

将文件内容随意添加一句,改变文件内容

再次使用ansible拉取同名文件到相同的地址,也会显示成功

但是会是绿色字体,changed:false。因为ansible只检测是否有这个文件,再次执行相同的命令时,ansible发现文件已经在对应目录中了,所以不会执行任何操作。

二、远程拷贝文件(copy)

copy的作用就是拷贝文件,copy是将ansible主机上的文件拷贝给远程客户机上。

1.常见的参数

参数含义
src参数用于指定需要copy的文件或者目录
dest参数必选参数,指定被拷贝到远程主机上哪个目录
content

直接指定文件内容,与src指令二选一

mode  指定文件拷贝过去后的文件权限

2.举个栗子

用例—src、dest 
[root@xyy xy]#ansible B -m copy -a "src=/xy/copy.txt dest=/xy/"

将ansible主机/xy目录里的copy.txt文件拷贝到B组客户机的/xy目录里(ps:克隆的虚拟机,目录都一样)

执行结果如下:

 这个时候在B组客户机的/xy目录里查看copy.txt文件,拷贝成功

用例2—content

 通过content直接写数据到客户机指定文件,指令如下:

[root@xyy xy]#ansible B -m copy -a 'content="12343132\n" dest=/xy/copy.txt'

在B组客户机查看文件内容:

注:如果将ansible主机中的copy.txt文件复制到远程主机上时,若远程主机已有相同文件,虽然文件内容不一致,但是ansible不会执行拷贝操作,远程主机上的copy.txt文件内容不会改变! 

用例3—mode

通过mode选项直接设置拷贝到客户机的文件权限,指令如下:

[root@xyy ~]#ansible A -m copy -a "src=/xy/copy.txt dest=/xy mode=0700"

三、文件操作(file)

file命令可以完成创建、删除、修改文件或者目录等

1.常用参数

参数含义
path必选参数。指定要操作的文件
state

—touch:创建文件

—directory:创建文件夹

—link:创建软链接

—hard:创建硬链接

—absent:删除文件或目录

recurserecurse=yes时,将递归修改目录中的文件属性
mode同copy命令mode一样,修改文件或者目录权限

2.举个栗子 

用例1—state=touch
ansible A -m file -a "path=/xy/testfile state=touch"

在A组客户机的/xy/目录下创建一个名为testfile的文件。

在A组客户机上查看:

如果再次在ansible主机上执行相同的命令依然会成功,只会改变文件的时间戳

 用例2—state=directory

在A组主机上创建一个testdir的目录

ansible A -m file -a "path=/xy/testdir state=directory"

在A组主机上查看:

 :若目录已经存在时,该命令虽然会显示成功,但不做任何操作(包括时间戳也不改变)

用例3—state=link

 link参数创建软连接。软连接是linux中一个常用命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接,可以不用复制一个文件,就可以在另一个文件夹打开这个文件。

在A组主机上test目录建立软链接,软链接名为linktest,执行下列命令:

ansible A -m file -a "path=/xy/linktestdir state=link src=/test"

在test目录创建一个1文件,在/xy/目录通过linktest软链接查看/test/1文件

 用例4—state=hard

在A组主机上为testfile创建硬链接文件,链接名取为hardtest,执行下列命令:

ansible A -m file -a "path=/xy/hardtest state=hard src=/xy/testfile"

 用例5—state=absent

absent可以删除远程主机上的指定文件或目录,命令如下:

ansible A -m file -a "path=/xy/hardtest state=absent"

 用例6—recurse

 递归修改远程主机一个目录的文件权限可以用recurse,将/xy/testdir目录及其下属文件的权限全部调成可读可写可执行,命令如下:

ansible A -m file -a "path=/xy/testdir mode=0777 recurse=yes"

四、追加文本到文件(blockinfile)

1.什么是blockinfile

blockinfile模块可以在目标文件里追加一段文本。

2.常用参数

参数描述
path必要参数,选择需要更改的文件
block等同于‘content',需要添加的一段文本
marker自定义标记内容。在用blockinfile插入文件内容后,blockinfile会自动插入一对标记。
state

present:默认为present,执行插入或者更新操作

absent:从文件中删除对应标记的段落

insertbefore

可以插入到任意行,或者通过正则表达式来匹配对应的行前面

insertafter

默认情况下,文本块会插入到文件末尾。

可以插入到任意行,或者通过正则表达式来匹配对应的行后面

create

3.举个栗子 

用例1—path、block

如果想在A组客户机的/xy/testfile的文件末尾追加一行,可以使用以下命令:

ansible A -m blockinfile -a "path=/xy/testfile block='test file + 1'"

使用path选中目标主机的需要修改的文件,block是需要添加的文件内容。执行以上命令后,/xy/testfile的文件末尾会多出一行文本:

blockinfile除了添加了文本还加上了被标记的文本块。在#BEGIN ANSIBLE MANAGED BLOCK#END ANSIBLE MANAGED BLOCK之间的就是我们添加的文本。

用例2—marker

如果想要自定义标记也是可以的,但标记必须“有头有尾”。测试如下:

ansible A -m blockinfile -a 'path=/xy/testfile block="test file + 2" marker="#{mark} changed"'

在相同的文件进行测试,marker可以用于自定义标记,命令中的“{mark}"就相当于是#BEGIN和#END,在{mark}之后的changed就是我们更改的内容。

:如果使用相同的标记,但是追加的文件内容不一样,那么,对应标记内的文本内容会被更改,而不是插入新的文本块,这种方法用于更新标记文本块中的内容!!举个栗子:

ansible A -m blockinfile -a 'path=/xy/testfile block="test file + 3" marker="#{mark} changed"'

和上一段代码相同的marker,但是追加的文件内容更改。原本的'test file + 2'就变成了’test file + 3‘

用例3—state=absent

由于相同的标记对应的文本块已经在文件中了,若block的内容为空或者增加一句’state=absent‘,那么blockinfile就会删除对应标记的文本块(包括生成的标记),以下代码二选一:

ansible A -m blockinfile -a 'path=/xy/testfile block="" marker="#{mark} changed"'
ansible A -m blockinfile -a 'path=/xy/testfile marker="#{mark} changed" state=absent'
用例4—insertbefore

想要将文本块插入到文件首行,将insertbefore的值设置为BOF,BOF意为’begin of file‘文件的开始

ansible A -m blockinfile -a 'path=/xy/testfile block="遥遥领先" marker="#{mark} HHHH" insertbefore=BOF'

用例5—insertafter

将文本块插入到文件末尾,与默认情况一样。将insertafter的值设置为EOF,EOF意为’end of file‘文件的结束

ansible A -m blockinfile -a 'path=/xy/testfile block="遥遥领先" marker="#{test} HHHH" insertafter=BOF'

 用例6—正则表达式匹配

使用正则表达式匹配行,将文本插入到“ansible”开头的行之后,举个栗子:

[root@xyy ~]#ansible A -m blockinfile -a 'path=/xy/testfile block="##########芜湖#########" marker="#{mark} test" insertafter="^ansible"'

backup备份文件

在操作文件前在同一个文件夹下进行备份,备份的文件会在原文件名的基础上添加时间戳。

ansible A -m blockinfile -a 'path=/xy/testfile block="$$$$$$$L O L$$$$$$$" insertafter="^#######" backup=yes'

create创建文件

如果指定的文件不存在时,可使用create创建它,举个栗子:

[root@xyy ~]#ansible A -m blockinfile -a 'path=/xy/YS block="this is YS file"te=yes'

五、行文本操作(lineinfile)

lineinfile模块,可以确保一行文本存在于文件中,如果文本本来就存在文件中,则不执行任何操作。若不存在,则默认在末尾加上这行文本。

1.常用参数

参数含义
path必须参数,指定要操作的文件。
line使用此参数指定文本内容。

2.举个栗子

[root@xyy ~]#ansible A -m lineinfile -a 'path=/xy/testfile line="testfile + 1"'

六、command命令

  批量查看客户机的主机名

ansible all -m command -a 'hostname'

1.chdir参数

在执行command命令前,先进入某个目录。

ansible all -m command -a 'pwd chdir=/etc'

ansible默认执行命令路径是/root,使用这个命令后就先进入了/etc目录再执行pwd

 2.creates参数

在执行command命令前,先判断文件是否存在,若文件存在则跳过执行,不存在则执行,warn=False是取消警告信息

ansible all -m command -a 'mkdir -p /etc/myscripts creates=/etc/myscripts warn=False' 

若/etc/myscripts目录不存在时,就会创建/etc/myscripts目录

存在时就会提示跳过操作

3.removes参数

ansible all -m command -a 'rm -rf /etc/myscripts/ removes=/etc/myscripts/ warn=False'

removes参数和creates参数是完全相反的。removes是判断文件存在则执行操作,不存在则跳过。

 七、shell命令

shell命令也有chdir、creates、removes等参数和command命令的用法一致。

在客户机上批量执行shell命令但shell脚本必须存在客户机上

举个栗子

1.创建一个文件夹

2.在文件夹中创建sh脚本

3.sh文件写入脚本信息

4.添加可执行权限

5.执行脚本

ansible all -m shell -a 'mkdir -p /etc/hhh;echo 'hostname' > /etc/hhh/host.sh;chmod u+x /etc/hhh/host.sh;bash /etc/hhh/host.sh warn=False'

脚本文件就只需要输出各自的主机名 

八、script模块

功能:把管理机的脚本远程传输到被管理机上执行。只需要在主机有一份脚本,就可以在所有被管理机上执行。

1.模块参数

2.举个栗子

准备一个sh脚本,授予可执行权限。

echo -e 'pwd\nhostname' > /xxx/localhost.sh  //输出路径和主机名
chmod +x localhost.sh

远程的执行脚本,执行时不需要客户端存在脚本文件

ansible all -m script -a '/xxx/localhost.sh'

九、service模块

功能:远程管理服务的启动、停止

示范:

ansible all -m service -a "name=httpd state=started enabled=yes"

name:服务名称

state:状态,started启动、stopped停止、restarted重启服务

enabled:开机自启,yes是开启,no是关闭

十、cron模块

功能:远程管理定时任务

ansible all -m cron -a "minute=00 hour=01 day=* month=* name='提示信息' job=/www/1.sh state=present"

minute=00 hour=01 day=* month=* :每个月每一天的1点整执行命令

name:提示信息

job:执行的脚本,脚本文件需存在远程机本地

state:present=添加任务;absent=取消任务

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值