Ansible 常用模块

Ansible 常用模块

简介

Ansible内置了许多Module,这些Module可以用于控制系统资源,比如services,packages,文件等,利用这些Module通过playbook可以编排出复杂的各种任务,这里主要介绍几个常用的模块

yum模块

通过yum包管理器,支持对包安装/升级/卸载等处理,这个模块使用的是python2去进行管理,如果是CentOS8,redhat8等操作系统,默认python解释器版本为python3,可以使用dnf模块。

常用参数描述
name包名,也可以指定本地需要安装的包路径,
stateabsent/remove,表示卸载,present/install表示安装
list查看指定的包状态信息,与name参数互斥

playbook示例:

$ cat yum.yml
---
  - hosts: 192.168.240.33
    tasks:
      # 安装多个包
      - name: install package
        yum:
          name: "{{ packages }}"
          state: installed
        vars:
          packages:
          - httpd
          - httpd-tools
      # 卸载多个包
      - name: remove package
        yum:
          name: "{{ packages }}"
          state: absent
        vars:
          packages:
            - httpd
            - httpd-tools
      # 列出指定的包信息,注册到result变量,再用debug输出信息
      - name: list ansible packages
        yum:
          list: httpd
        register: result

      - name: print result msg
        debug:
          msg: "{{ result }}"
      # 此任务输出信息如下

#TASK [print result msg] *****************************************************************************************************************
#ok: [192.168.240.33] => {
#    "msg": {
#        "changed": false,
#        "failed": false,
#        "results": [
#            {
#                "arch": "x86_64",
#                "envra": "0:httpd-2.4.6-90.el7.centos.x86_64",
#                "epoch": "0",
#                "name": "httpd",
#                "release": "90.el7.centos",
#                "repo": "base",
#                "version": "2.4.6",
#                "yumstate": "available"
#            }
#        ]
#    }
#}

注意事项:

  1. 使用yum安装多个包的时候,不能简单使用with_item进行循环,这种方式在未来会被舍弃,官方推荐的是,设置一个列表变量,直接一次性安装一个列表变量的包清单
  2. yum模块安装如果是普通用户执行可能会显示权限不足,可以预先设置好sudo权限,普通用户sudo执行,或者直接用root执行
  3. 如果正在执行yum模块然后ctrl + c 中断掉可能会导致下一次执行yum任务的时候报错,显示 有进程正在用yum,lockfile…,但是登录到相关机器ps看进程找不到yum相关进程,这个问题的原因暂时没有找到,但是有一个临时的解决方法: 去每台机器随便安装个东西,然后就可以解锁了。。。。ansible all -m shell -a 'yum install gcc -y' ,只是临时的解决方式,最好进行yum任务的时候,不要中断

copy模块

copy模块用于从本地复制文件到远端的服务器上,如果文件的内容需要用到变量,可以使用template模块,

参数描述
backupyes/no,如果远端服务器上已有,是否将远端服务器的文件备份,默认否
content“string”,将文件的内容直接设置为指定的值
dest远端服务器的路径,如果src是目录,则dest也需要是一个目录路径,如果dest是一个不存在的路径或者以’/'结尾,或者src是一个目录,dest路径会被生成
src需要复制的本地文件/目录路径,如果copy模块在roles中,这里就可以直接写文件名,会自动去files对应的role下找文件。
group文件/目录属组名
owner文件/目录属主名
mode具体权限

playbook示例:

$ cat copy.yml
---
  - hosts: 192.168.240.33
    tasks:
      # 测试content参数,直接写入字符串到指定文件
      - name: test concent
        copy:
          content: "hello world"
          dest: /tmp/hello.txt
          group: ansible
          owner: ansible
          mode: '0644'

# cat目标机器可以看到文本已经生成
# $cat /tmp/hello.txt
# hello world
          
      # 测试 backup 参数
      - name: test backup
        copy:
          src: /tmp/hello.txt
          dest: /tmp/Hello.txt
          backup: yes
          group: ansible
          owner: ansible
          mode: "0644"

# ll /tmp/Hello.txt*
# -rw-r--r--. 1 ansible ansible 11 Nov 24 15:19 /tmp/Hello.txt
# -rw-r--r--. 1 ansible ansible  5 Nov 24 15:19 /tmp/Hello.txt.52755.2019-11-24@15:19:56~
#
# 当文件内容发生变化,会将原文件备份加一串时间戳字符串,方便回滚

      # 将/root/目录下的文件传送到/tmp目录下
      - name: test copy dirctory
        copy:
          src: /root/
          dest: /tmp
          group: ansible
          owner: ansible
# 此任务会将/root目录下的文件,copy到/tmp目录下

selinux模块

selinux模块用于管理selinx的状态和策略,需要注意的事,如果要将开启状态的selinux改成disable需要重启服务器。

参数描述
configfile配置文件路径,默认"/etc/selinux/config"
policySELinux的策略
stateThe SELinux mode.disabled,enforcing,permissive

playbook示例:

$ cat selinux.yml
- hosts: 192.168.240.33
  tasks:

    - name: set selinux state is permissive
      selinux:
        policy: targeted
        state: permissive

    - name: Disable SeLinux
      selinux:
        state: disabled

备注:

​ 如果单一设置为disabled状态,这时候系统需要重启才生效,所以可以考虑分2步,第一步先许可,然后再disabled,这时候就能保证selinux执行playbook之后就一定是关闭/许可状态。

systemd模块

systemd模块用于管理服务状态

参数描述
daemon_reload任何操作之前先执行daemon-reload操作,no/yes
enabled设置是否开机启动,no/yes
name服务名称
statereloaded重载,restarted重启,started启动,stopped停止

playbook示例:

$ cat systemd.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: Stop and Disable service
        systemd:
          name: "{{ item }}"
          state: stopped
          enabled: no
        with_items:
          - firewalld
          - irqbalance

sysctl模块

sysctl模块管理sysctl.conf文件,可用来管理内核参数

参数描述
name指定sysctl支持的变量,内核参数可以在这里管理
state定义该值是否应该在sysctl文件中存在,present存在,absent不存在
sysctl_file设置sysctl.conf文件位置
valuename变量对应的值

playbook示例:

---
  - hosts: 192.168.240.33
    tasks:

      - name: Setting present kernel params
        sysctl:
          name: "{{ item.name }}"
          value: "{{ item.value }}"
          ignoreerrors: yes
          state: present
        with_items:
          - { name: 'net.core.rmem_default', value: 8388608 }
          - { name: 'net.core.rmem_max', value: 16777216  }
          - { name: 'net.core.wmem_default', value: 8388608  }
          - { name: 'net.core.wmem_max', value: 16777216 }
          - { name: 'net.ipv4.igmp_max_memberships', value: 512  }
          - { name: 'net.ipv4.conf.bond0.force_igmp_version', value: 2  }
          - { name: 'vm.max_map_count', value: 655360 }

blockinfile 模块

插入/更新/移除被标记线包围的文本信息

参数描述
backupyes/no,如果为yes表示创建一个包含时间戳信息的备份文件,如果错误修改了可以获得源文件,默认no
block要插入标记行内的文本,如果为空串这个块会被删除
createyes/no,如果此文件不存在,创建一个新文件,默认no
group文件属组
owner文件属主
mode文件权限
path文件的路径
stateblock块文本信息是的状态,默认present,不存在则填写absent
marker_end会替换掉标记信息的{mark}作为标识块的结尾
marker_begin会替换掉标记信息的{mark}作为标识块的开始
marker标记信息,标记信息的模板,默认"# {mark} ANSIBLE MANAGED BLOCK"
insertbeforeinsertafter类似不同点就是会在最后一次匹配正则表达式成功之前插入块
insertafter如果使用这个参数,将会再最后一次匹配到正则表达式之后插入块,EOF意味着再文件最后插入这一行,如果指定的正则表达式没有匹配成功,EOF将会生效

playbook示例:

$ cat blockfile.yml
---
  - hosts: 192.168.240.33
    tasks:

      - name: Update /etc/security/limits.conf
        blockinfile:
          dest: /etc/security/limits.conf
          insertbefore: '# End of file'
          block: |
            * soft nofile 131072
            * hard nofile 131072
            * soft core unlimited
            * hard core unlimited
            * soft memlock unlimited
            * hard memlock unlimited

在 /etc/security/limits.conf 会确保如下block存在

# BEGIN ANSIBLE MANAGED BLOCK
* soft nofile 131072
* hard nofile 131072
* soft core unlimited
* hard core unlimited
* soft memlock unlimited
* hard memlock unlimited
# END ANSIBLE MANAGED BLOCK

备注:如果手动删除标识符,会导致无法正确定位到块

shell/command模块

在目标机器上执行命令,shell和command模块的用法基本一致,区别在于,shell模块执行命令使用的是shell解释器,command不能解析变量和某些操作符("|","<",">"等),所以如果一定要使用这些操作符的时候需要使用shell模块,其他情况都推荐使用command

参数描述
cmd执行的命令
creates如果指定的文件存在,则不执行,用于保证幂等性
removes如果指定的文件不存在,则不执行,用于保证幂等性
chdir如果此参数设置了,执行命令时会先切换到这个目录下

shell模块playbook示例:

$ cat shell.yml
---
  - hosts: 192.168.240.33
    tasks:
    # 下面两个任务等价,当存在/tmp/fstab文件,则这个shell任务不执行
      - name: test shell
        shell:
          cmd: cat /etc/fstab > /tmp/fstab
          creates: /tmp/fstab
        register: shell_result

      - name: test shell
        shell: cat /etc/fstab > /tmp/fstab
        args:
          creates: /tmp/fstab
        register: shell_result

      - name: print shell result msg
        debug:
          msg: "{{ shell_result }}"

command模块playbook示例:

$ cat command.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: test command
        shell:
          cmd: cat /etc/fstab
        register: command_result


      - name: print command result msg
        debug:
          msg: "{{ command_result }}"

commad/shell模块执行之后的结果可以注册成变量,可以看到有如下信息

key描述
cmdtask中执行的命令
delta命令执行的时间耗时
end命令执行的结束时间
changed是否发生变更
start命令执行的启动时间
rc命令执行完成的返回值
stderr命令的标准错误输出
stdout命令的标准输出
stdout_lines列表,命令执行完成后,对输出结果每行切分,形成列表

示例如下:

ok: [192.168.240.33] => {
    "msg": {
        "changed": true,
        "cmd": "cat /etc/fstab",
        "delta": "0:00:00.134274",
        "end": "2019-11-24 18:20:54.641665",
        "failed": false,
        "rc": 0,
        "start": "2019-11-24 18:20:54.507391",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "\n#\n# /etc/fstab\n# Created by anaconda on Tue Aug 27 09:30:03 2019\n#\n# Accessible filesystems, by reference, are maintained under '/dev/disk'\n# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info\n#\n/dev/mapper/centos-root /                       xfs     defaults        0 0\nUUID=4e742da0-c66f-4483-805e-c7c25d2ede83 /boot                   xfs     defaults        0 0\n/dev/mapper/centos-swap swap                    swap    defaults        0 0",
        "stdout_lines": [
            "",
            "#",
            "# /etc/fstab",
            "# Created by anaconda on Tue Aug 27 09:30:03 2019",
            "#",
            "# Accessible filesystems, by reference, are maintained under '/dev/disk'",
            "# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info",
            "#",
            "/dev/mapper/centos-root /                       xfs     defaults        0 0",
            "UUID=4e742da0-c66f-4483-805e-c7c25d2ede83 /boot                   xfs     defaults        0 0",
            "/dev/mapper/centos-swap swap                    swap    defaults        0 0"
        ]
    }
}

unarchive模块

unarchive模块用于解压包到远端服务器

参数描述
src本地压缩包地址
dest解压到远端服务器的路径
remote_srcyes/no,远端服务器是否存在这个包,如果存在则直接在远端解压即可,与copy互斥
copyyes/no,如果为yes,文件将从本地拷贝到远端服务器
creates如果指定绝对路径已经存在,这一步不会运行
group指定属组
owner指定属主
mode指定权限信息

playbook示例

$ cat unarchive.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: unarchive module
        unarchive: 
          src: /home/ansible/ADT/Packages/ansible-2.8.1.tar.gz # 本机包的路径
          dest: /tmp/ # 远端主机包路径
          creates: /tmp/ansible-2.8.1 # 如果远端此目录已经存在,则不执行此任务
          copy: yes # 将包从本机拷贝到远端服务器
          owner: ansible # 属主
          group: ansible # 属组
          mode: '0755' # 目录权限信息

结果:

$ ll /tmp/ansible-2.8.1 -d
drwxr-xr-x. 2 ansible ansible 4096 Jul 21 00:37 /tmp/ansible-2.8.1

已经解压完成,如果再次运行示例的playbook,不会重新覆盖,而是skip了。

archive模块

archive模块用于打包归档,与unarchive模块相反,归档后可以通过指定remove=true删除源文件

参数描述
dest归档后包的路径以及文件名
group归档后包的属组
mode归档后包的权限信息
owner归档后包的属主
path远端归档源
remove是否删除源文件
format打包的格式,默认gz,可选项有bz2,gz,tar,xz,zip

playbook示例:

$ cat archive.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: archive module
        archive:
          path: /tmp/ansible-2.8.1 # 远端服务器归档源
          dest: /home/ansible/ansible-2.8.1.tgz # 本地服务器归档文件路径
          remove: no # 是否删除源文件
          format: gz # 打包压缩格式为gz
          mode: '0644' # 包的权限信息
          owner: ansible # 包的属主
          group: ansible # 包的属组
         
      - name: archive some file
        archive:
          path:
            - /etc/fstab
            - /etc/passwd
          dest: /home/ansible/info.tgz
          remove: no
          format: gz
          mode: '0644'
          owner: ansible
          group: ansible

template模块

template模块将模板文件传输到远端的服务器指定路径下,这个模块非常强大,利用jinja2引擎可以做非常多变量替换,判断,循环等操作。这里只介绍template模块,具体的jinja2语法这里先不涉及

参数描述
backupyes/no,拷贝的时候如果远端服务器已有这个文件会将原文件备份,备份文件包含一个时间戳的文件名,方便回滚
dest目标文件路径
src本地文件路径,如果在role中使用template模块会自动去对应的role下的template目录找文件,因此可以不写文件名
validate在复制到指定位置之前要运行的验证命令,临时文件路径通过%s传递,如果验证命令执行失败则不会复制到指定位置,这里主要用于编写配置文件的时候可以进行语法检查,当没有问题了再进行覆盖
mode文件权限信息
owner文件属主
group文件数组

template示例的模板文件如下

$ cat template.txt
{{ ansible_host }} # ansible_host变量表示当前连接的主机ip

template playbook 示例文件如下:

$ cat template.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: template module
        template:
          src: /home/ansible/ADT/template.txt
          dest: /tmp/template.txt
          owner: ansible
          group: ansible
          mode: '0644'
          backup: yes
          validate: touch %s # 复制到适当位置之前运行一次touch命令。 ansible会先将文件拷贝到远端服务器,然后再拷贝到指定的位置,这里的%s指的是临时存放此文件的绝对路径

执行结果

$ cat /tmp/template.txt
192.168.240.33

stat模块

stat模块用于检测文件或文件系统状态

参数描述
path要检测的对象路径

stat示例:

$ cat stat.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: get /etc/fstab stat
        stat:
          path: /etc/fstab
        register: stat_return

      - name: print stat_return
        debug:
          msg: "{{ stat_return }}"

返回值信息有非常多的内容,常用的有以下几个信息

key描述
atime文件的atime值
ctime文件的ctime值
executable是否有执行权限
exists是否存在
gidgid值
inodeinode号
isdir是否是目录
isgid调用的gid是否与属组的gid匹配
isuid调用的uid是否与属主的uid匹配
mode权限信息
mtime文件的mtime值
path文件路径
readable是否有读权限
size文件大小
uid文件uid值
writeable是否有写权限

debug 模块

debug模块用于输出一些debug信息

参数描述
verbosity控制调试的层级,如果设置为3,执行的时候需要使用-vvv才会输出信息
msg自定义输出的信息,默认"Hello world!"
var变量值内容

playbook示例如下:

# 输出主机的所有变量信息
$ cat debug.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: -vvvv
        debug:
          var: hostvars[inventory_hostname]
          verbosity: 2

wait_for模块

wait_for模块,当某些状态满足条件之后,才会继续往下执行task

参数描述
delay开始检查前等待的秒数,默认0
host可解析的主机名/ip,因为一台机器上可能有多个IP,这里可以指定监控哪个IP/主机名状态
port等待端口处于启动状态
path等待path文件存在。与port参数互斥,可以利用这个检查进程/proc/进程号
search_regex在文件中进行正则匹配,匹配成功才会继续
statepresent/started/stopped/absent/drained。默认started,当检查端口时,started表示等待端口打开,stopped表示等待端口关闭,当检查的是文件时,present/started检查到文件才会继续,absent检查到文件不存在才会继续
sleep两次检查的间隔
timeout检查的超时时间

playbook示例:

$ cat wait_for.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: wait for 80 port
        wait_for:
          host: 192.168.240.33
          port: 80
          delay: 1
          state: started
          sleep: 1
          timeout: 3

fail模块

fail模块用于自定义错误信息,与debug类似,但是这个模块可以用于检查某些状态是否执行完成,如果不符合预期,则抛出错误,但是debug试试输出信息,不会抛出错误

参数描述
msg报错信息

playbook示例:

$ cat fail.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: fail module
        fail:
          msg: " fail !"

执行之后的结果如下

$ ansible-playbook fail.yml

PLAY [192.168.240.33] *****************************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************************
ok: [192.168.240.33]

TASK [fail module] ********************************************************************************************************************************************************************************************
fatal: [192.168.240.33]: FAILED! => {"changed": false, "msg": " fail !"}

PLAY RECAP ****************************************************************************************************************************************************************************************************
192.168.240.33             : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

get_url模块

get_url模块用于从指定的ftp,http,httpsurl下载文件

参数描述
backupyes/no,如果文件已经存在,覆盖之前会创建包含时间戳的备份文件
dest从url下载的文件存放路径
tmp_dest临时文件存放目录
owner设置下载的文件属主
group设置下载的文件属组
url下载的url路径
timeout请求url的超时时间
mode指定文件的权限

playbook示例:

$ cat get_url.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: get url
        get_url:
          backup: yes
          mode: '0644'
          owner: ansible
          group: ansible
          timeout: 10
          dest: /home/ansible/
          url: http://mirrors.163.com/.help/CentOS7-Base-163.repo # 测试拉取网易镜像站的centos7 yum源配置文件

script模块

script模块,将本地的脚本传输到远端,然后执行

参数描述
cmd执行的脚本命令
creates当文件在远端服务器存在时,不执行脚本
removes当文件在远端服务器不存在时,不执行脚本

测试脚本文件:

$ cat script.sh
echo "hello world" > /tmp/script.txt

playbook示例:

$ cat script.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: script module
        script:
          cmd: /home/ansible/ADT/script.sh
          creates: /tmp/script.txt

user模块

管理系统用户账号

参数描述
name用户名
password密码,这里的密码是加密字符串,不能是密码,需要用openssl passwd -1 明文密码获取加密字符串,不能直接用明文信息
statepresent/absent,创建还是删除用户
system是否设置成系统账户
createhome是否创建家目录
group设置用户的组名
shellshell解释器
remove配合state的absent使用,如果删除用户是否删除家目录文件
home指定家目录路径

playbook示例

$ cat user.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: create user t1
        user:
          name: t1
          password: $1$Xjkqc/V8$DLJdGqGxeRPhsEogSc53j1 # 这个字符串是通过openssl passwd -1 123456 生成
          state: present
          system: no
          createhome: yes
          home: /home/t
          shell: /bin/bash

synchronize模块

synchronize模块实现rsync常用的功能,当文件非常大的时候,copy效率会非常低,这时候可以考虑使用synchronize模块,速度快很多,但是需要服务器上已安装rsync包

参数描述
src传输的文件路径
dest远端服务器路径
mode传输模式 push/pull,
archive等价于rsync的-a选项,
recursive是否递归
compress传输过程是否压缩
group传输后文件的属组
owneryes/no,是否保留属主信息
permsyes/no,是否保留权限

playbook示例:

$ cat synchronize.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: synchronize module
        synchronize:
          src: /tmp
          dest: /home/ansible/
          archive: yes
          recursive: yes

cron模块

cron模块用于管理cron任务

参数描述
user指定用户的定时任务
job定时任务
statepresent/absent,是否存在
name定时任务名称
minute
hour
day
month
weekday

playbook示例:

$ cat cron.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: cron module
        cron:
          minute: "0"
          hour: "*"
          day: "*"
          month: "*"
          weekday: "*"
          name: ntpdate
          job: "ntpdate ntp1.aliyun.com"
          user: root
          state: present

执行结果:root用户查看定时任务

# crontab -l
#Ansible: ntpdate
0 * * * * ntpdate ntp1.aliyun.com

file模块

file模块用于管理文件状态

参数描述
src创建连接文件时的真实路径
path文件路径
mode文件的权限信息
owner文件的属主
group文件的属组
recurse是否递归设置
state文件的状态,present 存在,absent 不存在,file 文件,directory目录,link软链接,hard硬链接

playbook示例:

$ cat file.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: file module
        file:
          owner: ansible
          group: ansible
          path: /tmp/file/a/b/c
          recurse: yes
          mode: '0755'
          state: directory

执行结果

# tree /tmp/file/
/tmp/file/
└── a
    └── b
        └── c

authorized_key模块

authorized_key模块用于新增或一处ssh公钥

参数描述
key公钥路径,可是本地文件也可以是url地址
path公钥存放路径
statepresent/absent,是否存在
user添加到远程哪个用户下

playbook示例如下:

# 设置ansible用户 t2@192.168.240.33免密登录
# $ cat authorized_key.yml
---
  - hosts: 192.168.240.33
    tasks:
      - name: authorized_key module
        authorized_key:
          key: "{{ lookup('file', '/home/ansible/.ssh/id_rsa.pub') }}"
          state: present
          user: t2

参考文档

  • 所有模块的列表:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html

  • yum模块 https://docs.ansible.com/ansible/latest/modules/yum_module.html

  • dnf模块 https://docs.ansible.com/ansible/latest/modules/dnf_module.html#dnf-module

  • copy模块 https://docs.ansible.com/ansible/latest/modules/copy_module.html

  • selinux模块 https://docs.ansible.com/ansible/latest/modules/selinux_module.html

  • shell模块 https://docs.ansible.com/ansible/latest/modules/shell_module.html

  • command模块 https://docs.ansible.com/ansible/latest/modules/command_module.html

  • unarchive模块 https://docs.ansible.com/ansible/latest/modules/unarchive_module.html

  • archive模块 https://docs.ansible.com/ansible/latest/modules/archive_module.html

  • systemd模块 https://docs.ansible.com/ansible/latest/modules/systemd_module.html

  • template模块 https://docs.ansible.com/ansible/latest/modules/template_module.html

  • stat模块 https://docs.ansible.com/ansible/latest/modules/stat_module.html#stat-module

  • debug模块 https://docs.ansible.com/ansible/latest/modules/debug_module.html

  • wait_for模块: https://docs.ansible.com/ansible/latest/modules/wait_for_module.html

  • get_url模块: https://docs.ansible.com/ansible/latest/modules/get_url_module.html

  • user模块: https://docs.ansible.com/ansible/latest/modules/user_module.html

  • synchronize模块: https://docs.ansible.com/ansible/latest/modules/synchronize_module.html

  • cron模块:https://docs.ansible.com/ansible/latest/modules/cron_module.html

  • file模块:https://docs.ansible.com/ansible/latest/modules/file_module.html

  • authorized_key模块: https://docs.ansible.com/ansible/latest/modules/authorized_key_module.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值