侧边栏壁纸
博主头像
zyixin

当你觉得为时已晚的时候,恰恰是最早的时候

  • 累计撰写 64 篇文章
  • 累计创建 0 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

ansible常用模块

zyixin
2022-04-01 / 0 评论 / 0 点赞 / 1,975 阅读 / 7,018 字
温馨提示:
本文最后更新于 2022-04-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1 Ansible常用模块

2015年底270多个模块,2016年达到540个,2018年01月12日有1378个模块,2018年07月15日1852个模块,2019年05月25日(ansible2.7.10)时2080个模块,2020年03月02日有3387个模块

虽然模块众多,但最常用的模块也就2、30个而已,针对特定业务只用10几个模块

常用模块帮助文档参考:
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

1.1 Command 模块

功能:在远程主机执行命令,此为默认模块,可忽略-m选项
注意:此命令不支持$VARNAME < > | ; & 等,用shell模块实现
范例:

ansible srv -m command -a 'service vsftpd start'
ansible srv -m command -a 'echo zyixin |passwd -stdin zyixin'

[root@ansible-server ~]# ansible websrvs -m command -a "cat /etc/centos-release"
192.168.139.200 | CHANGED | rc=0 >>
CentOS Linux release 7.7.1908 (Core)
192.168.139.100 | CHANGED | rc=0 >>
CentOS Linux release 7.7.1908 (Core)

1.2 Shell模块

功能:和command相似,用shell执行命令
范例:

ansible srv -m shell -a 'echo zyixin |passwd -stdin zyixin'
[root@ansible-server ~]# ansible websrvs -m shell -a "echo hello > /home/zyixin/ceshi.txt"
192.168.139.200 | CHANGED | rc=0 >>

192.168.139.100 | CHANGED | rc=0 >>

[root@ansible-server ~]# ansible websrvs -m shell -a 'echo $HOSTNAME'
192.168.139.200 | CHANGED | rc=0 >>
ansible-agent-2
192.168.139.100 | CHANGED | rc=0 >>
ansible-agent-1

注意:调用bash执行命令 类似cat /tmp/test.md | awk -F ‘|’‘{print 1,2}’ &> /tmp/example.txt这些复杂命令,即使使用shell也可能会失败,解决方法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器

修改ansible默认模块,将command模块修改为shell模块

[root@ansible-server ~]# vim /etc/ansible/ansible.cfg
# 修改默认模块
# default module name for /usr/bin/ansible
module_name = shell

1.3 Script模块

功能:在远程主机上运行ansible服务器上的脚本
范例:

ansible websrvs -m script -a '/data/test.sh'

1.4 Copy模块

功能:从ansible服务器主控端复制文件到远程主机

#如目标存在,默认覆盖,此处指定先备份
[root@ansible-server data]# ansible websrvs -m copy -a "src=/root/test1.sh data=/tmp/test2.sh owner=zyixin mode=600 backup=yes"
#指定内容,直接生成目标文件
[root@ansible-server data]# ansible websrvs -m copy -a "content='test content1\ntest content2' dest=/tmp/test.txt"
#复制/etc/下的文件,不包括/etc/目录自身
[root@ansible-server data]# ansible websrvs -m copy -a "src=/etc/ dest=/backcp"

1.5 Fetch模块

功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
范例:

ansible websrvs -m fetch 'src=/data/test3.sh dest=/data/script'

范例:

[root@ansible-server ~]# ansible all -m fetch -a 'src=/etc/redhat-release dest=/data/'
[root@ansible-server ~]# tree /data/
/data/
├── 192.168.139.100
│   └── etc
│       └── redhat-release
└── 192.168.139.200
    └── etc
        └── redhat-release

4 directories, 2 files

1.6 File模块

功能:设置文件属性
范例:

#创建空文件
ansible websrvs -m file -a 'path=/data/test.txt state=touch'
#删除文件
ansible websrvs -m file -a 'path=/data/test.txt state=absent'
#赋予文件属组权限
ansible websrvs -m file -a "path=/data/test.txt owner=zyixin group=zyixin mode=755"
#创建目录
ansible websrvs -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"
#创建软链接
ansible websrvs -m file -a 'src=/data/testfile dest=/data/testfile-link state=link'

1.7 unarchive模块

功能:解包解压缩

实现有两种用法:
1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no

常见参数:
· copy:默认为yes,当copy=yes时,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
· remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上
· src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
· dest:远程主机上的目标路径
· mode:设置解压缩后的文件权限
范例:

ansible websrvs -m unarchive -a 'src=/data/foo.tar.gz dest=/var/lib/foo'
ansible websrvs -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'
ansible websrvs -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no'

1.8 Archive模块

功能:打包压缩
范例:

ansible websrvs -m archive -a 'path=/var/log dest=/data/log.tar.gz format=tar.gz owner=zyixin mode=0600'

1.9 Hostname模块

功能:管理主机名
范例:

ansible node1 -m hostname -a "name=websrvs"
ansible 192.168.139.100 hostname -a 'name=node18.zyixinn.con'

1.10 Cron模块

功能:计划任务
支持时间:minute、hour、day、month、weekday
范例:

#备份数据库脚本
[root@ansible-server ~]# cat mysql_backup.sh
mysqldump -A -F --single-transaction --master-data=2 -q -urppt |gzip > /data/mysql_data+%F_%T.sql.gz
#创建任务
ansible dbsrvs -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
ansible 192.168.139.100 -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &> /dev/null' name=Synctime"
#禁用计划任务
ansible websrvs =m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &> /dev/null' name=Synctime disabled=yes"
#启用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &> /dev/null' name=Synctime disabled=no"
#删除任务
ansible websrvs -m cron -a "name='backup mysql' state=absent"
ansible websrvs -m cron -a 'state=absent name=Synctime'

1.11 Yum模块

功能:管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其他版本

ansible websrvs -m yum -a 'name=httpd state=present'		#安装
ansible websrvs -m yum -a 'name=httpd state=absent'		#删除

1.12 Service模块

功能:管理模块
范例:

ansible websrvs -m service -a 'name=httpd state=started enabled=yes'
ansible websrvs -m service -a 'name=httpd state=stopped'
ansible websrvs -m service -a 'name=httpd state=reloaded'
ansible websrvs -m shell -a "sed -i 's/^Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf"
ansible websrvs -m service -a 'name=httpd state=restarted'

1.13 User模块

功能:管理用户
范例:

#创建用户
ansible websrvs -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible websrvs -m user -a 'name=nginx comment=nginx uid=88 group=nginx groups="root,daemon" shell=/sbin/nologin system=yes create_home=no home=/data/nginx non_unique=yes'
#删除用户及家目录等数据
ansible websrvs -m user -a 'name=nginx state=absent remove=yes'

1.14 Group模块

功能:管理组
范例:

#创建组
ansible websrvs -m group -a 'name=nginx gid=88 system=yes'
#删除组
ansible websrvs -m group -a 'name=nginx state=absent'

1.15 Lineinfile模块

ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换,其实在ansible自身提供了两个模块,Lineinfile模块和replace模块,可以方便的进行替换
功能:相当于sed,可以修改文件内容
范例:

ansible websrvs -m lineinfile -a "path=/etc/selinux/config regxp='^SELINUX=' line='SELINUX=enforcing'"
ansible websrvs -m lineinfile -a 'dest=/etc/fstab state=absent regxp="^#"'

1.16 Replace模块

该模块有点类似于sed命令,主要也是基于正则进行匹配和替换
范例:

ansible websrvs -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"

1.17 Setup模块

功能:setup模块来采集主机的系统信息,这些facts信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度,可以使用gather_facts:no来静止Ansible收集facts信息
范例:

ansible websrvs -m setup
ansible websrvs -m setup -a "filter=ansible_nodename"
ansible websrvs -m setup -a "filter=ansible_hostname"
ansible websrvs -m setup -a "filter=ansible_domain"
ansible websrvs -m setup -a "filter=ansible_memtotal_mb"
ansible websrvs -m setup -a "filter=ansible_memory_mb"
ansible websrvs -m setup -a "filter=ansible_memfree_mb"
ansible websrvs -m setup -a "filter=ansible_os_family"
ansible websrvs -m setup -a "filter=ansible_distribution_major_version"
ansible websrvs -m setup -a "filter=ansible_distrbution_version"
ansible websrvs -m setup -a "filter=ansible_processor_vcpus"
ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"
ansible websrvs -m setup -a "filter=ansible_architecture"

范例:

#查看系统版本
[root@ansible-server ~]# ansible websrvs -m setup -a "filter=ansible_distribution_major_version"
#查看cpu核数
[root@ansible-server ~]# ansible websrvs -m setup -a "filter=ansible_processor_vcpus"
0

评论区