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 pageuri:url: https://www.example.comreturn_content: yesregister: result- name: Print the content of the web pagedebug: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 filelineinfile:path: /etc/fstabline: '/dev/sdb1 /mnt/data ext4 defaults 0 0'

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

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

- name: Modify an existing line in the filelineinfile:path: /etc/fstabregexp: '^/dev/sdb1'line: '/dev/sdb1 /mnt/data ext4 defaults 1 1'

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

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

- name: Remove a line from the filelineinfile:path: /etc/fstabregexp: '^/dev/sdb1'state: absent

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

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

wait_for 模块

1、基于端口的方式

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

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

- name: Wait for a TCP port to become availablewait_for:host: localhostport: 80

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

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

- name: Wait for a file to become availablewait_for:path: /path/to/filestate: present

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

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

- name: Wait for a service to become availablewait_for:host: localhostport: 80timeout: 60msg: "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 startwait_for:path: /usr/bin/processsearch_regex: running

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

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

- name: Wait for a process to startwait_for:path: /usr/bin/processsearch_regex: runningtimeout: 60msg: "Waiting for process to start"

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

3、基于文件的方式

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

- name: 等待文件产生wait_for:path: /path/to/filestate: presenttimeout: 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 hostsynchronize:src: /path/to/local/directorydest: /path/to/remote/directorymode: pushrsync_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 repositorygit:repo: https://github.com/ansible/ansible.gitdest: /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 filesystemhosts: allbecome: truevars:nfs_mount: "server:/share"nfs_path: "/mnt/nfs"nfs_opts: "rw,hard,intr"tasks:- name: Ensure NFS mount directory existsfile:path: "{{ nfs_path }}"state: directory- name: Mount NFS filesystemmount:src: "{{ nfs_mount }}"path: "{{ nfs_path }}"fstype: nfsopts: "{{ 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 httpdpackage:name: httpdstate: present

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

- name: Remove httpdpackage:name: httpdstate: absent

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

- name: Update httpdpackage:name: httpdstate: latest

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

- name: Check if httpd is installedpackage:name: httpdstate: 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 filetemplate:src: /path/to/template.conf.j2dest: /etc/app/config.confowner: appusergroup: appgroupmode: 0644vars:key1: value1key2: value2

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习平台推荐_菜鸟教程官网

网址: 菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程(www.runoob.com)提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP , MySQL等各种编程语言的基础知识。 同…

Nginx-2

一、高级配置 1.1网页状态页 基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module,否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状…

opencv实现surface_matching记录

1 说明 使用的cv版本为4.7.0 , surface_matching功能是附加在contrib中的,并未直接包含在opencv 4.7.0中,因此编译的时候需要考虑contrib。 VS版本为2022, CMake版本为3.30-rc4. 2 编译opencv(含contrib) 参见: Win10 下编译 OpenCV 4.7.0详细全过程,包含xfeatures2…

Open3D (C++) 点云边界提取

边界提取 一、算法原理1、详细流程2、主要函数3、参考文献二、代码实现三、结果展示四、注意事项本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、详细流程 该算法完全复刻自PCL。 2、主要函数 /// \…

算法入门(上)

什么是算法? 算法(Algorithm)是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 给定一个问题,能够解决这个问题的算法是有很多种的。算式中的问题是千奇百怪…

C++为什么将 0.1f 更改为 0 性能会降低 10 倍

一、浮点数与整数的表示差异 在计算机内部,浮点数和整数的表示方式截然不同。浮点数遵循IEEE 754标准,通过符号位、指数位和尾数位来存储和表示数值,而整数则是直接的二进制表示。这种表示上的差异导致了它们在内存占用、处理速度以及精度上…

Debian/Ubuntu Linux安装OBS

先决条件 建议使用 xserver-xorg 1.18.4 或更新版本,以避免 OBS 中某些功能(例如全屏投影仪)出现潜在的性能问题。在 Linux 上使用 OBS Studio 需要 OpenGL 3.3(或更高版本)支持。在终端中输入以下内容来检查系统支持…

Halcon测量助手

模糊测量:基于模糊逻辑 模糊逻辑:模仿人脑的不确定性概念判断、推理思维方式,对于模型未知或不能确定的描述系统,以及强非线性、大滞后的控制对象,应用模糊集合和模糊规则进行推理,表达过渡性界限或定性知识经验&…

MySQL基础进阶:编写复杂查询

编写复杂查询 1. 子查询2. IN运算符3. 子查询VS连接4. ALL关键字5. ANY关键字6. 相关子查询7. EXISTS运算符8. SELECT子句中得子查询9. FROM子句中得子查询 1. 子查询 子查询: 任何一个充当另一个SQL语句的一部分的 SELECT 查询语句都是子查询,子查询是…

GMSB文章八:微生物中介分析

欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 介绍 中介分析(Mediation Analysis)是一种统计方法,用于研究一…

C# Benchmark

创建控制台项目(或修改现有项目的Main方法代码),Nget导入Benchmark0.13.12,创建测试类: public class StringBenchMark{int[] numbers;public StringBenchMark() {numbers Enumerable.Range(1, 20000).ToArray();}[Be…

大语言模型(LLMs)全面学习指南,初学者入门,一看就懂!

大语言模型(LLMs)作为人工智能(AI)领域的一项突破性发展,已经改变了自然语言处理(NLP)和机器学习(ML)应用的面貌。这些模型,包括OpenAI的GPT-4o和Google的gem…

杨幂跨界学术圈:内容营销专家刘鑫炜带你了解核心期刊的学术奥秘

近日&#xff0c;知名艺人杨幂在权威期刊《中国广播电视学刊》上发表了一篇名为《浅谈影视剧中演员创作习惯——以电视剧<哈尔滨一九四四>为例》的学术论文&#xff0c;此举在学术界和娱乐圈均引起了广泛关注。该期刊不仅享有极高的声誉&#xff0c;还同时被北大中文核心…

数据库-数据完整性-用户自定义完整性实验

NULL/NOT NULL 约束&#xff1a; 在每个字段后面可以加上 NULL 修饰符来指定该字段是否可以为空&#xff1b;或者加上 NOT NULL 修饰符来指定该字段必须填上数据。 DEFAULT约束说明 DEFAULT 约束用于向列中插入默认值。如果列中没有规定其他的值&#xff0c;那么会将默认值添加…

发;flask的基本使用2

上一篇我们介绍了基本使用方法 flask使用 【 1 】基本使用 from flask import Flask# 1 实例化得到对象 app Flask(__name__)# 2 注册路由--》写视图函数 app.route(/) def index():# 3 返回给前端字符串return hello worldif __name__ __main__:# 运行app&#xff0c;默认…

Conformal Prediction

1 A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification 2 Language Models with Conformal Factuality Guarantees

【启明智显分享】乐鑫ESP32-S3R8方案2.8寸串口屏:高性能低功耗,WIFI/蓝牙无线通信

近年来HMI已经成为大量应用聚焦的主题&#xff0c;在消费类产品通过创新的HMI设计带来增强的连接性和更加身临其境的用户体验之际&#xff0c;工业产品却仍旧在采用物理接口。这些物理接口通常依赖小型显示器或是简单的LED&#xff0c;通过简单的机电开关或按钮来实现HMI交互。…

【人工智能】—葡萄牙酒店预订信息多维度分析|预测是否取消预定算法模型大乱斗

引言 在当今数字化时代&#xff0c;数据驱动的决策在各个行业中变得越来越重要。酒店业&#xff0c;作为旅游和休闲服务的核心部分&#xff0c;正面临前所未有的机遇和挑战。随着在线预订平台的兴起&#xff0c;客户行为数据的积累为酒店提供了洞察消费者需求和优化运营策略的…

探索WebKit的插件帝国:深入插件系统的奥秘

&#x1f310; 探索WebKit的插件帝国&#xff1a;深入插件系统的奥秘 WebKit作为现代浏览器的核心&#xff0c;其插件系统是扩展浏览器功能、增强用户体验的关键机制。通过插件&#xff0c;开发者可以为浏览器添加各种新特性&#xff0c;从视频播放到3D图形&#xff0c;无所不…

有框架和没框架的Command

这两段代码在功能上是等效的&#xff0c;但它们使用了不同的 RelayCommand 实现。第一段代码中&#xff0c;RelayCommand 是自定义实现的&#xff0c;而第二段代码中&#xff0c;RelayCommand 是使用 GalaSoft.MvvmLight.Command 库中的实现。 以下是两段代码的完整版本&#…