目录
①输入hello world到远程主机的/opt/test.txt文件中
①不指定 flat 会在dest指定目录下创建一个目录,以主机名命名
①压缩/data/data目录,并删除/data/data目录下文件
一、安装ansible
yum -y install epel-release && yum -y install ansible
二 、修改主机清单
1、首先做主控端到被控端ssh免密操作
ssh-keygen
ansible all -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k 批量推公钥
2、添加被控制端主机IP
vi /etc/ansible/hosts
ssh 192.168.127.129 ##首次通信需要留下指纹,可以手动ssh一次,也可以修改配置文件
ansible client2 -m ping #验证ansible是否可用
三、ansible模块
1、command ---- 远程主机执行命
使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell 处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效。
相关选项如下:
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令,这里的free_form不需要写成赋值的形式,直接写要执行的命令即可,ansible -a代替
chdir:在执行指令之前,先切换到该目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
①切换到/data目录下执行ls
②如果不存在/data目录 执行ls
③如果存在/data目录 执行ls
④只能执行简单命令,shell不执行
2、shell----支持shell特性的command
在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)
①查看所有主机boot分区的磁盘使用率
ansible all -m shell -a ' df -h | grep boot'
3、script ---- 运行shell脚本
实现远程批量运行本地的 shell 脚本
①输入hello world到远程主机的/opt/test.txt文件中
4、copy ---- 复制文件到远程主机
相关选项如下:
backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync
owner 文件复制到远程并设定属主,默认为root
group 文件复制到远程并设定属组,默认为root
mode 文件复制到远程并设定权限,默认file=644,directory=755
①复制本地的test.sh到远程主机,强制覆盖并备份
mv /etc/ansible/test.sh .
ansible client1 -m copy -a "src=/root/test.sh dest=/root/ backup=yes force=yes"
5、fetch ---- 从主机提取文件到主控端
该模块用于从远程某主机获取(复制)文件到本地。有两个选项:
dest:用来存放文件的目录
src:在远程拉取的文件,并且必须是一个file,不能是目录
①不指定 flat 会在dest指定目录下创建一个目录,以主机名命名
6、archive ---- 压缩
path 远程主机上需要被打包/压缩的源文件(可以是文件列表,支持glob模式)
dest 打包/压缩后的包文件路径(包文件的父目录必须存在);如果包文件已存在,则会被覆盖。
format 指定压缩类型,包括:bz2、gz(默认)、tar、xz、zip
owner 指定属主
group 指定属组
mode 指定权限
remove yes|no,默认为no,在打包/压缩后,不删除源文件。
①压缩/data/data目录,并删除/data/data目录下文件
ansible client1 -m archive -a 'path=/data/data dest=/data/data.gz format=gz remove=yes'
7、unarchive ---- 解压缩
用于解压文件,模块包含如下选项:
copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
creates:指定一个文件名,当该文件存在时,则解压指令不执行
src:如果copy为yes,则需要指定压缩文件的源路径
dest:远程主机上的一个路径,即文件解压的路径
owner:解压后文件或目录的属主
group:解压后的目录或文件的属组
mode:解压后文件的权限
list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项