目录
1、command:功能: 在远程主机执行命令,此模块为默认模块
2、shell:功能: 和command模块功能类似,但支持的功能更全面。
3、script:在ansible主机中写好的脚本在受控主机中执行
5、fetch:从受控主机把文件复制到ansible主机,但不支持目录
15、user:模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作
18、replace:可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换
一、ansible实现管理的方式
方式1:Ad-Hoc
利用ansible命令直接完成管理,主要用于临时命令使用场景
方式2:playbook
ansible脚本,主要用于大型项目场景,需要前期的规划
ansible-playbook test.yml #执行playbook脚本
ansible-playbook test.yml -vv #执行时显示详细信息
二、Ad-Hoc执行方式中如何获得帮助
ansible-doc | 显示模块帮助的指令 |
格式 | ansible-doc [参数] [模块...] |
常用参数 | -l ##列出可用模块 -s ##显示指定模块的playbook片段 |
1、以ping模块为例:
ansible-doc ping -s #查看ping模块的简短帮助
加上参数<-s>显示简短信息,不加时显示详细信息。
在显示详细信息的情况下,可以查询到此模块的示例!!!
2、 <-l>参数用来显示ansible中所有可用模块
ansible-doc -l #显示ansible所有可用模块
三、ansible命令运行方式及常用参数
1、格式
2、常用参数
(1)指定版本、指定模块、显示详细信息
ansible --version #显示ansible版本信息
ansible westos -m ping #指定ping模块
ansible westos -m ping -v #显示执行命令时的详细信息,v越多越详细(最多3个v)
(2)预执行检测、报错时间等待、指定执行命令的远程用户身份
ansible westos -m shell -a 'useradd user1' -C #执行预检测,但不会真的执行
ansible westos -m shell -a 'hostname' -T 5 #报错时等待时间5秒
ansible westos -m shell -a 'whoami' -b --become-user=westos #指定远程主机中执行命令的用户身份为westos
(3)指定登录用户、指定是否输入切换sudo身份的密码
ansible westos -m shell -a 'whoami' -b --become-user=westos -u root -k
#指定远程ssh连接时用密码以root用户身份登录
ansible westos -m shell -a 'whoami' -b --become-user=westos -K
#指定远程ssh连接时以westos用户登录并输入sudo密码
四、ansible的基本颜色代表信
绿色 | 执行成功但为对远程主机做任何改变 |
黄色 | 执行成功并对远程主机做改变 |
红色 | 执行失败 |
注意:以上总结属于大部分情况下,并不完全准确。也有一些例外
五、ansible中的常用模块
1、command:功能: 在远程主机执行命令,此模块为默认模块
chdir | 执行命令前先进入到指定目录 |
cmd | 运行命令指定(一般可以不用加) |
creates | 如果文件存在将不运行 |
removes | 如果文件存在在将运行 |
free_form | 在远程主机中执行的命令,此参数不需要加 |
测试及测试结果:
ansible westos -m command -a 'pwd' #执行pwd
ansible westos -m command -a 'chdir=/mnt pwd' #进入/mnt目录下执行pwd
ansible westos -m command -a 'creates=/mnt pwd' #如果/mnt存在则不执行pwd
ansible westos -m command -a 'removes=/mnt pwd' #如果/mnt不存在则执行pwd
注意:Linux中的很多通配符在command模块中不支持,而在shell中可以支持。
2、shell:功能: 和command模块功能类似,但支持的功能更全面。
chdir | 执行命令前先进入到指定目录 |
cmd | 运行命令指定 |
creates | 如果文件存在将不运行 |
removes | 如果文件存在在将运行 |
free_form | 在远程主机中执行的命令,此参数不需要加 |
executable | 指定执行环境,默认为sh |
测试结果:
对于一些特殊符号,command无法使用,但是shell可以用。
executable:指定执行命令的环境
3、script:在ansible主机中写好的脚本在受控主机中执行
写一个显示主机名称的脚本,在远程主机中执行。
ansible westos -m script -a './hostname.sh'
测试结果如下:
4、copy:从ansible主机复制文件到受控主机
src | 源文件所在地 |
dest | 目的地文件所在地 |
owner / group | 指定目的地文件所有人 / 所有组 |
mode | 指定目的地文件权限 |
backup=yes | 当受控主机中存在文件时备份原文件 |
content | 指定文本内容直接在受控主机中生成文件 |
传输文件:
ansible westos -m copy -a 'src=/root/.ansible/inventory dest=/mnt'
传输文件并设置权限:mode
ansible westos -m copy -a 'src=/root/.ansible/inventory dest=/mnt/inventory1 mode=777'
传输文件并设置所有人和所有组:owner / group
ansible westos -m copy -a 'src=/root/.ansible/inventory dest=/mnt/inventory1 mode=777 owner=westos group=westos'
需要换行符的话,在文本内容的最后加上<\n>
传输文件并直接输入内容:content
ansible westos -m copy -a 'content="hello world" dest=/mnt/inventory2 mode=777 owner=westos group=westos'
传输文件并备份原文件:backup=yes
默认不设置时会直接覆盖目标主机的文件。因此,一般用于“当受控主机中存在文件时备份原文件”
注意:当传输的文件和之前的文件一样时,将不会成功传输,也就不存在是否覆盖或备份目标主机的文件。
ansible westos -m copy -a 'content="hello world\n" dest=/mnt/inventory2 mode=777 owner=westos group=westos backup=yes'
5、fetch:从受控主机把文件复制到ansible主机,但不支持目录
src | 受控主机的源文件 |
dest | 本机目录 |
flat | 基本名称功能 |
直接复制远程主机文件到本机:
ansible westos -m fetch -a 'src=/etc/hostname dest=/mnt'
flat基本名称功能:表示复制过来的是一个文件
添加上<flat=yes>参数后,复制到本机的是一个文件
不添加<flat=yes>参数时,复制到本机的是一个目录
6、file:设置文件的属性
path | 指定文件名称 |
state | 指定操作状态: touch 建立 absent 删除 directory 递归 link /hard 建立链接 |
mode | 设定权限 |
owner | 设定文件用户 |
group | 设定文件组 |
src | 源文件 |
dest | 目标文件 |
recurse=yes | 递归更改 |
(1)path和state
ansible westos -m file -a 'path=/mnt/westos state=touch' #创建文件
ansible westos -m file -a 'path=/mnt/westos state=absent' #删除文件
ansible westos -m file -a 'path=/mnt/westos state=directory' #创建目录
创建硬连接:
ansible westos -m file -a 'src=/mnt/westos/westosfile dest=/mnt/westos_hard state=hard'
可以看到,硬连接创建后,两个文件的ID是一样的
(2)mode、owner和group
ansible westos -m file -a 'path=/mnt/westos/westosfile state=touch mode=777 owner=westos group=westos'
(3)link
ansible westos -m file -a 'src=/mnt/westos dest=/mnt/westos_link state=link'
4、recurse=yes:递归更改
ansible westos -m file -a 'path=/mnt/westos mode=400 owner=westos group=westos recurse=yes'
7、archive:压缩
(1)常用参数:
(2) 测试:
ansible westos -m archive -a 'path=/etc dest=/mnt/etc.tar.gz format=gz owner=westos mode=777'
8、unarchive:解压缩
(1)常用参数
(2)测试:
ansible westos -m unarchive -a 'src=/mnt/etc.tar.gz dest=/mnt copy=no mode=777'
9、cron:设定计划任务
(1) 常用参数
(2)测试
设置定时任务:
ansible westos -m cron -a 'job=date name=test1 minute=*/2'
#设置定时任务,每两分钟显示以次时间
启用/关闭定时任务:
ansible westos -m cron -a 'job=date name=test1 disabled=yes' #关闭名为test1的任务
ansible westos -m cron -a 'job=date name=test1 disabled=no' #启用名为test1的任务
启动/关闭的原理就是,任务前是否用“#”注释掉了
删除定时任务:
ansible westos -m cron -a 'job=date name=test1 state=absent'
10、hostname:管理主机名称
ansible 172.25.254.151 -m hostname -a 'name=Client_151.westos.org'
11、yum_repository:配置系统软件仓库源文件
(1)常用参数
(2)测试
要追加的话可以直接在已存在的文件中添加,不会覆盖掉。
ansible westos -m yum_repository -a "name=AppStream baseurl=http://172.25.254.50/rhel8.2/AppStream description=AppStream gpgcheck=no file=westos"
ansible westos -m yum_repository -a "name=BaseOS baseurl=http://172.25.254.50/rhel8.2/BaseOS description=BaseOS gpgcheck=no file=westos"
禁用软件源:<enabled=0>
ansible westos -m yum_repository -a "name=BaseOS baseurl=http://172.25.254.50/rhel8.2/BaseOS description=BaseOS file=westos enabled=0"
重新启用的话,设置<enabled=1>即可。
想删除此软件源时<state=absent>
ansible westos -m yum_repository -a "name=BaseOS baseurl=http://172.25.254.50/rhel8.2/BaseOS description=BaseOS file=westos enabled=1 state=absent"
12、dnf:管理系统中的dnf仓库及管理软件
(1)常用参数
(2)测试:
安装软件:
ansible westos -m dnf -a 'name=vsftpd state=latest' #安装vsftpd
<state=lastes>表示如果没安装过则安装最新版,如果已安装旧版本则更新。
安装多个软件/且不检测授权信息:
ansible westos -m dnf -a 'name="httpd,dhcp-server" state=latest disable_gpg_check=yes'
<disable_gpg_check=yes>表示不检测授权信息
卸载软件:
ansible westos -m dnf -a 'name=httpd state=absent autoremove=yes'
<autoremove=yes>表示卸载软件时也卸载依赖性。不加的话默认只卸载软件本身,不卸载依赖性。
安装软件组:
ansible westos -m dnf -a 'name="@Virtualization Tools" state=latest'
安装网络软件:
ansible westos -m dnf -a 'name="http://172.25.254.50/public/linuxqq_2.0.0-b2-1084_x86_64.rpm" state=present disable_gpg_check=yes'
注意:一般网络软件都默认需要gpg检测,所以安装时需要手动添加参数来跳过gpg检测。<disable_gpg_check=yes>
13、service:管理系统服务状态
(1)常用参数
(2)测试
开启服务:
ansible westos -m service -a 'name=vsftpd state=started' #启动服务
ansible westos -m service -a 'name=vsftpd state=restarted' #重启服务
重新加载服务配置,开机自启动
ansible westos -m service -a 'name=httpd state=reloaded enabled=yes'
#设置服务开机自启动;重新加载配置
注意:有的服务是支持reloaded的,有的服务不支持。并不绝对!
14、firewalld:火墙管理
(1)常用参数
注意:客户机的火墙必须开启后才能进行此配置
(2)测试
设置远程主机的火墙,并在浏览器中测试
ansible westos -m firewalld -a 'zone=public service=http permanent=yes state=enabled immediate=yes'
15、user:模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作
(1)常用参数
(2)测试
创建用户并指定uid,主组,附加组,名称,shell,家目录,生成sshkey:
ansible westos -m user -a 'name=zhangzhaohui uid=888 group="westos" groups="dhcpd,root" shell=/bin/bash home=/home/haha generate_ssh_key=yes state=present'
删除用户:
ansible westos -m user -a 'name=lee uid=888 shell=/bin/bash state=absent remove=yes'
注意:删除用户时,需要直接删除只会删除用户,不会删除用户家目录;彻底删除可以加上参数<remove=yes>
创建用户并设置密码:
openssl passwd -6 'westos' #生成密文密码
ansible westos -m user -a 'name=lee uid=888 group="westos" groups="root" shell=/bin/bash state=present password="$6$NLiQ6kNGPbtCZaGI$d/8UNj0YGwAk6NfqTwzw4.nw0MVV/H0AVTr6GuF50g7LKEJUC.kay1GxEz2Px.1lrAEaFYyHocYrbl0ldxxam1"'
16、group:可以帮助我们管理远程主机上的组。
(1)常用参数
(2)测试
用户组的建立:
ansible westos -m group -a 'name=hahaha gid=6666 state=present'
建立用户组,并设定组ID为6666
用户组的删除:
ansible westos -m group -a 'name=hahaha state=absent'
17、lineinfile:匹配行
(1)常用参数
(2)测试
18、replace:可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换
(1)常用参数
(2)测试
先在目标主机中生成测试文本,然后使用替换命令替换字符。<backup=yes>表示在修改前先备份原文件。
ansible westos -m replace -a 'path=/mnt/test regexp="westos" replace="zhangzhaohui" backup=yes'
19、setup:模块用于收集远程主机的一些基本信息
(1)常用参数
(2)测试
ansible westos -m setup
要查看什么新的的话,可以直接过滤关键字。
如果查看某一项的内容时,可以直接添加参数<filter>来显示该项的内容。
20、debug:调试模块,用于在调试中输出信息
就类似于shell中的echo命令。用来输出字符。
(1)常用参数
(2)测试
msg和verbosity:
ansible westos -m debug -a 'msg="hello world"' #在受控主机显示hello world
ansible westos -m debug -a 'msg="hello world" verbosity=0' #debug显示级别
<verbosity=1>显示debug的级别,默认是0,完全显示。值越大,显示的越少。
var:作为变量,一般用来调试<.yml>剧本文件
只有当yml剧本中的变量有值时,它会正常输出;如果没有值,将会报错
本章总结:
1、ansible常用参数中的<-k>表示输入远程ssh的密码,<-K>表示输入sudo用户身份的密码。
2、shell和command的区别主要在于:
(1)shell支持executable命令,可以指定执行命令的环境;
(2)shell中可以、支持一些特殊字符,而command中并不支持。
3、显示系统所有组件/软件组
dnf group list --hidden #显示所有组件(不加hidden时则不显示隐藏组件)
4、debug模块中的“msg”用来显示字符串,而“var”用来显示变量。
5、由于时间紧迫, lineinfile模块尚未写完
~~~~~~~~~~~未完待续~~~~~~~~~~~~~~~~