Day2-上午-Part2: 常用模块:[fetch,synchronize,filesystem,mount,get_url,debug,unarchive,assemble,lineinfile,wait_for]

  • 2020-03-26
  • 471
  • 0

ansible常用模块Part2


十一.fetch模块

  • 该模块和copy类似,但是copy是从本地复制到远程,fetch是从远程复制到本地
  • 可以用来批量从不同的主机上复制文件到本地并在本地以inventory_name的形式组织成目录树
  • 如果本地拥有和远程同名的文件,但是内容不同,则会被覆盖掉
  • fetch模块支持客户端主机是windows系统
  • 该模块的主要参数:
    • src:复制源,必须是文件,不能是目录,将来也许会支持直接复制目录
    • dest:复制目标必须是一个目录.目录可以不新建,fetch会自动帮忙建好.举个例子就是,加入dest指定为/backup,而src文件名是/etc/profile,那么该文件最终会被存储到/backup//etc/profile
    • fail_on_missing: 从ansible2.5以后,默认设置为yes,当时设置为yes的时候,如果远端系统中src所指定的文件不存在,则整个task就会failed.似乎fail_on_missing不该默认设置为yes才对,但是之所有默认是yes,是因为以下高亮的原因

Prior to Ansible 2.5 this module would not fail if reading the remote file was impossible unless fail_on_missing was set.

In Ansible 2.5 or later, playbook authors are encouraged to use fail_when or ignore_errors to get this ability. They may also explicitly set fail_on_missing to no to get the non-failing behaviour.

  • flat: 默认是no,如果设置为yes,那么将不会激活类似/backup//etc/profile这样的扩展目录进行存放的行为,如果dest所指定的目录以/结尾,直接将src文件复制到dest所指定的目录下,如果是从multiple hosts复制同名文件,那么这个文件将会每个host一遍遍的overwritten

  • 实验:

最终复制后的结果是:

十二.synchronize模块

  • 使用rsync同步文件,
  • 其参数如下:
    • archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
    • checksum: 跳过检测sum值,默认关闭
    • compress:是否开启压缩
    • copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
    • delete: 删除不存在的文件,默认no
    • dest:目录路径
    • dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
    • dirs:传输目录不进行递归,默认为no,即进行目录递归
    • links: Copy symlinks as symlinks.This parameter defaults to the value of the archive option.
    • rsync_opts:rsync参数部分
    • rsync_path: Specify the rsync command to run on the remote host.
    • set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
    • times: Preserve modification times.This parameter defaults to the value of the archive option.
    • mode: push或pull 模块,push模式的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件

十三.filesystem模块

  • 在块设备上创建文件系统
  • 常用选项:
    • dev:目标块设备(since 2.5, dev can be an image file)
    • force:在一个已有文件系统的设备上强制创建
    • fstype:文件系统的类型

  • opts:传递给mkfs命令的选项

  • 从2.8以后,专门出了一个新的模块来格式化AIX的fs,叫aix_filesystem

十四.mount模块

  • 配置挂载点
  • 选项:
    • boot:是否开机自动挂载
    • fstype:必选项,挂载文件的类型
    • name:必选项,挂载点
    • opts:传递给mount命令的参数
    • src:必选项,要挂载的文件
    • state:必选项
      • present:只处理fstab中的配置
      • absent:删除挂载点
      • mounted:自动创建挂载点并挂载之,并且还会自动在fstab文件中写入正确的行以实现自动挂载
      • umounted:卸载

  • filesystem和mount结合起来做一个实验[这里要做个补充]

十五.get_url 模块

  • 该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),
  • 主要有如下选项:
    • checksum:下载完成后进行校验,如果本地已经有这个文件了,会比对checksum,一致的话会skip下载,不一致的话,会delete本地文件,然后重新下载;支持的格式为:<checksum|url>, 举例来说:checksum=checksum: md5:66dff[…]6f5758, checksum=sha256:http://example.com/path/sha256sum.txt[支持url的远程checksum文件]
    • timeout:下载超时时间,默认10s
    • url:下载的URL
    • url_password、url_username:主要用于需要用户名密码进行验证的情况
    • use_proxy:是事使用代理,代理需事先在环境变更中定义

十六.debug模块

  • 调试模块,用于在调试中输出信息
  • 常用参数:
    • msg:调试输出的消息
    • var:将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
    • verbosity:debug的级别(默认是0级,全部显示)

  • debug模块可以使用type_debug这个filter来获取返回值的数据类型

十七.unarchive模块

  • 用于解压文件,与之对应的还有一个archive模块可以用来压缩
  • 模块包含如下选项:
    • remote_src:如果为yes,则文件会从master端复制到目标端。否则会直接尝试从目标端查找文件。默认为yes。
    • creates:指定一个文件名,当该文件存在时,则解压指令不执行
    • copy: If true, the file is copied from local \’master\’ to the target machine, otherwise, the plugin will look for src archive at the target machine.不建议使用该选项,建议使用remote_src,并且该选项和remote_src互斥
    • remote_src: Set to yes to indicate the archived file is already on the remote system and not local to the Ansible controller.该选项和copy互斥
    • dest:远程主机上的一个路径,即文件解压的路径,这个路径必须是一个已存在路径,unarchive模块不会自动创建路径
    • group:解压后的目录或文件的属组
    • list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
    • mode:解决后文件的权限
    • src:如果copy为yes,则需要指定压缩文件的源路径
    • owner:解压后文件或目录的属主

  • 注意事项:

Requires zipinfo and gtar/unzip command on target host.

Can handle .zip files using unzip as well as .tar, .tar.gz, .tar.bz2 and .tar.xz files using gtar.

Does not handle .gz files, .bz2 files or .xz files that do not contain a .tar archive.

十八.assemble模块

  • 用于组装文件,即将多个零散的文件,合并一个大文件
  • 常用参数:
    • src:原文件(即零散文件)的路径
    • dest:合并后的大文件路径
    • group:合并后的大文件的属组
    • owner:合并后的大文件的属主
    • mode:合并后的大文件的权限
    • validate:与template的validate相同,指定命令验证文件
    • ignore_hidden:组装时,是否忽略隐藏文件,默认为no,该参数在2.0版本中新增

十九.lineinfile模块

1. lineinfile模块简介

  • 之所以专门说一说这个模块,是因为lineinfile在实际使用中非常有用。
  • 实际上,在大多数时候,我们在linux上的操作,就是针对文件的操作,通过配置管理工具对配置文件作统一的配置修改是一个非常酷的功能。
  • 下面是官方针对该模块的说明:

ineinfile – Ensure a particular line is in a file, or replace an existing line using a back-referenced regular expression

  • 简单讲,这个模块就是针对一个文件中行内容的操作。
  • 模块包含如下选项:
    • path|dest|destfile|name: 要修改的目标文件,在lineinfile里,path也可以使用别名:dest或destfile或name,效果一致
    • regexp|regex: 匹配特定的某一行或某些行的正则表达式,别名是regex.Uses Python regular expressions. See http://docs.python.org/2/library/re.html.
    • insertafter: 和state=present一起使用.默认值是EOF,就是在文件末尾插入行.如果使用regexp匹配到多行,默认是插入到最后一次匹配到的行的后边,如果设置了firstmatch=yes,那么就插入到第一次匹配到的行的后面.
    • insertbefore: 和state=present一起使用.没有默认值,如果设置为是BOF,就是在文件开始插入行.如果使用regexp匹配到多行,默认是插入到最后一次匹配到的行的前边,如果设置了firstmatch=yes,那么就插入到第一次匹配到的行的前面.
    • line|value: The line to insert/replace into the file.Required for state=present.别名是value,line和regexp一起操作,如果regexp匹配到行,就会修改这个行,如果没有匹配到这个行,就在文件末尾增加一行
    • owner: 修改目标文件的user
    • group: 修改目标文件的group
    • mode: 修改目标文件的权限
    • firstmatch: 默认是no,如果改为yes,那么linebefore和lineafter会修改第一次匹配到的行
    • setype: 修改目标文件的selinux,大部分系统不开selinux,因此不常用,但是得知道
    • backup: 是否备份原文件,默认为no
    • backrefs: backrefs默认为no,为no时,如果regex没有匹配到行,则添加一行,如果Regx匹配到行,则修改该行.如果backrefs改为yes时,如果regex没有匹配到行,则保持原文件不变,如果regex匹配到行,则修改该行

2. 修改匹配行

3. 在匹配行前或后添加内容

  • 示例文件如下:

  • 在匹配行前添加

  • 在匹配行后添加

注!insertbefore,insertafter以及line等均具有幂等性,调用多次insertbefore和insertafter不会在匹配的地方重复前后增加相同的行,相同内容的行只会增加一次

4. 修改文件内容及权限

  • 示例文件

  • 改/etc/hosts,将以127.0.0.1开头的行替换为 127.0.0.1 localhost,并将/etc/hosts的属主和属组都修改为root,权限改为644,如下:

5. 删除一行内容

  • 示例原文件

  • 删除以10.1.61.130开头的行:

6. 文件存在则添加一行内容

  • 往/etc/hosts里添加一行10.1.61.131 test.dz11.com(多次执行,不会重复添加),示例如下:

7. 如果有匹配的行则修改该行,如果不匹配则添加

  • 示例原文

  • 下面的示例task中,匹配以%wheel开头的行,匹配到,则执行替换,未匹配,则添加。因为原文件中,没有以%wheel开头的行,所以会添加一行:

  • 修改后的文件如下:

8. 参数backrefs,backup说明

  • backup: 是否备份原文件,默认为no
  • backrefs:
    • 当backrefs为no时,如果regex没有匹配到行,则添加一行,如果Regx匹配到行,则修改该行
    • 当backrefs为yes时,如果regex没有匹配到行,则保持原文件不变,如果regex匹配到行,则修改该行
    • backrefs默认为no,所以上面那个示例中,我们没有配置backrefs,而默认没有匹配,则修改。
  • 下面我们看一看backrefs为yes时匹配到行的示例:
    • 示例原文件:

  • task示例:

  • 修改后的文件:

9. 使用validate验证文件是否正确修改

  • 在一些场景下,我们修改完文件后,需要对文件做一下测试,用以检查文件修改之后,是否能正常运行。如http.conf、nginx.conf等,一旦改错,而不加以测试,可能会直接导致http服务挂掉。
  • 可以使用validate关键字,在修改完成以后,对文件执行检测:

二十.wait_for模块

1. wait_for用于等待指定的时间(默认是300s)

  • 在没有任何其他选项的时候,wait_for模块什么也不做也不报错

    2. wait_for模块实际应用于如下场景:

  • 该模块可以用于等待端口可用。比如,调用java应用服务器的启动脚本的时候,脚本返回true,但是服务并不是立刻可用的。

  • 可以用于当使用virt模块启动guests的时候,需要暂停并等待guest可用

  • 该模块可以用于等待一个文件中出现匹配某个正则表达式的字符串。

  • 从ansible 1.6版本开始,该模块可以用于等待文件系统上的某个文件可用 或 被删除。

  • 从ansible 1.8版本开始,该模块可以用于等待活跃的链接被关闭。当从负载均衡池中摘除节点的时候,尤为有用。

3. wait_for模块的可用参数如下:

  • connect_timeout: 在下一个任务执行之前等待连接的超时时间,默认是5秒。
  • delay: 开始轮询之前等待的秒数,默认是0。
  • exclude_hosts: 与state=drained一起使用。用于指定,在寻找活跃的TCP链接的时候,要忽略的主机或IP列表。
  • host: wait_for模块等待的主机的地址,默认为127.0.0.1。
  • path: 文件路径,只有当这个文件存在时,下一任务才开始执行,即等待该文件创建完成。
  • port: wait_for模块待待的主机的端口。
  • search_regex: 用于匹配文件或socket链接中的一个字符串。
  • state: 可以是present、started、stopped、absent、drained。
    • [Default: started]
    • 当检查端口的时候,started会确保端口打开;stopped会确保端口关闭;drained会检查活跃的链接。
    • 当检查文件或搜索字符串的时候,present和started会确保文件或字符串存在。absent会确保文件不存在或被移除。
  • timeout: 等待的超时时间。默认是300秒。

4. 测试用例

返回如下:

5. 其他的一些实用案例

[等待8080端口已正常监听,才开始下一个任务,直到超时]

评论

还没有任何评论,你来说两句吧

津公网安备 12010302001147号 津ICP备18003766号