其他分享
首页 > 其他分享> > 自动化运维之2——Ansible中常用模块

自动化运维之2——Ansible中常用模块

作者:互联网

目录

一、ansible实现管理的方式

二、Ad-Hoc执行方式中如何获得帮助

 三、ansible命令运行方式及常用参数

1、格式

2、常用参数

四、ansible的基本颜色代表信

 五、ansible中的常用模块

1、command:功能: 在远程主机执行命令,此模块为默认模块

2、shell:功能: 和command模块功能类似,但支持的功能更全面。

3、script:在ansible主机中写好的脚本在受控主机中执行

4、copy:从ansible主机复制文件到受控主机

5、fetch:从受控主机把文件复制到ansible主机,但不支持目录

6、file:设置文件的属性

7、archive:压缩

 8、unarchive:解压缩

9、cron:设定计划任务

10、hostname:管理主机名称

11、yum_repository:配置系统软件仓库源文件

12、dnf:管理系统中的dnf仓库及管理软件

13、service:管理系统服务状态

14、firewalld:火墙管理

15、user:模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作

16、group:可以帮助我们管理远程主机上的组。

17、lineinfile:匹配行

18、replace:可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换

19、setup:模块用于收集远程主机的一些基本信息

20、debug:调试模块,用于在调试中输出信息

本章总结:


一、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模块尚未写完

~~~~~~~~~~~未完待续~~~~~~~~~~~~~~~~

标签:name,运维,主机,ansible,westos,mnt,state,Ansible,模块
来源: https://blog.csdn.net/Zhaohui_Zhang/article/details/122023134