Ansible模块

xiaolv
2
2025-11-07

ad-hoc 常用模块

1. ping模块,主机连通性测试

 ansible all -m ping

2. command模块

命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行,(此时command模块是默认模块,可忽略-m选项)。

不会通过shell进行处理,比如$HOME和操作如"小于"<",">", "|", ";","&"' 工作(需要使用(shell)模块实现这些功能)。

 chdir           # 在执行命令之前,先切换到该目录
 creates         # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
 removes         # 一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
 executable      # 切换shell来执行命令,需要使用命令的绝对路径(不常用,常用下面shell 模块)
 free_form       # 要执行的Linux指令,一般使用Ansible的-a参数代替(不常用,常用下面shell 模块)

范例:

 ansible webs -m command -a 'chdir=/data ls'
 ansible webs -m command -a 'creates=/data/f1 touch /data/f1'
 # 在webs组主机里,如果两个主机data下都有f1,就不会在data下创建f1
 ​
 ansible webs -m command -a 'removes=/data/f1 touch /data/f2'   
 # data下有f1文件就会创建f2文件

3. shell模块

shell模块在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道、echo等

在配置文件中将模块进行修改,就不需要输入-m shell选项

范例:

 ansible all -m shell -a 'cat /etc/passwd |grep root'
 node2 | CHANGED | rc=0 >>
 root:x:0:0:root:/root:/bin/bash
 node3 | CHANGED | rc=0 >>
 root:x:0:0:root:/root:/bin/bash
 node1 | CHANGED | rc=0 >>
 root:x:0:0:root:/root:/bin/bash

4. script 模块

在指定节点运行服务端的脚本

范例:

 vim test.sh
 ​
 #/bin/bash
 touch /data/test #创建/data/test
 df -h >> /data/test  #将df内容追加到/data/test文件中

结果:

 # ansible webs -m script -a '/data/test.sh'             # 在远程被控制的机器执行脚本
 # ansible webs -m command -a "chdir=/data ls"           # 查看文件生成
 # ansible webs -m shell -a "cat /data/test              # 查看文件内容正确

5. copy模块

copy:复制文件到远程主机,可以改权限等

(1)用法:

① 复制文件

-a "src= dest= "

② 给定内容生成文件

-a "content= dest= "

(2)相关选项如下:

 src:源,被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
 dest:目标,必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
 backup:被管理的远程主机已经有文件了,在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
 content:用于替代“src”,可以直接设定指定文件的值directory_mode:递归设定目录的权限,默认为系统默认权限
 force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
 others:所有的file模块里的选项都可以在这里使用

范例:

 ansible all -m copy -a "src=/local/file dest=/remote/file"
 # 指定内容, 直接生成目标文件
 ansible all -m copy -a "content='test content\n' dest=/tmp/test.txt"
 # 如目标存在, 默认覆盖, 此处指定先备份
 ansible all -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh owner=test mode=600 backup=yes"
 # 复制/etc/下的文件, 不包括/etc/目录本身
 ansible all -m copy -a "src=/etc/ dest=/backup"

6. fetch 模块

从远程某主机获取文件到本地

dest:用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile

  在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile

Src:在远程拉取的文件,并且必须是一个file,不能是目录

注意:从远程获取到本地的文件,会保存到以远程主机的IP 为名的目录中,且保存目录结构

范例:

 ansible srv -m fetch -a "src=/root/test.sh dest=/data/scripts"

7. File 模块

设置文件属性

创建目录:-a "path= state=directory"

创建链接文件:-a "path= src= state=link"

删除文件:-a "path= state=absent"

范例:

 ansible webs -m file -a "path=/data/f4 state=directory" # 在被控制端,创建f4 目录
 ​
 ansible webs -m file -a "path=/data/ state=absent"  # 删除data目录下的文件
 ​
 ansible webs -m file -a "src=/data/fstab path=/data/fstab.link state=link"    # 将/data/fstab 创建软链接为/data/fstab.link
 ​
 ansible webs -m file -a "src=/data/fstab path=/data/fstab1.link state=hard" # 将/data/fstab创建硬链接为/data/fstab1.link

8. hostname模块

管理主机名

范例:

 ansible 192.168.34.102 -m hostname -a "name=centos102" # 修改为centos102
 ​
 ansible 192.168.34.102 -a "hostname" # 查看当前修改后的主机名

9. cron模块

管理cron计划任务;-a "": 设置管理节点生成定时任务

 action:
 cron backup=  #如果设置,创建一个crontab备份 【yes|no】
 cron_file=  #如果指定, 使用这个文件cron.d,而不是单个用户
 ​
 crontab
   day=          #日应该运行的工作( 1-31, *, */2, )
   hour=         # 小时 ( 0-23, *, */2, )
   minute=       #分钟( 0-59, *, */2, )
   month=        #月( 1-12, *, /2, )
   weekday       # 周 ( 0-6 for Sunday-Saturday,, )
   job=          #指明运行的命令是什么
   name=         #定时任务描述
   reboot        # 任务在重启时运行,不建议使用,建议使用special_time
   special_time  #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
   state         #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务
   user          #以哪个用户的身份执行 

范例:备份数据库

 # 备份数据库脚本
 vim mysql_backup.sh
 mysqldump -A -F --single-transaction --master-data=2 -q -uroot | gzip >mysql_`date +%F_%T`.sql.gz
 ​
 # 创建任务 周一至周五的每天2点30分执行
 ansible all -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
 ​
 # 禁用计划任务
 ansible all -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh disabled=yes'
 # 启用计划任务
 ansible all -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh disabled=no'
 # 删除计划任务
 ansible all -m cron -a 'name="backup mysql" state=absent'

10. yum模块

选项

 conf_file           #设定远程yum安装时所依赖的配置文件。如配置文件没有在默认的位置
 disable_gpg_check   #是否禁止GPG checking,只用present or atest
 disablerepo         #临时禁止使用yum库。 只用于安装或更新时。``enablerepo  ``#临时使用的yum库。只用于安装或更新时。
 name=               #所安装的包的名称
 state=              #present安装, latest安装最新的, absent 卸载软件。
 update_cache        #强制更新yum的缓存。

范例

 # 安装dstat 包,忽略gpg_check
 ansible webs -m yum -a "name=dstat"
 ​
 # 卸载dstat 包
 ansible webs -m yum -a "name=dstat state=absent"
 ​
 # 安装多个包:
 ansible webs -m yum -a "name=httpd,vsftpd,memacahe"
 ​
 # 卸载多个包;
 ansible webs -m yum -a "name=httpd,vsftpd,memacahe,state=absent"
 # 更新缓存
 ansible webs -m yum -a "name=dstat update_cache=yes"  

apt 也是一样的

11. service模块

服务程序管理

选项

 arguments       #命令行提供额外的参数
 enabled         #设置开机启动。
 name=           #服务名称
 runlevel        #开机启动的级别,一般不用指定。
 sleep           #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。
 state           #started启动服务, stopped停止服务, restarted重启服务, reloaded重载配置

范例

 # 1、远程安装httpd服务
 ​
 ansible all -m yum -a "name=httpd"
 ​
 # 2、远程开启httpd服务:
 ​
 ansible all -m service -a "name=httpd state=started" 远程操作开启服务
 ansible all -m service -a "name=httpd state=enabled" 开机设置启动服务

12. user模块

用户模块,管理用户帐号

选项

 comment        # 用户的描述信息
 createhome    # 是否创建家目录
 force      # 在使用state=absent是, 行为与userdel -force一致.
 group     # 指定基本组
 groups   # 指定附加组,如果指定为(groups=)表示删除所有组
 home     # 指定用户家目录
 move_home    # 如果设置为home=时, 试图将用户主目录移动到指定的目录
 name     # 指定用户名
 non_unique     # 该选项允许改变非唯一的用户ID值
 password       # 指定用户密码,若指定的是明文密码,是不能用的,需用md5加密过后的密码
 remove   # 在使用state=absent时, 行为是与userdel -remove一致
 shell      # 指定默认shell
 state      # 设置帐号状态,不指定为创建,指定值为absent表示删除
 system  # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
 uid     # 指定用户的uid
 update_password    # 更新用户密码

范例:

 # 创建一个test用户的详细信息
 ansible all -m user -a 'name=test comment="test user" uid=200 home=/data/testhome group=root groups=bin,nobody shell=/sbin/nologin'
 # 删除用户信息,但是不会删除用户家目录的文件信息
 ansible all -m user -a "name=test state=absent"
 # 查看当前创建的用户信息
 ansible all -a "getent passwd test"
 # 跟上后面的remove=yes就会删除家目录信息
 ansiable all -a "name=test state=absent remove=yes"  

13. group模块

选项

 gid         # 设置组的GID号
 name=  # 管理组的名称
 state     # 指定组状态,默认为创建,设置值为absent为删除
 system  # 设置值为yes,表示为创建系统组

范例:

  ansible webs -m group -a "name=testgroup system=yes“  创建系统组
  ansible webs -m group -a "name=testgroup state=absent"  删除组

14. setup模块

查机器的所有facts信息

介绍

facts 组件是Ansible 用于采集被管机器设备信息的一个功能,我们可以使用setup 模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。

facts就是变量,内建变量每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。

setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。

setup模块下经常使用的一个参数是filter 参数,查询的是全部信息,很多,filter 相当于匹配筛选。

范例:

 # 查询当前机器的全部信息
 ansible all -m setup
 ​
 # 查看当前主机的总内存大小
 ansible all -m setup  -a "filter=ansible_memtotal_mb"  其中filter是过滤的含义。
 ​
 # 查看每个主机的centos版本号
 ansible all -m setup -a "filter=ansible_distribution_major_version"


动物装饰