Ansible基础:(二)Ansible常用模块简介

admin 2022年09月18日 549次浏览

详细模块信息,请查看:官方文档

1、command

  • 模块功能

    在远程主机执行命令(有局限性),该模块为默认模块,可以省略 -m 选项

  • 使用示例

    ansible host_g1 -a 'whoami'
    

2、shell

  • 模块功能

    command ,只是使用 shell 执行命令

  • 常用参数

    • chdir:执行命令前,切换到指定目录
    • creates:如果指定文件不存在,就执行后续命令,否则不执行
    • removes:如果指定文件存在,就执行后续命令,否则不执行
  • 修改为默认模块

    将配置文件 /etc/ansible/ansible.cfg 中 module_name 选项修改为 module_name = shell

  • 使用示例

    # 普通使用
    ansible host -a 'ls /root/test.txt'
    
    # 使用creates参数
    ansible host -a 'chdir=/var/log creates=/root/test.txt cat /etc/centos-release'
    
    # 使用removes参数
    ansible host -a 'chdir=/var/log removes=/root/test.txt cat /etc/centos-release'
    

3、script

  • 模块功能

    在目标主机上执行 ansible 控制主机上的 shell 脚本

  • 使用示例

    ansible host -m script -a 'test.sh'
    

4、copy

  • 模块功能

    将 ansible 管理主机上的文件复制到远程主机(支持复制目录)

  • 常用参数

    • src:源文件
    • dest:目标文件
    • backup:覆盖前先备份
    • owner:属主
    • mode:权限
  • 使用示例

    # 复制时先备份
    # 若目标存在,默认会覆盖源文件
    ansible host_g1 -m copy -a "src=/root/test.sh dest=/root/test.sh backup=yes"
    
    # 复制时,指定目标用户及权限
    ansible host_g1 -m copy -a "src=/root/test.sh dest=/root/test.sh owner=user mode=600 backup=yes"
    
    # 根据指定内容,直接生成文件
    ansible host_g1 -m copy -a "content='line1\nline2' dest=/root/test"
    

5、fetch

  • 模块功能

    将被管理端的文件复制到 ansible 控制主机中(不支持目录复制)

  • 使用示例

    ansible host_g1 -m fetch -a "src=/etc/centos-release dest=/root/tmp"
    

6、unarchive

  • 模块功能

    文件解压缩

  • 实现方法

    • 将 ansible 控制主机上的压缩包上传到远程主机,然后解压缩到指定目录,设置 copy=yes
    • 将远程主机上的压缩包解压到指定目录,设置 copy=no
  • 常用参数

    • copy:设置为 yes 时,将 ansible 管理主机上的压缩包上传到远程主机;设置为 no 时,在远程主机上寻找 src 源文件
    • src:源路径,可以在 ansible 主机,也可以在远程主机
    • dest:远程主机上的目标路径
    • mode:设置解压缩后的文件权限
  • 使用示例

    # 上传并解压缩
    ansible host_g1 -m unarchive -a 'src=/root/test.tar dest=/root/tmp copy=yes'
    

7、hostname

  • 模块功能

    修改目标主机的 hostname

  • 使用示例

    ansible 192.168.137.11 -m hostname -a 'name=centos7_11'
    

8、cron

  • 模块功能

    计划任务

    支持时间:minute、hour、day、mouth、weekday

  • 常用参数

    • name:任务名称
    • job:任务文件
    • disabled:是否禁用任务
    • state:状态
      • present:安装任务(默认值)
      • absent:删除任务
  • 使用示例

    # 创建计划任务
    ansible svr1 -m cron -a 'hour=23 minute=50 weekday=1-5 name="test cron job" job=/root/test.sh'
    
    # 禁用计划任务
    ansible svr1 -m cron -a "hour=23 minute=50 weekday=1-5 name='test cron job' job=/root/test.sh disabled=yes"
    
    # 启用计划任务
    ansible svr1 -m cron -a "hour=23 minute=50 weekday=1-5 name='test cron job' job=/root/test.sh disabled=no"
    
    # 删除计划任务
    ansible svr1 -m cron -a "name='test cron job' state=absent"
    

9、yum

  • 模块功能

    管理软件包

  • 使用示例

    # 安装软件包
    ansible svr1 -m yum -a "name=httpd state=present"
    
    # 卸载软件包
    ansible svr1 -m yum -a "name=httpd state=absent"
    

10、service

  • 模块功能

    服务管理

  • 使用示例

    # 启动服务
    ansible svr1 -m service -a 'name=httpd state=started'
    
    # 停止服务
    ansible svr1 -m service -a 'name=httpd state=stopped'
    
    # 重启服务
    ansible svr1 -m service -a 'name=httpd state=restarted'
    
    # 开机启动服务
    ansible svr1 -m service -a 'name=httpd state=started enabled=yes'
    

11、lineinfile

ansible 在使用 sed 命令进行替换操作时,经常会遇到需要转义的问题,而且 ansible 在遇到特殊符号进行替换时,存在问题,无法正常进行替换,在 ansible 中可以使用 lineinfile 和 replace 两个模块进行替换操作

  • 模块功能

    同 sed 命令,用于修改文件内容

  • 常用参数

    • path:需要修改的文件
    • regexp:表达式,定位需要修改的内容
    • line:修改后的内容
    • dest:需要修改的目标文件
  • 使用示例

    # 替换指定内容
    ansible svr1 -m lineinfile -a 'path=/etc/selinux/config regexp=^SELINUX= line="SELINUX=disabled"'
    
    # 删除指定内容
    ansible svr1 -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'
    

12、setup

  • 模块功能

    用来收集远程主机的详细系统信息,这些 facts 信息可以直接以变量形式使用,但是如果主机较多,会影响速度,可以在 playbook 中使用 gather_facts: no 来禁止 ansible 收集 facts 信息

  • 使用语法

    ansible [ip | group] -m setup
    
  • 使用示例

    # 获取指定主机的详细信息
    ansible 192.168.137.11 -m setup
    
    # 获取系统名称
    ansible svr1 -m setup -a 'filter=ansible_distribution'
    
    # 获取系统版本
    ansible svr1 -m setup -a 'filter=ansible_distribution_version'
    
    # 获取系统内核版本
    ansible svr1 -m setup -a 'filter=ansible_kernel'
    
    # 获取iSCSI iqn信息
    ansible svr1 -m setup -a 'filter=ansible_iscsi_iqn'
    
    # 获取CPU数量
    ansible svr1 -m setup -a 'filter=ansible_processor_vcpus'
    
    # 获取内存信息
    ansible svr1 -m setup -a 'filter=ansible_memtotal_mb'
    
    # 获取主机架构信息
    ansible svr1 -m setup -a 'filter=ansible_machine'
    

13、user

  • 模块功能

    用于管理用户帐户和用户属性,管理 Windows 用户使用 win_user 模块

  • 常用参数

    • name:用户名
    • group:指定用户所属组
    • groups:指定用户附加组,当该值设置为空时,用户将从除主组以外的所有组中删除
    • home:设置用户主目录
    • remove:删除与用户相关的目录
    • shell:设置用户使用的shell
    • state:执行状态,present(创建用户,默认值),absent(删除用户)
  • 使用示例

    # 创建用户
    ansible svr1 -m user -a 'name=user01 home=/home/t_user shell=/usr/sbin/nologin state=present'
    
    # 删除用户
     ansible svr1 -m user -a 'name=user01 remove=yes state=absent'