温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Asible学习笔记--常用模块(三)

发布时间:2020-07-02 05:35:25 来源:网络 阅读:268 作者:品鉴初心 栏目:系统运维

Ansible常用模块

本节包括的模块:

(1)定时任务模块cronvar

(2)归档模块archive

(3)解包模块unarchive

(4)下载模块get_url

(5)wait_for模块

(6)script模块

定时任务模块cronvar

除了 cron 模块本身可以管理 cron 的环境变量,另一个模块 cronvar 也可以定义定时任务的环境变量。

cronvar--Ansible官方使用说明文档

ansible-doc -s cronvar
- name: Manage variables in crontabs
  cronvar:
      backup:     # (yes/no)如果设置了,则会在修改远程cron_file前备份这些文件
      cron_file:  # 自定义cron_file的文件名,使用相对路径则表示在/etc/cron.d中
      state:      # present用于创建变量,absent用于移除变量
      user:       # 指定哪个用户的crontab将要被修改,默认为root
      value:      # 环境变量的值,要求state=present

(1)例如:创建一个job,每2分钟进行一次时间同步,并且自定义cron_file。

ansible test -m cron -a 'name="ntpdate" job="/usr/sbin/ntpdate ntp1.aliyun.com" cron_file=ntpdate_cron user=root minute=*/2' -o -f 8

验证是否添加正确。

ansible test -m shell -a 'cat /etc/cron.d/ntpdate_cron'

192.168.246.187 | CHANGED | rc=0 >>
#Ansible: ntpdate
*/2 * * * * root /usr/sbin/ntpdate ntp1.aliyun.com

(2)移除一个job,要求name必须匹配。如有必要,需要同时指定cron_file和user。

ansible test -m cron -a 'name="ntpdate" state=absent cron_file=ntpdate_cron user=root' -o # /etc/cron.d/ntpdate_cron这个文件还是存在的(内容为空)

归档模块archive

用于在远端压缩文件。当然,前提是在远端主机上要有对应的压缩工具。支持zip/gz/tar/bz2。

archive--Ansible官方使用说明文档

ansible-doc -s archive
- name: Creates a compressed archive of one or more files or trees
  archive:
      dest:   # 目标归档文件名。除非path指定要压缩的是单文件,否则需要dest选项
      format: # 指定压缩格式,默认为gz格式
      group:  # 文件/目录的所属组
      owner:  # 文件/目录的所有者
      mode:   # 设置文件/目录的的权限,支持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
      path:   # 要压缩的文件,可以是绝对路径,也可以是glob统配的路径,还可以是文件列表
      remove: # 压缩后删除源文件

示例如下:

(1)将文件压缩成默认的gz格式,由于path指定要压缩的是单文件,所以可不使用dest:

ansible test -m archive -a 'path="/tmp/mu.txt"'

说明⚠️:gz后缀压缩包的解压命令:gzip -d mu.txt.gz

(2)将目录/path/to/foo/压缩为/path/to/foo.tgz:

ansible test -m archive -a 'path="/tmp/xyz" dest=/tmp/xyz.tgz'

(3)将单文件/path/to/foo压缩为zip格式:

ansible test -m archive -a 'path="/tmp/mu.txt" format=zip'

说明⚠️:zip后缀压缩包的解压命令:unzip mu.txt.zip

(4)将给定的文件列表压缩为bz2格式,压缩包路径为/path/file.tar.bz2:

- name: Create a bz2 archive of multiple files, rooted at /path
  archive:
    path:
    - /path/to/foo
    - /path/wong/foo
    dest: /path/file.tar.bz2
    format: bz2

解包模块unarchive

默认复制ansible端的归档文件到被控主机,然后在被控主机上进行解包。如果设置选项remote_src=yes,则表示解包被控主机上的归档文件。

要求在被控主机上有对应的解包命令。unzip命令用于解压".zip"文件,gtar(tar包提供)命令用于解压".tar"、 ".tar.gz "、".tar.bz 2"和".tar.xz "。

unarchive--Ansible官方使用说明文档

ansible-doc -s unarchive
- name: Unpacks an archive after (optionally) copying it from the local machine.
  unarchive:
      creates:         # 如果指定的文件存在则不执行该任务。可用于实现幂等性
      dest:            # 远程机器上需要被解包的归档文件,要求是绝对路径
      exclude:         # 列出解包过程中想要忽略的目录和文件
      group:           # 文件/目录的所属组
      owner:           # 文件/目录的所有者
      mode:            # 设置文件/目录的的权限,支持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
      keep_newer:      # 在解包过程中,如果目标路径中和包中有同名文件,且比包中的文件更新,则保留新的文件
      list_files:      # 设置为true时,将返回归档文件中的文件列表
      remote_src:      # 设置为yes表示远程主机上已有目标归档文件,即不再从本地复制归档文件到远端,直接在远端解包。
                       # 默认为no
      src:             # 如果remote_src=no,将复制本地归档文件到远端,可相对路径也可绝对路径.
                       # 如果remote_src=yes, 将解包远程已存在的归档文件
                       # 如果remote_src=yes且src中包含了"://",将指挥远程主机从url中下载文件并解包

下载模块get_url

get_url--Ansible官方使用说明文档

ansible-doc -s get_url
- name: Downloads files from HTTP, HTTPS, or FTP to node
  get_url:
      backup:     # 下载文件时同时创建一个名称中包含时间戳的备份文件
      dest:       # 文件保存路径,必须为绝对路径。
                  # 如果dest是一个目录,则使用url的base name作为文件名
                  # 如果dest是一个目录,则'force'选项不生效
                  # 如果dest是一个目录,则总是会下载目标文件,但只在已存在的文件变化了才会替换旧文件
      force:      # 如果设置为yes,且dest不是一个目录时,则总是会下载文件,但只在已存在的文件变化了才会替换旧文件
                  # 如果设置为no(默认),则只会在目录路径下不存在该文件时才会进行下载。
      tmp_dest:   # 下载时临时存放目录,在任务执行完成前会删除下载的临时文件
      group:      # 文件/目录的所属组
      owner:      # 文件/目录的所有者
      mode:       # 设置文件/目录的的权限,支持'0644'或'u+rwx'或'u=rw,g=r,o=r'等格式
      timeout:    # 请求url时的超时时间,默认10秒钟
      url:        # 要下载的url路径,(http|https|ftp)://[user[:pass]]@host.domain[:port]/path
                  # 还支持file格式的路径,实现复制功能。file:///path/to/file

注意,dest为目录或者force=yes时,总是会下载文件到临时存放目录中,只不过不一定会替换旧文件。只有 force=no(默认)且dest是一个文件时,在文件已存在时才不会下载文件。

示例如下:

(1)下载foo.conf,若/etc/foo.conf已存在,则不下载该文件:

- name: Download foo.conf
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    mode: '0440'

wait_for模块

有些时候任务之间对状态、文件、端口等资源是有依赖关系的,只有满足了前提,任务才会继续。wait_for模块就是用于判断任务在满足什么条件的情况下会继续。主要用来判断端口是否开启、文件是否存在、文件中是否存在某些字符串。

wait_for--Ansible官方使用说明文档

ansible-doc -s wait_for
- name: Waits for a condition before continuing
  wait_for:
      delay:          # 在检查操作进行之前等待的秒数
      host:           # 等待这个主机处于启动状态,默认为127.0.0.1
      port:           # 等待这个端口已经开放
      path:           # 这个文件是否已经存在
      search_regex:   # 在文件中进行正则匹配
      state:          # present/started/stopped/absent/drained.默认started
                      # 当检查的是一个端口时:
                      # started:保证端口是开放的
                      # stopped:保证端口是关闭的
                      # 当检查的是一个文件时:
                      # present/started:在检查到文件存在才会继续
                      # absent:检查到文件被移除后才会继续
      sleep:          # 两次检查之间sleep的秒数,默认1秒
      timeout:        # 检查的等待超时时间(秒数,默认300)

示例如下:

(1)连接上主机后10秒后才检查8000端口是否处于开放状态,300秒(默认值)内未开放则超时。

- name: Wait for port 8000 to become open on the host, don't start checking for 10 seconds
  wait_for:
    port: 8000
    delay: 10

(2)直到/tmp/foo文件存在才会继续

- name: Wait until the file /tmp/foo is present before continuing
  wait_for:
    path: /tmp/foo

(3)直到/tmp/foo文件中能匹配"completed"字符串才继续

- name: Wait until the string "completed" is in the file /tmp/foo before continuing
  wait_for:
    path: /tmp/foo
    search_regex: completed

(4)直到/var/lock/file.lock这个锁文件被移除了才继续

- name: Wait until the lock file is removed
  wait_for:
    path: /var/lock/file.lock
    state: absent

(5)直到/proc/3466/status文件被移除才继续,可用来判断进程是启动还是停止,pid文件是存在还是被移除等

- name: Wait until the process is finished and pid was destroyed
  wait_for:
    path: /proc/3466/status
    state: absent

script模块

script模块用于控制远程主机执行脚本。在执行脚本前,ansible会将本地脚本传输到远程主机,然后再执行。在执行脚本的时候,其采用的是远程主机上的shell环境。

script--Ansible官方使用说明文档

ansible-doc -s script
- name: Runs a local script on a remote node after transferring it
  script:
      chdir:       # 在远程执行脚本前先切换到此目录下。
      creates:     # 当此文件存在时,不执行脚本。可用于实现幂等性。
      removes:     # 当此文件不存在时,不执行脚本。可用于实现幂等性。
      free_form:   # 本地待执行的脚本路径、选项、参数。之所以称为free_form,是因为它是脚本名+选项+参数。

说明

本博文是参考马龙帅大佬文章整理生成,属于博主读书笔记,如有侵权,请大佬与我联系,立删!

最后,感谢开源,拥抱开源~

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI