Ansible 自动化运维 1 常用模块

环境:centos7.9  yum安装

1. 依赖包安装

yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto

2. yum安装

yum install -y ansible

3.编辑主机清单

vi /etc/ansible/hosts
#主机组标签
[主机组标签名]
#组内主机ip地址
x.x.x.x
x.x.x.x

4.测试ping模块

ansible 主机清单名 -m ping
#此时就会按照主机清进行ping测试  -m指定模块

5.查看组内主机信息

ansible  组名  --list

ansible默认模块是command模块,不制定模块的时候模块就是command模块。 

5.1 查看组内所有主机的系统版本信息

ansible test -m command -a 'cat /etc/redhat-release'

可以省略-m command

ansible test -a 'chdir=/etc cat redhat-release'

注意:-a 不能省略

command模块在命令执行上有局限性,有些命令执行后提示成功,其实并没有执行成功。不支持变量,部分符号等等。为了解决command模块的局限性,可以使用shell模块

6.shell模块

ansible test -m shell -a 'echo $HOSTNAME'

注意:在上面的命令 中 shell模块支持变量,但是命令本身必须用单引号,双引号无效,双引号看到的应该都是ansible控制主机本身的

既然shell模块比command模块支持的范围大,那么将shell模块设置为默认的模块不是更加快捷和高效吗?

当然可以,方法是更改ansible配置文件,/etc/ansible/ansible.cfg 将已经注释的#module_name=command 更改为shell并去掉前面的注释即可生效

vi  /etc/ansible/ansible.cfg
module_name=shell

7.script模块

 当我们通过shell模块或者command模块想要执行一个脚本的时候,通常的前提是这个脚本存在于主机清单内的每台主机上,而script模块则不需要如此麻烦的前提 ,在ansible控制主机上的脚本可以通过script模块直接批量执行

vi test.sh
#!/bin/bash

echo "My hostname is `hostname`"
ansible test -m script -a '/root/test.sh'

即可

其实也是拷贝过去的,只是ansible完成了远程拷贝的过程,是在远程主机的.ansible/tmp下,执行完成后删除了这个脚本而已。

8. copy模块 从ansible服务器主控端复制文件到远程主机,可以拷贝目录

ansible test -m copy -a "src=源文件路径 dest=目标路径 owner=xxx mode=600 backup=yes"
#owner更改属主 backup=yes是如果有同名文件,则备份一份
#mode是权限指定

9. fetch 模块 将远程主机的文件提取到ansible控制端,不支持目录

ansible test -m fetch -a 'src=/etc/redhat-release dest=/data/'

上面的目录会将远程主机的redhat-release文件抓取到ansible控制daunt的/data目录下,并生成以主机IP地址为目录名的子目录来存放文件

10. file模块 设置文件属性

#在path指定的路径下创建某个文件
ansible test -m file -a ’path=路径  state=touch'
#在path指定的路径下删除某个文件
ansible test -m file -a 'path=路径 state=absent'
#在path指定的路径下递归修改文件的各项指定属性
ansible test -m file -a 'path=路径   owner=xxx  mode=775'
#在path指定的路径下创建目录
ansible test -m file -a 'path=路径  state=directory owner=xxx group=xxx'
#创建软连接
ansible test - m file -a 'src=xxx dest=xxx state=link'

11. unarchive 模块 解包解压缩

将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes

将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

关于copy参数: 默认为yes,当copy=yes时,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no时,会在远程主机上寻找src文件

remote_src参数:和copy功能一样互斥,yes表示文件在远程主机上,no表示文件在ansible主机上

src参数:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,需要配合copy参数使用

dest参数:远程主机上的目标路径

mode参数:设置解压缩后的文件权限。

12. archive 打包模块

ansible test -m archive -a 'path=/var/log dest=/data/log.tar.bz2 format=bz2 owner=xxx mode=600'
#将指定路径path下的文件打包,dest是目的路径 打包格式format指定
#属主是owner指定,mode指定权限

13. hostname 改名模块

ansible 主机ip -m hostname -a 'name=hostname.xx.com'

14. cron 计划任务模块  支持时间:minute hour day month weekday

#范例
ansible 192.168.10.10 -m cron -a 'hour=2 minute=30 weekday=1-5 ="backup mysql" job=脚本绝对路径.sh'

禁用某个计划任务

ansible 192.168.10.10 -m cron -a 'hour=2 minute=30 weekday=1-5 ="backup mysql" job=脚本绝对路径.sh disable=yes' 
#注意disable选项

删除计划任务

ansible 主机ip -m cron -a 'name="xxx" state=absent'
#注意state=absent就代表删除

15. yum模块 --管理安装包,只支持RHEL CENTOS fedora 不支持Ubuntu

ansible 主机组 -m yum -a 'name=xxx state=present'
#state=present为安装  state=absent 为删除

16. Service模块 --管理服务

ansible 主机组 -m service -a 'name=xxx state=started enabled=yes'
#state=started为启动  enabled=yes为开机自启动 stopped为停止 reloaded 重载 restarted 重启服务

17. User模块--管理用户

ansible 主机组 -m user -a 'name=user1 comment="test user" uid=2222 home=/home/user1 group=xxxx'
#create_home=no 不创建家目录 

ansible 主机组 -m user -a 'name=user1 state=absent remove=yes'
#删除用户

18. Group模块--管理组

ansible 主机组 -m group -a 'name=xxxx gid=xxx system=yes'
#system=yes 指定为系统组
ansible 主机组 -m group -a 'name=xxxx state=absent'
#删除组

19. Lineinfile模块--ansible在使用sed进行替换时,经常会遇到需要转义的问题,而ansible在遇到特殊符号进行替换时,存在问题,无法正常替换,其实在ansible中提供了2 个模块,lineinfile和replace模块。

ansible 主机组 -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=enforcing'"
#将/etc/selinux/config中以SELINUX=开头的行替换成SELINUX=enforcing
ansible 主机组 -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'
#删除/etc/fstab中以#开头的行

20. replace模块--该模块类似于sed命令,主要也是基于正则进行匹配和替换。

ansible 主机组 -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"
#将/etc/fstab中以UUID开头的行加上#号,即注释掉

21. setup模块 收集主机的系统信息,这些facts信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度,

ansible 主机组 -m setup -a'filter=键'
#filter用来过滤内容

 

posted @ 2022-08-23 16:02  BlackData  阅读(85)  评论(0编辑  收藏  举报