赞
踩
ansible有以下两种管理方式:
1)Ad-Hoc命令:利用ansible命令直接完成管理,主要用于临时命令这一使用场景,之前的实验中大量使用过。
2)playbook脚本:ansible脚本,主要用于大型项目场景,需要前期的规划。
实验步骤:
1、使用Ad-Hoc命令方式调用ping模块管理受控主机,ansible模块本质上就是ansible里的命令
2、在ansible目录下使用YAML标记语言编写playbook脚本文件管理受控主机,同样地调用ping模块
执行playbook脚本文件
编辑脚本文件test.yml,添加调用shell模块在受控主机中创建文件
执行playbook脚本文件(执行playbook脚本时,-v参数
指的是显示ansible执行时的详细信息)
v个数越多,ansible执行信息的详细程度越高
3、这里需要说明的一点是,使用Ad-Hoc执行方式实现管理时,我们可以通过以下命令获得帮助
ansible-doc -l
:列出所有模块
ansible-doc shell(模块名称)
:对指定模块使用方法进行查看
ansible-doc -s shell(模块名称)
:对模块使用方法的简要查看,显示指定模块的playbook片段(=表示指明具体的值;-表示为布尔值,只能设定True或False)
1)ansible命令的格式为:ansible 清单 -m 模块 -a 模块参数
2)ansible命令中的常用参数及含义如下表所示:
参数 | 含义 |
---|---|
- -version | 显示版本 |
-m module | 指定模块,默认为command模块 |
-v | 显示命令详细信息,v的个数越多越详细,如-vv |
- -list | 显示主机列表,也可以用- -list-hosts |
-k | 提示输入ssh连接密码,默认key认证 |
-C | 预执行检测 |
-T | 执行命令的超时时间,默认为10s |
-u | 指定远程执行的用户 |
-b | 执行sudo切换身份操作 |
-become -user=USERNAME | 指定sudo的用户 |
-K | 提示输入sudo密码 |
实验步骤:
1、使用ansible命令调用shell模块查询所有受控主机的域名
引入-k参数
在查询所有受控主机的域名提示输入ssh连接密码
2、编辑当前ansible目录中的主配置文件,关闭远程主机中用devops用户操作指令时转换用户身份
此时使用ansible命令查询所有受控主机的登录用户身份,显示为未转换的devops用户,引入-u参数
指定远程执行的用户,再次查询显示为指定的root用户
3、引入-C参数
进行预执行检测,可以看到不论命令是否正确,执行结果都为SKIPPED
4、使用ansible命令时,引入 -become -user=USERNAME
转换远程用户为指定sudo的用户 ,引入-K参数
提示输入sudo密码
引入-T参数
指定执行命令的超时时间为5s
如下图所示,ansible命令执行后显示的执行结果通常有三种颜色,其含义分别为:
颜色 | 含义 |
---|---|
绿色 | 执行成功但未对远程受控主机做任何改变 |
黄色 | 执行成功且对远程受控主机做出改变 |
红色 | 执行失败 |
command模块的功能为在远程主机执行命令,这一模块为默认模块,其常用参数有:
常用参数 | 含义 |
---|---|
chdir | 执行命令前先进入到指定目录 |
cmd | 运行命令指定 |
creates | 创建文件,如果文件存在将不运行 |
removes | 删除文件,如果文件存在将运行 |
free_form | 在远程主机中执行的命令,此参数不需要加 |
注意: Linux中的很多通配符在command模块中不支持 |
实验步骤:
1、使用ansible命令调用command模块,切换到所有受控主机的/mnt目录下创建文件
在受控主机/mnt目录下查看文件创建成功
2、使用ansible命令调用command模块,删除所有受控主机的/mnt目录下的file1文件
受控主机/mnt目录下的file1文件成功删除
3、使用ansible命令调用command模块,在所有受控主机的/mnt目录下创建file2文件
file2文件已经存在,因此命令没有执行
4、使用ansible命令调用command模块,清空所有受控主机的/mnt目录
shell模块的功能与command类似,即在远程主机执行命令,不同的是shell模块可以使用通配符,command通配符不生效。其常用参数与command一样,此外还有一个参数如下:
常用参数 | 含义 |
---|---|
executable | 指定执行环境,默认为sh |
实验步骤:
1、使用ansible命令调用shell模块,清空所有受控主机的/mnt目录
查看受控主机的/mnt目录,命令执行成功
2、使用ansible命令调用shell模块,切换到所有受控主机的/mnt目录下创建文件
在受控主机/mnt目录下查看文件创建成功
3、使用ansible命令调用shell模块,再次执行上述创建文件命令,文件已经存在,因此命令没有执行
4、查看受控主机当前进程的id,根据id查看当前进程可以看到是bash环境($$
表示当前进程的id)
在控制主机使用ansible命令查看受控主机当前进程,看到的是默认的sh环境,引入executable参数
指定执行环境为bash,再次查看受控主机当前进程看到的是bash环境
script模块的功能为在受控主机中执行在ansible主机中写好的脚本。如下述步骤所示,在ansible主机中切换到lee用户级环境中,在ansible目录中编写清单文件和脚本文件,接着使用ansible命令调用script模块,可以看到脚本在受控主机中成功执行。
copy模块的功能是从ansible主机复制文件到受控主机,当受控主机文件已存在且文件内容一致时不会执行备份操作。其常用参数有:
常用参数 | 含义 |
---|---|
src | 指定源文件 |
dest | 指定目的地文件 |
owner/group | 指定目的地文件所有人/所有组 |
mode | 指定目的地文件权限 |
backup=yes | 当受控主机中存在文件时备份原文件 |
content | 指定文本内容直接在受控主机中生成文件 |
实验步骤:
1、清空受控主机/mnt目录下内容
在控制主机使用ansible命令调用copy模块,将控制主机ansible目录下的test.sh文件复制到受控主机的/mnt目录下,该文件在受控主机中的文件所有者是westos用户,文件权限为755
查看受控主机/mnt目录,可以看到上述命令执行成功
2、再次执行上述文件复制命令,引入backup参数
设定受控主机中存在文件时备份原文件,显示命令执行成功但未对受控主机作出改变
查看受控主机/mnt目录无备份文件,这是因为当受控主机文件已存在且文件内容一致时不会执行备份操作
编辑修改受控主机的test.sh文件,再次执行上述命令,显示命令执行成功且对受控主机作出了改变
查看受控主机/mnt目录生成备份文件,这是因为控制主机文件内容已改变,会执行备份操作
3、在控制主机使用ansible命令调用copy模块,引用content参数
直接指定在受控主机中生成文件的文本内容
查看受控主机/mnt目录下的指定文件,文件内容与指定直接输入内容一致
fetch模块的功能是从受控主机把文件复制到ansible主机,不支持复制目录。其常用参数有:
常用参数 | 含义 |
---|---|
src | 受控主机源文件 |
dest | ansible主机目的目录 |
flat | 基本名称功能,只要文件本身,不写的话会把原文件层级也拷贝过来,写的话要写清楚dest文件 |
实验步骤:
1、在控制主机使用ansible命令调用fetch模块,将受控主机/etc/sysconfig/network-scripts目录下的网卡配置文件ifcfg-ens3复制到控制主机的/home/lee/ansible目录下,可以看到源文件的层级关系也拷贝了过来,在指定目录中自动生成了层级目录
2、再次执行上述命令,启用flat参数
基本名称功能,即在拷贝时只拷贝文件本身,不拷贝文件的层级关系,注意启用flat参数
时要写清楚dest目录下目的文件名称,此时查看dest目录可以看到文件直接拷贝成功
file模块的功能是设置受控主机中文件的属性。其常用参数有:
常用参数 | 含义 |
---|---|
path | 指定文件路径及名称 |
state | 指定操作状态:touch 建立;absent 删除;directory 递归;link/hard 建立软/硬链接 |
mode | 设定文件权限 |
owner | 设定文件用户 |
group | 设定文件拥有组 |
src | 指定受控主机源文件 |
dest | 指定ansible主机目的目录 |
recurse=yes | 递归更改文件(删除目录时不需要加此递归参数) |
实验步骤:
1、在控制主机使用ansible命令调用file模块,在受控主机/mnt 目录下分别创建westosfile文件和westosdir目录,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt/westosdir新建目录下创建testfile文件,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt目录下查看,相应文件及目录创建成功
2、在控制主机使用ansible命令调用file模块,更改受控主机/mnt 目录下的westosfile文件的拥有者为westos用户、更改/mnt/westosdir目录的拥有组为westos用户,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt目录下查看,westosfile文件的拥有者、westosdir目录的拥有组成功从root用户变为westos用户,但此目录下文件的拥有组未改变
3、在控制主机使用ansible命令调用file模块,更改受控主机 /mnt/westosdir目录的拥有组为devops用户,同时设置recurse参数为yes,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt目录下查看,westosdir目录的拥有组成功变为devops用户,同时此目录下文件的拥有组也递归变为devops用户
4、在控制主机使用ansible命令调用file模块,为受控主机指定/mnt/westosfile文件在/mnt目录下创建一个名为linuxfile的软链接,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt目录下查看文件属性,linuxfile软链接创建成功
设置state参数值为hard,再次执行上述命令,为受控主机指定/mnt/westosfile文件在/mnt目录下创建一个名为yaofile的硬链接,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt目录下查看文件属性,yaofile硬链接创建成功,使用ll -i
命令查看文件节点号,可以看到硬链接与原文件是同一个文件,节点号相同;软链接与原文件是不同的文件,节点号不同
5、在控制主机使用ansible命令调用file模块,删除受控主机/mnt目录下的linuxfile软链接,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt目录下查看,linuxfile软链接成功删除
archive模块的功能是压缩打包受控主机中的文件。其常用参数有:
常用参数 | 含义 |
---|---|
path | 指定要打包目录的名称 |
dest | 指定生成的打包文件的名称 |
format | 打包格式 |
owner | 指定文件拥有者 |
group | 指定文件拥有组 |
mode | 设定文件权限 (压缩文件权限默认为644) |
unarchive模块的功能是解压缩受控主机中的文件。其常用参数有:
常用参数 | 含义 |
---|---|
copy | 默认为yes: 从ansible主机复制文件到受控主机 设定为no: 从受控主机中寻找src源文件 |
remote_src | 功能同copy但参数相反 设定为yes: 表示要解压缩的包在受控主机 设定为no:表示要解压缩的包在ansible主机 |
src | 指定包路径,可以是ansible主机也可以是受控主机 |
dest | 指定解压缩文件到受控主机目录 |
mode | 设定文件权限 |
实验步骤:
1、在控制主机使用ansible命令调用archive模块,将受控主机的/etc目录以gzip压缩格式打包到/mnt 目录下,生成etc.tar.gz压缩包,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt目录下查看,etc.tar.gz压缩包成功生成,此时压缩包的拥有者是root用户、文件权限默认为644
2、再次执行上述命令,将受控主机的/etc目录以bzip2压缩格式打包到/mnt 目录下,生成etc.tar.bz2压缩包,指定压缩文件权限为755,指定压缩文件拥有者、拥有组为westos用户,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/mnt目录下查看,etc.tar.bz2压缩包成功生成,此时压缩包的拥有者、拥有组是westos用户、文件权限为755
3、打包控制主机的/etc目录,并以gzip格式压缩在当前目录下生成etc.tar.gz压缩包
在控制主机使用ansible命令调用unarchive模块,将受控主机当前目录下的etc.tar.gz压缩包解压缩到受控主机/media目录下,并设置解压缩文件的拥有者为westos用户,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/media目录下查看,可以看到解压缩生成的etc目录,其拥有者为设置的westos用户
注意: 需要说明的一点是,由于在使用tar命令
压缩受控主机的/etc目录时未使用-P参数,因此在解压缩时是在指定路径下递归创建去掉 / 后的目录,而不是直接解压
再次执行上述命令,设置解压缩文件的权限为700
在受控主机/media目录下查看,可以看到解压缩生成的etc目录被修改为700
4、删除控制主机ansible目录下的压缩文件,再次执行上述命令,引用copy参数设置其值为no,在受控主机中寻找src源文件,即将受控主机/mnt目录下创建的etc.tar.gz压缩包解压缩到其/media目录下,并设置解压缩文件的拥有者为devops用户,可以看到命令执行成功且对远程受控主机做出改变
在受控主机/media目录下查看,可以之前解压缩生成的 etc 目录的拥有者仍为westos用户,但 etc 目录下所有文件的拥有者变为devops用户,这是因为 设置权限解压后,目录所有者不会变,目录中文件的所有者会变
hostname模块的功能是管理受控主机名称。其常用参数有:
常用参数 | 含义 |
---|---|
name | 指定受控主机名称 |
命令示例:ansbile 172.25.254.100 -m hostname -a 'name=yao.westos.com'
cron模块的功能是在受控主机设置定时任务。其常用参数有:
常用参数 | 含义 |
---|---|
minute / hour / day / month / weekday | 分钟 / 小时 / 天 / 月 / 周 |
name | 指定任务名称 |
job | 指定任务脚本或命令 |
disabled | yes 禁用计划任务 no 启动计划任务 (disabled相当于加#注释掉) |
state | absent 删除计划任务 |
实验步骤:
1、在控制主机使用ansible命令调用cron模块,在受控主机中设置每两分钟执行一次test任务,任务具体内容是输出hello westos,可以看到命令执行成功且对远程受控主机做出改变
在受控主机查看定时任务,可以看到任务设定成功
2、再次执行上述命令,分别引用disabled参数设置其值为yes/no禁用/启用该定时任务,可以看到命令执行成功且对远程受控主机做出改变
依次在受控主机查看定时任务,可以看到定时任务禁用/启用成功,disabled相当于在受控主机定时任务配置文件中加 # 注释掉任务
3、再次执行上述命令,引用state参数设置其值为absent删除该定时任务,可以看到命令执行成功且对远程受控主机做出改变
依次在受控主机查看定时任务,可以看到定时任务成功删除
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。