ansible常见模块

1、user模块

1、ansible-doc 创建

[devops@master ansible]$ ansible node1 -m user -a "name=rhce comment=rhcsa"
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "comment": "rhcsa",
    "create_home": true,
    "group": 1001,
    "home": "/home/rhce",
    "name": "rhce",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 1001
}
[devops@master ansible]$ ansible node1 -m shell -a "grep rhce /etc/passwd"
node1 | CHANGED | rc=0 >>
rhce:x:1001:1001:rhcsa:/home/rhce:/bin/bash

2、写剧本编写

[devops@master ansible]$ ansible-doc user

二、文件相关模块

1、file模块

  • 主要就是用于被控主机文件的操作

  • 文件,目录,硬链接,软连接

[root@master ~]# ansible-doc user

1、file模块参数

  • path 文件的路径

  • state 状态,touch,directory,absent,link,hard

  • mode 文件的权限 0644

  • owner 文件的拥有人

  • group 文件的拥有组

  • src 被控节点文件原文件

  • dest 被控节点对于这个原文件做一个软连接或者硬链接,通常配合 state=link或者hard使用

[devops@master ansible]$ ansible node1 -m file -a " src=/etc/hosts dest=/mnt/hosts state=link "

2、copy模块

  • 主要就是将主控节点的文件拷贝到被控节点上面去

  • src 主控节点上面的文件

  • dest 将主控节点的文件拷贝到被控节点上

  • backup 如果拷贝的时候有相同的文件的话,可以对其进行一个备份的操作,yes,默认的情况下是不会进行备份的操作

  • content 写的内容直接拷贝到被控节点上面去,类似于重定向的操作

  • remote_src yes, 将被控节点的文件拷贝到被控节点上面去

[devops@master ansible]$ ansible node1 -m copy -a "src=/etc/hosts dest=/tmp/"

# 将被控节点的文件拷贝到被控节点上面去
[devops@master ansible]$ ansible node1 -m copy -a "remote_src=yes src=/tmp/f1.txt dest=/mnt/f1.txt"

# 写的内容直接拷贝到被控节点上面去
[devops@master ansible]$ ansible node1 -m copy -a "content='echo 123' dest=/tmp/f1.txt "

3、fetch模块

  • 被控节点的文件传输到主控节点上面

  • 拷贝到主控节点上面的表现形式是一个目录,是一个套娃的操作,以被控节点的主机名为目录命名

  • 只能拷贝文件,不能拷贝目录

  • flat yes,单纯的拷贝一个文件,不会被套娃的目录出现,dest=后面必须有一个/,才有用,默认为no

# 没有flat的话,就会以目录的形式存在,被控主机名为目录
[devops@master ansible]$ ansible node1 -m fetch -a "src=/etc/hosts dest=/tmp"
# 添加 flat=yes的话,就只需要拷贝文件到主控节点即可
# 然后这个dest后的话,需要添加/这个才行

[devops@master ansible]$ ansible node1 -m fetch -a "src=/etc/hosts dest=/tmp/ flat=yes"




三、软件相关的模块

1、yum_repository

  • 配置yum仓库

  • name 仓库名称

  • description 才是描述信息

  • baseurl 仓库地址

  • enabled 开启仓库

  • file 文件名 不需要写.repo,会自动的加上这个后缀,如果要在一个文件中多次的添加yum源的话,就需要file了

  • state present 默认创建,absent删除

# 编写了一个appstream的仓库后

# 再次添加到同一个文件的话,就只需要指定 file=文件名即可

2、yum模块

  • 主要就是安装软件包的

  • state present 安装,absent删除,lastet安装最新的版本

  • name 软件名, @包名 就是安装软件包组

四、系统服务相关的模块

1、service模块

  • 启动服务等操作

  • name 服务的名字

  • state started,stopped,reloaded

  • enabled yes就是开启自启,no就是开机不自动起来

[devops@master ansible]$ ansible node1 -m service -a "name=vsftpd state=started enabled=yes"


2、systemd模块

  • 与上面的模块类似操作

五、用户模块

1、user模块

  • 创建用户或者删除用户

  • name 用户名

  • comment 用户描述信息

  • shell 登录shell

  • create_home yes创建家目录,默认是创建在/home下面

  • password 需要进行加密,不能明文输入

  • groups 添加附加组,需要跟append 来配合使用

  • remove yes 然后加上state=absent 完全删除了用户

# 彻底删除一个用户
[devops@master ansible]$ ansible node1 -m user -a "name=rhce state=absent remove=yes"
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "force": false,
    "name": "rhce",
    "remove": true,
    "state": "absent"
}


# 将一个用户添加到其他的附属组中

# 如果只是单纯的使用groups这个组的话,只能添加一个用户

# 因此的话需要使用append=yes,这样的话,添加到多个附属组中去了

[devops@master ansible]$ ansible node1 -m user -a "name=rhce groups=apache append=yes

2、group模块

  • 创建一个组

六、计划任务模块

1、cron模块

  • name 计划任务的描述信息

  • job 执行的命令

  • minute 每分钟执行

  • user 以哪一个用户执行

  • weekday 每周

  • hour 每小时

  • cron_file 写在哪一个配置文件中 /etc/crontab ,需要加上user这个参数才行

[devops@master ansible]$ ansible node1 -m cron -a "name='echo 123' minute=1,5,10 state=present job='echo 123' cron_file=/etc/crontab user=root" 
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "cron_file": "/etc/crontab",
    "envs": [
        "SHELL",
        "PATH",
        "MAILTO"
    ],
    "jobs": [
        "echo 123"
    ]
}

七、解压缩模块(unarchive模块)

  • 将主控节点的tar包拷贝到被控节点上面去

  • remote_src yes的话,将被控节点的tar包拷贝到被控节点上,默认是no

  • list_files 列出解压后的文件即可

  • src 主控节点路径

  • dest 解压到被控节点上面去

# 将主控节点的文件解压到被控节点上面去了
[devops@master ansible]$ ansible node1 -m unarchive -a "src=./tmp.tar dest=/mnt"

# 将被控节点的文件解压到被控节点上面去了
[devops@master ansible]$ ansible node1 -m unarchive -a "src=/root/tmp.tar dest=/opt/ remote_src=yes"

八、同步模块(synchronize模块)

  • 同步文件,将主控节点文件同步到被控节点上面

  • 也就是将主控节点目录的内容同步到被控节点上面去

  • src 主控节点文件

  • dest 同步到被控节点上

  • mode 2种模式,默认是push,将主控节点上面的文件同步到被控节点上面

    • 如果是pull的话,就是将被控节点同步到主控节点上面去
# 添加了/ 就是将/opt下面的所有文件同步到/mnt目录下面
[devops@master ansible]$ ansible node1 -m synchronize -a "src=/opt/ dest=/mnt/"


# 不添加的话,就是将目录同步了过去,在被控节点上创建了目录


# pull模式,就是将被控节点的文件同步到主控节点上面去
[devops@master tmp]$ ansible node1 -m synchronize -a "src=/mnt/ dest=/tmp/ mode=pull" 

# 会报错,但是会同步成功,主要就是时间戳的问题

九、get_url模块

  • 从网上下载文件,下载到被控节点上面

  • dest 下载到被控节点的路径

  • url 下载的网址

[devops@master tmp]$ ansible node1 -m get_url -a "url=https://www.rpmfind.net/linux/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/v/vsftpd-3.0.5-12.fc43.x86_64.rpm dest=/tmp" 

10、firewalld模块

  • service 放行的端口和协议

  • permanent 是否永久修改还是临时修改

  • state 开启还是禁用

  • immediate yes的话,等同于reload, no的话就是不是立即生效,等待下次系统重启或者防火墙重启生效

11、mount模块

  • path 挂载点路径,挂载到哪个地方

  • src 要挂载的设备,磁盘

  • fstype 文件系统类型,ext4,还是xfs

  • state mounted,立即挂载并写入fstab中,present,只写入fstab中,不挂载,umounted,取消挂载,不删除fstab,absent 取消挂载并删除fstab条目

[devops@master ansible]$ ansible master -m mount -a "src=node1:/share/dir path=/nfs-dir state=absent fstype=nfs"


12、parted模块

  • device 指定硬盘设备路径/dev/sdb

  • label 指定分区的类型gpt,mbr,这个只是标记一下而已,并不会真的转换

  • number 指定分区序号

  • part_start 分区的起始位置,不能从0开始分区,因为通常由512个字节是作为分区表等信息的

  • part_end 分区的结束位置

  • state 指定操作方式,present 创建,absent删除,info查看信息系默认

  • flage 指定分区类型 [ lvm ]

[devops@master ansible]$ ansible node1 -m parted -a "device=/dev/nvme0n2 number=1 state=present fs_type=ext4 part_start=1MiB part_end=2GiB"

# 接着上面的最后大小,创建另外一个
[devops@master ansible]$ ansible node1 -m parted -a "device=/dev/nvme0n2 number=2 state=present fs_type=ext4 part_start=2GiB part_end=4GiB"

# 注意看起始和结束的大小位置
Device         Boot   Start     End Sectors Size Id Type
/dev/nvme0n2p1         2048 4194303 4192256   2G 83 Linux
/dev/nvme0n2p2      4194304 8388607 4194304   2G 83 Linux


# 分区后,不能直接进行挂载,因为没有进行磁盘格式化


# 删除磁盘分区
[devops@master ansible]$ ansible node1 -m parted -a "device=/dev/nvme0n2 number=1 state=absent"

13、lvg模块(创建卷组)

  • vg 卷组的名称

  • state present创建,absent 删除

  • force 在删除时使用,yes,表示允许删除带逻辑卷的卷组,默认为false

  • pvs 指定物理卷

  • pesize 设定pe的大写,默认为4

# 创建n1卷组
[devops@master ansible]$ ansible node1 -m lvg -a "pvs=/dev/nvme0n2 state=present vg=n1"

# 删除n1卷组
[devops@master ansible]$ ansible node1 -m lvg -a "vg=n1 state=absent force=yes"

14、lvol模块(创建逻辑卷)

  • lv 定义逻辑卷名称

  • vg 逻辑卷来自哪个vg

  • state persent创建,absent删除

  • size 定义逻辑卷大小,默认为m 1g

  • force 删除和压缩逻辑卷大小,默认为no,需要时开启,避免磁盘的损坏

# 创建一个逻辑卷大小为1g
[devops@master ansible]$ ansible node1 -m lvol -a "vg=n1 lv=n1-lv1 size=1g state=present "

# 缩小逻辑卷大小的话就需要加上force=yes
[devops@master ansible]$ ansible node1 -m lvol -a "vg=n1 lv=n1-lv1 size=500m state=present force=yes"


# 删除逻辑卷,需要带上force,vg即可
[devops@master ansible]$ ansible node1 -m lvol -a "lv=n1-lv1 force=yes state=absent vg=n1"


15、filesystem模块(磁盘格式化)

  • dev 需要格式化的分区

  • fstype 文件系统类型

  • force 强制格式化,如果里面分区有数据的话

[devops@master ansible]$ ansible node1 -m filesystem -a "dev=/dev/mapper/n1-n1--lv1 fstype=ext4 "

# 更改文件系统类型的话,需要带上force=yes参数才可以
[devops@master ansible]$ ansible node1 -m filesystem -a "dev=/dev/mapper/n1-n1--lv1 fstype=xfs  force=yes"


16、lineinfile模块(修改单行的内容)

  • 可以修改配置的内容

  • 以行为目标进行修改

  • path 要修改的文件

  • regexp 正则表达式匹配要修改的行,匹配的是行,相当是grep,如果没有匹配到的话,就会在文件的末尾插入内容

  • line 修改或者插入行的内容,如果匹配到多行相同的内容,则修改最后一个匹配到的内容即可

  • insertbefore 在匹配的行前面插入,匹配的行

  • insertafter 在匹配的行后面插入,匹配的行

  • backup 是否备份文件

  • create 文件不存在则创建文件

  • validate 验证文件的修改的有效性,就是先预模拟一下,检测一下文件的合法性,合法后,再来修改

  • backerfs 匹配到了,就进行替换,没有过滤到就不替换了,默认是关闭的(no),yes匹配不到,就不要替换,要与regexp一起使用才行

  • state present,absent删除,会将匹配到的所有内容删除掉

# 匹配root这一行,然后修改为rhce
[devops@master test]$ cat l1.yml 
- hosts: master
  tasks:
    - lineinfile:
        path: /home/devops/ansible/test/passwd
        regexp: "^root"  # 支持正则表达式
        line: rhce  # 修改的内容


# 在rhce前面插入一行内容
[devops@master test]$ cat l1.yml 
- hosts: master
  tasks:
    - lineinfile:
        path: /home/devops/ansible/test/passwd
        insertbefore: "^rhce"  # 匹配到rhce这一行在前面进行插入操作
        line: "ppppp"

# backup备份文件
[devops@master test]$ cat l1.yml 
- hosts: master
  tasks:
    - lineinfile:
        path: /home/devops/ansible/test/passwd
        insertbefore: "^ppppp"
        line: "qqq"
        backup: yes


# 删除所有的rhce
[devops@master test]$ cat l1.yml 
- hosts: master
  tasks:
    - lineinfile:
        path: /home/devops/ansible/test/passwd
        regexp: "rhce"
        state: absent

# 匹配到相同的内容时,修改最后一个匹配到的行
[devops@master test]$ cat passwd
ansible
rhce
rhce
rhce
rhce
rhce
ppp
ansible
[devops@master test]$ cat l1.yml 
- hosts: master
  tasks:
    - lineinfile:
        path: /home/devops/ansible/test/passwd
        regexp: "rhce"
        backrefs: true
        line: "ppp"


17、blockinfile模块(修改多行内容)

  • marker 指定块标记,自定义标记,生成一个begin和end,如果有多个marker标记一样的话,删除最后一个marker标记即可,不会删除所有的marker标记

  • block 要插入的文本内容

  • 插入的时候会自动生成一个注释,也可以自定义这个注释

#  自动写在最后一行
[devops@master test]$ cat b1.yml 
- hosts: master
  tasks:
    - blockinfile:
        path: /home/devops/ansible/test/passwd
        create: yes
        block: |
          name=zhang
          age=20
          sex=boy  


[devops@master test]$ cat passwd 
ansible
rhce
ppp
ansible
# BEGIN ANSIBLE MANAGED BLOCK  # 生成的注释
name=zhang
age=20
sex=boy  
# END ANSIBLE MANAGED BLOCK

# marker 做标记
[devops@master test]$ cat b1.yml 
- hosts: master
  tasks:
    - blockinfile:
        path: /home/devops/ansible/test/passwd
        create: yes
        marker: "# RHCE {mark} ansible blockinfile"
        block: |
          name=zhang
          age=20
          sex=boy  
[devops@master test]$ cat passwd 
ansible
rhce
ppp
ansible
# BEGIN ANSIBLE MANAGED BLOCK
name=zhang
age=20
sex=boy  
# END ANSIBLE MANAGED BLOCK
# RHCE BEGIN ansible blockinfile
name=zhang
age=20
sex=boy  
# RHCE END ansible blockinfile


# 删除内容
[devops@master test]$ cat b1.yml 
- hosts: master
  tasks:
    - blockinfile:
        path: /home/devops/ansible/test/passwd
        create: yes
        state: absent
        block: |
          name=zhang
          age=20
          sex=boy  

# 没有指定marker标记的话,默认删除的默认的marker标记
[devops@master test]$ cat passwd 
ansible
rhce
ppp
ansible
# RHCE BEGIN ansible blockinfile
name=zhang
age=20
sex=boy  
# RHCE END ansible blockinfile



# 删除指定marker标记

[devops@master test]$ cat b1.yml 
- hosts: master
  tasks:
    - blockinfile:
        path: /home/devops/ansible/test/passwd
        create: yes
        state: absent
        marker: "# RHCE {mark} ansible blockinfile"
[devops@master test]$ cat passwd 
ansible
rhce
ppp
ansible

# 如果要删除指定的行的话,需要借助lineinfile模块,在行前和行后插入标记,然后blockinfile模块删除指定的行

posted @ 2025-09-08 13:11  乔的港口  阅读(12)  评论(0)    收藏  举报