当前位置: 首页 > article >正文

ansible-Ad-hoc命令行模式

一. 简述:

   ansible的ad-hoc是一个概念性的名字,是相对于ansible playbook而言。类似于:通过命令行来执行一些简单的,一次性的playbook任务(通俗点就是通过命令行执行一些简单的,而又不需要将命令特殊保存起来的任务)。Ansible提供两种方式去完成任务,一是 ad-hoc 命令(/usr/bin/ansible),一是写 Ansible playbook.前者可以解决一些简单的任务, 后者(/usr/bin/ansible-playbook)解决较复杂的任务。

   目前ansible自带了很多模块,可使用ansible-doc -l查看所有模块,也可通过"ansible-doc 模块名" 查看模块的介绍及案例。需要注意的是ad-hoc有一些插件无法使用(只能通过playbook),如loop facts等

二.  运行流程/原理:

Ad-hoc执行过程中,主要涉及到以下流程:

1. 解析命令行参数:在命令行中输入 ansible 并附带相应的参数时,Ansible 解析这些参数以确定要连接的目标主机、使用的模块以及传递给模块的参数。

2. 加载inventory文件:ansible 需要知道目标主机的信息,这通常是通过读取一个或多个 inventory 文件来完成的。inventory 文件定义了哪些机器是受管节点(Managed Nodes),它们如何分组,以及连接到这些节点所需的凭据和其他设置。

3. 建立连接:根据 Inventory 文件中的信息,ansible 使用 SSH 或其他通信协议与目标主机建立连接。默认情况下,ansible 使用 SSH 来进行远程执行。对于 windows 主机,可以使用 winrm 协议。

4. 推送执行模块:建立连接后,ansible 会将所选模块及其参数打包成 JSON 格式的数据结构,并通过 SSH 发送到目标主机上临时目录中。然后,在远程主机上执行该模块代码。每个模块都是一个独立的小程序,负责执行特定的任务,如运行命令、复制文件、管理服务等。模块完成后,会返回结果给控制节点。

5. 收集和处理输出:模块执行完毕后,会生成一个包含任务状态(成功或失败)、标准输出、错误信息等在内的结果字典。结果会被发送回控制节点。ansible支持通过回调插件自定义输出格式。

6. 清理脏数据:ansible在任务完成后会从远程主机上删除临时创建的文件和目录。

执行命令:

ansible命令是并发执行的, 默认由ansible.cfg中forks控制,也可在命令行通过-f指定。如:

# ansible test -i aaaa -m shell -a 'uname' -f 5 -u web -o    #web用户身份
10.5.11.11 | SUCCESS | rc=0 | (stdout) Linux
10.5.11.12 | SUCCESS | rc=0 | (stdout) Linux


(注:shell模块与command模块区别在于command模块不支持shell变量,管道等,故执行shell命令时还是用shell模块比较好)

三. 异步执行ad-hoc:

    所谓异步执行,通俗点就是放后台执行(类似于Linux的&) ,在执行时会返回一个job id值,通过id可查看后台执行的状态,可在任务时间较长的情况下使用, 主要使用-B 和-P 参数:

查看运行的状态,可以使用 async_status 模块将上图中的job_id传入即可:

四. ansible Ad-hoc 返回状态:

 主要包含:  

ok

任务已经成功完成,并且没有对系统进行任何更改。

changed

任务成功完成并且对系统进行了更改。

failed

任务未能成功完成。

unreachable

无法与目标主机建立连接。

skipped

任务被跳过,通常是由于条件判断(如 when 子句)使得该任务不适用于特定主机。

Ad-hoc 命令返回的状态信息是理解和调试任务执行情况的重要工具。通过了解不同状态的含义,可以更好地评估任务的效果,并根据需要采取适当的措施。

----------------------------------------------------------------------------------------------

深耕运维行业多年,擅长linux、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流 !
    
​​​​​


http://www.kler.cn/a/468463.html

相关文章:

  • jenkins入门6 --拉取代码
  • Debian、Ubuntu 22.04和ubuntu 24.04国内镜像源(包括 docker 源)
  • 51单片机(二)中断系统与外部中断实验
  • Timer、Ticker使用及其注意事项
  • python 如何调整word 文档页眉页脚
  • 深度学习中的步数指的是什么
  • java 字典表加载内存
  • Bash Shell的操作环境
  • NLP中特征提取方法的总结
  • 使用javacv获取海康威视rtsp流的详细教程
  • Samsung手机首次主要采用竞对Micron LPDDR5内存
  • WPF通过反射机制动态加载控件
  • 专家混合(MoE)大语言模型:免费的嵌入模型新宠
  • Linux -- 端口号、套接字、网络字节序、sockaddr 结构体
  • 工业5G路由器让无人机数据传输 “飞” 起来
  • 数据结构C语言描述9(图文结合)--二叉树和特殊书的概念,二叉树“最傻瓜式创建”与前中后序的“递归”与“非递归遍历”
  • 如何将服务器的镜像推送到阿里的容器镜像服务中
  • IGBT的学习【一】
  • Linux-----进程处理(waitpid,进程树,孤儿进程)
  • SWD(一种用于嵌入式系统调试的串行通信串口)
  • 【游戏设计原理】41 - 游戏的核心
  • 【算法不挂科】算法期末考试题库(带解析)【选择题53道&填空题36道&算法填空题7道&问答题33道】
  • mariadb变更数据存放目录
  • 常见优化器总结
  • vue3中mixins替代方案
  • 【深度学习】Java DL4J基于 CNN 构建农作物病虫害检测模型