ansible 模块扩展

uri模块

在Ansible中,uri模块是一个用于发送HTTP、HTTPS、FTP等请求的模块,可以用于获取网页内容、下载文件、上传文件等。本质上,它是一个HTTP客户端模块。

使用uri模块,需要指定一些参数来定义HTTP请求。下面是一些uri模块的常用参数:

  • url:必须,指定请求的URL地址。
  • method:指定HTTP请求方法,默认为GET。
  • headers:HTTP请求头信息。
  • body:HTTP请求体。
  • status_code:HTTP响应的状态码。
  • return_content:指定是否返回响应内容。

下面是一个简单的uri模块的使用示例:

- name: Get the content of a web page
  uri:
    url: https://www.example.com
    return_content: yes
  register: result

- name: Print the content of the web page
  debug:
    var: result.content

在这个示例中,uri模块被用来获取https://www.example.com的网页内容,并将结果保存在result变量中。第二个任务使用debug模块输出结果。

在实际使用中,uri模块可以结合其他模块来实现更复杂的功能。例如,可以使用uri模块下载文件、上传文件,或者通过uri模块发送POST请求来提交表单等。

lineinfile 模块

在 Ansible 中,lineinfile 模块是用于在文件中搜索指定行,如果找到了该行则修改或添加内容,如果没有找到则添加一行新内容。

使用 lineinfile 模块,需要指定以下参数:

  • path:必需,指定要修改的文件路径。
  • line:必需,指定要添加或修改的行的内容。
  • regexp:必需,指定搜索的正则表达式。
  • state:可选,指定是否应该删除匹配行或仅匹配行。如果设置为 present,则确保文件包含该行;如果设置为 absent,则确保文件不包含该行。

下面是一个简单的 lineinfile 模块的使用示例:

- name: Add a new line to the file
  lineinfile:
    path: /etc/fstab
    line: '/dev/sdb1 /mnt/data ext4 defaults 0 0'

在这个示例中,lineinfile 模块用于将一行新内容添加到 /etc/fstab 文件中。如果文件中已经包含了该行,则该模块不会做出任何更改。

下面是另一个示例,演示如何将文件中的特定行修改为新内容:

- name: Modify an existing line in the file
  lineinfile:
    path: /etc/fstab
    regexp: '^/dev/sdb1'
    line: '/dev/sdb1 /mnt/data ext4 defaults 1 1'

在这个示例中,lineinfile 模块用于搜索以 /dev/sdb1 开头的行,并将该行的内容修改为指定的新内容。

除了添加和修改行,lineinfile 模块还可以用于删除指定的行。下面是一个示例:

- name: Remove a line from the file
  lineinfile:
    path: /etc/fstab
    regexp: '^/dev/sdb1'
    state: absent

在这个示例中,lineinfile 模块用于删除以 /dev/sdb1 开头的行。

总之,lineinfile 模块可以方便地操作文件中的行,使得对文件进行修改变得更加简单。需要注意的是,该模块会对文件进行修改,因此在使用前应该确保已经备份了需要修改的文件。

wait_for 模块

1、基于端口的方式

wait_for模块是Ansible中一个非常有用的模块,它可以等待特定的条件满足,然后继续执行后续的任务。该模块可以用于等待远程主机上的某个端口、某个服务是否启动或某个文件是否存在等情况。

下面是wait_for模块的基本用法:

- name: Wait for a TCP port to become available
  wait_for:
    host: localhost
    port: 80

在这个示例中,wait_for模块将等待主机localhost上的TCP端口80变为可用。在等待期间,Ansible将阻塞当前任务,直到条件得到满足或达到了超时时间。默认情况下,超时时间为300秒(5分钟),可以通过timeout参数进行配置。

wait_for模块还支持其他条件,例如等待文件存在、等待HTTP响应码、等待正则表达式匹配等,具体取决于使用情况。以下是一个等待文件存在的示例:

- name: Wait for a file to become available
  wait_for:
    path: /path/to/file
    state: present

在这个示例中,wait_for模块将等待远程主机上的/path/to/file文件存在。使用state参数指定等待文件的状态,可以是present(存在)或absent(不存在)。

wait_for模块还支持msg参数,可用于在等待期间输出自定义消息。以下是一个示例:

- name: Wait for a service to become available
  wait_for:
    host: localhost
    port: 80
    timeout: 60
    msg: "Waiting for service to become available"

在这个示例中,wait_for模块将等待主机localhost上的TCP端口80变为可用,并输出自定义消息“Waiting for service to become available”。如果等待超时,Ansible将失败并输出相应的错误消息。

2、基于进程的方式

Ansible中的wait_for模块可以等待特定的进程是否存在。下面是一个使用wait_for模块等待特定进程的示例:

- name: Wait for a process to start
  wait_for:
    path: /usr/bin/process
    search_regex: running

在这个示例中,wait_for模块将等待名为process的进程启动并输出特定的字符串running。如果进程未启动或未输出指定字符串,则任务将一直阻塞直到满足条件或超时。可以使用timeout参数设置超时时间,默认为300秒(5分钟)。

此外,还可以通过使用msg参数设置等待期间输出的消息。以下是一个示例:

- name: Wait for a process to start
  wait_for:
    path: /usr/bin/process
    search_regex: running
    timeout: 60
    msg: "Waiting for process to start"

在这个示例中,如果等待超时,将输出自定义消息“Waiting for process to start”。

3、基于文件的方式

wait_for模块通过轮询(默认为每秒轮询一次)来检查指定的条件是否满足,如果在超时时间内条件不满足,则任务失败。在等待文件产生时,可以使用“path”参数指定文件路径,并使用“state”参数指定文件状态为“present”。如果文件已经存在,则条件已经满足,任务将继续执行。如果文件不存在,则wait_for模块将在超时时间内等待文件的产生。例如:

- name: 等待文件产生
  wait_for:
    path: /path/to/file
    state: present
    timeout: 60

在这个例子中,wait_for模块将等待文件“/path/to/file”出现,并在60秒后超时。如果文件在60秒内出现,则任务将继续执行。如果文件在60秒内未出现,则任务将失败。

synchronize 模块

synchronize 模块是 Ansible 的一个模块,用于将本地目录或文件与远程主机上的目录或文件进行同步。相比于 copytemplate 等模块,synchronize 可以更快地将大量文件或目录同步到远程主机,因为它使用了 rsync 协议。

下面是 synchronize 模块的一些常用参数及其含义:

  • src: 要同步的本地目录或文件的路径。
  • dest: 要同步到的远程主机上的目录或文件的路径。
  • mode: 同步模式,可以是 push(将本地文件同步到远程主机)、pull(将远程主机上的文件同步到本地)或 rsync(使用 rsync 协议同步文件)。
  • rsync_opts: 传递给 rsync 命令的选项。例如,可以使用 -av 选项以归档模式同步文件,使用 -z 选项启用压缩等等。
  • delete: 是否在同步时删除远程主机上不存在的文件。默认为 no,不删除。

下面是一个使用 synchronize 模块同步本地目录到远程主机的示例:

- name: Sync local directory to remote host
  synchronize:
    src: /path/to/local/directory
    dest: /path/to/remote/directory
    mode: push
    rsync_opts: "-avz"
    delete: yes

这个示例会将本地目录 /path/to/local/directory 同步到远程主机的 /path/to/remote/directory 目录下,使用 rsync 协议进行同步,并启用压缩。同时,将删除远程主机上不存在的文件。

需要注意的是,synchronize 模块需要安装 rsync 工具。如果目标主机上没有安装 rsync,可以使用 Ansible 的 raw 模块或 command 模块来安装它。

git 模块

Ansible的git模块允许在远程主机上操作git仓库,可以clone/pull/push git仓库。在Ansible中,使用git模块可以方便地维护代码库的版本控制。

下面是git模块的一些常用选项:

  • repo:git仓库的URL,必需选项;
  • dest:本地文件系统上的目标目录,可以是绝对路径或相对路径;
  • version:表示要使用的版本,可以是分支名、标签名或提交哈希值;
  • force:如果true,则会强制执行git操作,即使目标文件夹已经存在;
  • update:如果true,则在执行操作时使用git pull命令更新代码库;
  • recursive:如果true,则递归地拉取子模块;
  • key_file:ssh私钥文件路径;
  • accept_hostkey:如果yes,则在第一次连接到远程仓库时自动接受主机密钥;
  • clone:如果yes,则会使用git clone命令克隆仓库,默认为yes
  • bare:如果yes,则会使用git clone --bare命令克隆裸仓库,即不包含工作树。

使用git模块可以在远程主机上执行git操作,例如:

- name: Clone a git repository
  git:
    repo: https://github.com/ansible/ansible.git
    dest: /home/user/ansible

上述代码会将ansible的git仓库克隆到/home/user/ansible目录下。

除了上述常用选项外,git模块还有一些其他选项,例如:

  • key_file_type:ssh私钥文件类型;
  • reference:指定本地代码库的路径,可以加快克隆速度;
  • depth:指定克隆时获取历史记录的深度;
  • recursive_after:指定拉取子模块的时间,可以是alwayson-changenever
  • rebase:如果true,则在更新操作时使用git pull --rebase命令。

通过使用Ansible的git模块,可以方便地在远程主机上执行git操作,简化了维护代码库的过程。

mount 模块

mount 模块是 Ansible 提供的一个用于挂载文件系统的模块,可以在远程主机上挂载本地或者网络上的文件系统。

该模块的常用参数包括:

  • src: 指定需要挂载的文件系统。可以是本地文件系统的设备文件,比如 /dev/sdb1,也可以是网络文件系统的位置,比如 server:/share
  • path: 指定挂载点的路径。
  • fstype: 指定文件系统的类型。如果不指定,则根据挂载点自动判断文件系统类型。
  • state: 指定挂载状态。可选值为 mountedunmounted,默认为 mounted
  • opts: 指定挂载选项。选项可以用逗号分隔,比如 rw,noatime

下面是一个示例 playbook,演示了如何使用 mount 模块挂载一个 NFS 文件系统:

- name: Mount NFS filesystem
  hosts: all
  become: true
  vars:
    nfs_mount: "server:/share"
    nfs_path: "/mnt/nfs"
    nfs_opts: "rw,hard,intr"
  tasks:
    - name: Ensure NFS mount directory exists
      file:
        path: "{{ nfs_path }}"
        state: directory

    - name: Mount NFS filesystem
      mount:
        src: "{{ nfs_mount }}"
        path: "{{ nfs_path }}"
        fstype: nfs
        opts: "{{ nfs_opts }}"
        state: mounted

这个 playbook 在远程主机上创建了 /mnt/nfs 目录,并将 server:/share 挂载到该目录下。挂载选项为 rw,hard,intr,文件系统类型为 NFS。如果文件系统已经被挂载,不会进行任何操作。如果挂载点已经存在但未挂载,将会尝试挂载。如果挂载失败,则任务将会失败。

package 模块

在 Ansible 中,package 模块用于管理包的安装和卸载。它能够在许多操作系统上安装和卸载包,例如 RedHat、CentOS、Debian、Ubuntu 等。

package 模块可以执行以下操作:

安装包:通过使用 name 参数指定要安装的包名称即可安装包。例如,安装 httpd 包可以使用以下任务:

- name: Install httpd
  package:
    name: httpd
    state: present

卸载包:通过使用 state 参数将其设置为 absent 即可卸载包。例如,卸载 httpd 包可以使用以下任务:

- name: Remove httpd
  package:
    name: httpd
    state: absent

更新包:通过将 state 参数设置为 latest 即可更新包。例如,更新 httpd 包可以使用以下任务:

- name: Update httpd
  package:
    name: httpd
    state: latest

确定包是否已安装:通过将 state 参数设置为 query 可以确定包是否已安装。如果包已安装,则任务将成功执行,否则任务将失败。例如,检查 httpd 包是否已安装可以使用以下任务:

- name: Check if httpd is installed
  package:
    name: httpd
    state: query

除了这些基本操作之外,package 模块还支持其他参数,例如 allow_downgradedisable_gpg_checkupdate_cache 等,这些参数可以根据需要进行设置。

template 模块

template 模块是 Ansible 中的一个常用模块,用于在目标主机上生成文件。它将一个源文件作为模板,在生成目标文件时将其渲染,使用用户定义的变量来填充模板中的占位符,从而生成目标文件。

template 模块的主要参数如下:

  • src:源模板文件的路径,相对于 Ansible 控制节点。
  • dest:目标文件的路径,相对于目标主机。
  • owner:目标文件的所有者。
  • group:目标文件的组。
  • mode:目标文件的权限。
  • backup:是否创建备份文件。
  • validate:用于验证生成的文件是否正确的命令或脚本。
  • vars:用于在模板中填充变量的字典。
  • setype:用于在 SELinux 中设置目标文件类型的字符串。
  • selevel:用于在 SELinux 中设置目标文件级别的字符串。

下面是一个使用 template 模块的例子:

- name: Generate config file
  template:
    src: /path/to/template.conf.j2
    dest: /etc/app/config.conf
    owner: appuser
    group: appgroup
    mode: 0644
    vars:
      key1: value1
      key2: value2

在这个例子中,template 模块将 /path/to/template.conf.j2 文件作为模板,渲染后生成 /etc/app/config.conf 文件,使用 appuser 用户和 appgroup 组作为所有者和组,设置权限为 0644,并且使用 vars 参数填充了模板中的变量。

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值