PlayBook常用的模块编写

一、copy模块

实现控制节点和被控节点文件的传输;把控制节点的文件传输给被控节点,在被控节点自身上进行文件拷贝,支持将内容直接写入到文件中

复制代码
- name: copy
  hosts: all
  tasks:
  - name: cp a file chmod owner group
    copy:
      src: /etc/passwd
      dest: /opt/passwd
      owner: user
      group: root
      mode: '0644'

  - name: changes content
    copy:
      content: hello world
      dest: /var/www/html/index.html

  - name: remote
    copy:
      remote_src: yes
      src: /etc/passwd
      dest: /opt/passwd-remote
      # remote_src: yes 源文件已经在远程主机上,在远程主机内部复制/移动

二、file模块

file:在被控节点查看文件信息、创建、删除、修改普通文件/目录文件

复制代码
- name: play03
  hosts: all
  tasks:
  - name: 查看指定文件的信息
    file:
      path: /etc/passwd
      # state: file  默认可加可不加

  - name: touch a file
    file:
      path: /opt/aaa
      owner: good
      group: devops
      mode: '0700'
      state: touch

  - name: touch a directory
    file:
      path: /opt/dir
      #recurse 递归修改指定目录下所有内容(包括子目录和文件)的属性(如权限、属主、属组) 
      state: directory

  - name: rm a file
    file:
      path: /opt/aaa
      state: absent

  - name: a link
    file:
      src: /etc/passwd
      dest: /opt/passwd-link
      state: link

  - name: a hard
    file:
      src: /etc/passwd
      dest: /tmp/passwd-hard
      state: hard

三、fetch模块

将被控节点的文件拷贝到控制节点上,只能拉取普通文件,目录是无法拷贝过来的,默认情况下,拉取过来的文件在控制节点上是以被控节点主机名的名字作为目录名字来存储的

复制代码
- name: fetch
  hosts: all
  tasks:
    - name: flat: no(默认) 按dest/主机名/完整路径保存文件,不会冲突
      fetch:
        src: /etc/passwd
        dest: /opt/

    - name: flat: yes  直接保存到dest指定目录,不创建主机子目录
      fetch:
        src: /etc/passwd
        dest: /opt/
        flat: yes

四、yum_repository模块

管理yum仓库配置文件(创建配置文件往里面写内容,修改配置文件的内容)不能删除yum仓库配置文件

复制代码
- name: yum_repository
  hosts: all
  tasks:
    - name: base_repository
      yum_repository:
        file: yum
          # file: yum = "yum.repo"
        name: BaseOS
          # name: BaseOS = [BaseOS ] 
        description: baseos
          # description: baseos = "name=baseos"
        baseurl: file:///iso/BaseOS
        gpgcheck: 0
        enabled: 1

    - name: app_repository
      yum_repository:
        file: yum
        name: AppStream
        description: appstream
        baseurl: file:///iso/AppStream
        gpgcheck: 0
        enabled: 1

五、yum模块

管理软件包的,比如安装、更新、卸载...

复制代码
- name: yum
  hosts: all
  tasks:
    - name: mount
      shell: "mount /dev/sr0 /iso"
      ignore_errors: yes

    - name: yum apache
      yum:
        name: httpd
        state: present

    - name: yum tools
      yum:
        name: "@Development tools"
        state: present

    - name: upgrade all packages
      yum:
        name: '*'
        state: latest

    - name: remove a apache
      yum:
        name: httpd
        state: absent

六、user模块

管理用户的,相当于useradd、userdel、usermod

复制代码
- name:
  hosts: all
  tasks:
    - name: add a user
      user:
        name: xiaa
        comment: this is my first create user
        uid: 5656
        group: root
        home: /tmp/xiaa
        shell: /bin/bash

    - name: changes xiaa
      user:
        name: xiaa
        uid: 3666
        shell: /sbin/nologin

    - name: remove xiaa
      user:
        name: xiaa
        state: absent
        remove: yes

七、group模块

管理用户组的,相当于groupadd、groupmod、groupdel

复制代码
- name: group
  hosts: all
  tasks:
    - name: add a group
      group:
        name: itgroup
        gid: 3345
        state: present

    - name: changes a group
      group:
        name: itgroup
        gid: 4533
        state: present

    - name: rm a group
      group:
        name: itgroup
        state: absent

八、systemd模块

systemd模块多了daemon_reload参数,相当于执行了systemctl daemon-reload,一旦修改了服务的服务单元配置文件,一定要daemon-reload才能够读取到。其他的参数都是一样

复制代码
- name: systemd
  hosts: all
  tasks:
    - name: systemd start firewalld
      systemd:
        name: firewalld
        state: started

    - name: systemd stop httpd
      systemd:
        name: httpd
        state: stopped

    - name: systemd restart httpd
      systemd:
        name: httpd
        state: restarted
        daemon_reload: yes

九、cron模块

相当于crontab周期性计划任务

复制代码
- name: crontab
  hosts: all
  tasks:
    - name: create a crontab
      cron:
        name: "create"      # Ansible 用此标识管理
        minute: "20,40"
        hour: "12"
        job: "echo 'hello world'"
        user: root

    - name: text cron_file
      cron:
        name: "echo"
        minute: "0"
        hour: "2"
        job: "echo '111'"
        cron_file: ansible_cron_echo    # 写入 /etc/cron.d/ansible_cron_echo
        user: root     # 通常需要指定执行用户

    - name: rm create
      cron:
        name: "create"
        state: absent

    - name: rm echo
      cron:
        name: "echo"
        cron_file: ansible_cron_echo
        state: absent

十、get_url模块

在被控节点下载指定的文件

复制代码
- name: get_url
  hosts: all
  tasks:
    - name: curl or wget a file
      get_url:
        url: https://releases.ansible.com/ansible/ansible-2.9.0.tar.gz
        dest: /opt/

十一、unarchive模块

可以把控制节点的压缩包解压缩到被控节点,也可以在被控节点自身上找压缩包然后解压缩到自身另外一个目录

复制代码
- name: unarchive
  hosts: all
  tasks:
    - name: 控制节点解压缩到被控节点
      unarchive:
        src: /passwd.tar.gz
        dest: /tmp/

    - name: 被控节点打包压缩
      shell: "tar -czf demo.tar.gz /etc/passwd"

    - name: 被控节点的压缩包解压到自身的/tmp目录
      unarchive:
        src: /home/devops/demo.tar.gz
        dest: /tmp
        remote_src: yes

十二、synchronize模块

相当于执行rsync命令

  • 将远程主机 被控节点的文件拉取到控制节点上

  • 将控制节点的文件推送到被控节点

底层其实走的是rsync命令,而rsync走的是SSH协议

复制代码
- name: synchronize
  hosts: all
  tasks:
    - name: push file
      synchronize:
        src: /etc/group
        dest: /opt/

    - name: pull file
      synchronize:
        src: /opt/ansible-2.9.0.tar.gz
        dest: /tmp/
        mode: pull

    - name: push directory
      synchronize:
        src: /etc
        dest: /tmp

    - name: push directory file
      synchronize:
        src: /opt/
        dest: /tmp

    - name: rm /opt/
      shell: "rm -rf /opt/*"

    - name: rm /tmp/
      shell: "rm -rf /tmp/*"
相关推荐
SilentSamsara2 小时前
etcd 运维:数据一致性、备份恢复与性能调优
运维·服务器·数据库·kubernetes·kubectl·k8s·etcd
RH2312112 小时前
2026.4.21Linux 共享内存
linux·服务器·网络
wanhengidc2 小时前
云主机的核心原理与架构
运维·服务器·科技·游戏·智能手机·架构
idolao2 小时前
PE启动盘制作与启动教程 Windows版:NTFS格式化+一键制作+双模式引导指南
linux·运维·服务器
程序员晨曦2 小时前
理解函数调用Function Call
java·运维·服务器
positive_zpc2 小时前
计算机网络——网络层(二)
服务器·网络·计算机网络
花无缺就是我2 小时前
内网穿透哪个好,之神卓互联Linux版Arm安装教程2026最新
linux·运维·arm开发
of Watermelon League2 小时前
SQL server配置ODBC数据源(本地和服务器)
运维·服务器·github
HalvmånEver2 小时前
MySQL的数据类型(二)
linux·学习·mysql