Ansible运行临时命令

Ansible服务的强大之处在于只需要一条命令,便可以操控成千上万台的主机节点,而ansible命令便是最得力的工具之一。前文提到,Ansible服务实际上只是一个框架,能够完成工作的是模块化功能代码。Ansible的常用模块大致有20多个(见表16-5),本书将会在后面的实验中逐一详解。

偶尔遇到书中没有提及的模块,大家可以使用“ansible-doc模块名称”的命令格式自行查询,或是使用ansibe-doc -l命令列出所有的模块信息以供选择。

表16-5 Ansible服务常用模块名称及作用

模块名称模块作用
ping检查受管节点主机网络是否能够联通。
yum安装、更新及卸载软件包。
yum_repository管理主机的软件仓库配置文件。
template复制模板文件到受管节点主机。
copy新建、修改及复制文件。
user创建、修改及删除用户。
group创建、修改及删除用户组。
service启动、关闭及查看服务状态。
get_url从网络中下载文件。
file设置文件权限及创建快捷方式。
cron添加、修改及删除计划任务。
command直接执行用户指定的命令。
shell直接执行用户指定的命令(支持特殊字符)。
debug输出调试或报错信息。
mount挂载硬盘设备文件。
filesystem格式化硬盘设备文件。
lineinfile通过正则表达式修改文件内容。
setup收集受管节点主机上的系统及变量信息。
firewalld添加、修改及删除防火墙策略。
lvg管理主机的物理卷及卷组设备。
lvol管理主机的逻辑卷设备。

在Ansible服务中,ansible是用于执行临时任务的命令,也就在是执行后即结束(与剧本文件的可重复执行不同)。在使用ansible命令时,必须指明受管主机的信息,如果已经设置过主机清单文件(/etc/ansible/hosts),则可以使用all参数来指代全体受管主机,或是用dev、test等主机组名称来指代某一组的主机。

ansible命令常用的语法格式为“ansible受管主机节点 -m模块名称[-a模块参数]”,常见的参数如表16-6所示。其中,-a是要传递给模块的参数,只有功能极其简单的模块才不需要额外参数,所以大多情况下-m与-a参数都会同时出现。

表16-6 ansible命令常用参数

参数作用
-k手动输入SSH协议密码
-i指定主机清单文件
-m指定要使用的模块名
-M指定要使用的模块路径
-S使用su命令
-T设置SSH协议连接超时时间
-a设置传递给模块的参数
--version查看版本信息
-h帮助信息

如果想实现某个功能,但是却不知道用什么模块,又或者是知道了模块名称,但不清楚模块具体的作用,则建议使用ansible-doc命令进行查找。例如,列举出当前Ansible服务所支持的所有模块信息:

[root@localhost ~]# ansible-doc -l 
a10_server                                           Manage A10 Networks AX/SoftAX/Thunder/v...
a10_server_axapi3                                    Manage A10 Networks AX/SoftAX/Thunder/v...           
a10_service_group                                    Manage A10 Networks AX/SoftAX/Thunder/v...
a10_virtual_server                                   Manage A10 Networks AX/SoftAX/Thunder/v...
aci_aaa_user                                         Manage AAA users (aaa:User)                                              
aci_aaa_user_certificate                             Manage AAA user certificates (aaa:User...                        
aci_access_port_block_to_access_port                 Manage port blocks of Fabric interface ...
aci_access_port_to_interface_policy_leaf_profile     Manage Fabric interface policy leaf pro...
aci_access_sub_port_block_to_access_port             Manage sub port blocks of Fabric interf...
aci_aep                                              Manage attachable Access Entity Profile...
aci_aep_to_domain                                    Bind AEPs to Physical or Virtual Domain...   
aci_bd_subnet                                        Manage Subnets (fv:Subnet)                 
………………省略部分输出信息………………

一般情况下,很难通过名称来判别一个模块的作用,要么是参考模块后面的介绍信息,要么是平时多学多练,进行积累。例如,接下来随机查看一个模块的详细信息。ansible-doc命令会在屏幕上显示出这个模块的作用、可用参数及实例等信息:

[root@localhost ~]# ansible-doc a10_server
> A10_SERVER    (/usr/lib/python3.6/site-packages/ansible/modules/network/a10/a10_server.py)
​Manage SLB (Server Load Balancer) server objects on A10 Networks devices via aXAPIv2.
​* This module is maintained by The Ansible Community
………………省略部分输出信息………………

在16.2节,已经成功地将受管主机的IP地址填写到主机清单文件中,接下来小试牛刀,检查一下这些主机的网络连通性。ping模块用于进行简单的网络测试(类似于常用的ping命令)。可以使用ansible命令直接针对所有主机调用ping模块,不需要增加额外的参数,返回值若为SUCCESS,则表示主机当前在线。

[root@localhost ~]# ansible all -m ping
192.168.10.20 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}
192.168.10.21 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}
192.168.10.22 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}
192.168.10.23 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}192.168.10.24 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}

由于5台受控主机的输出信息大致相同,因此为了提升读者的阅读体验,本章后续的输出结果默认仅保留192.168.10.20主机的输出值,其余相同的输出信息将会被省略。

是不是感觉很方便呢?!一次就能知道所有主机的在线情况。除了使用-m参数直接指定模块名称之外,还可以用-a参数将参数传递给模块,让模块的功能更高级,更好地满足当前生产的需求。例如,yum_repository模块的作用是管理主机的软件仓库,能够添加、修改及删除软件仓库的配置信息,参数相对比较复杂。遇到这种情况时,建议先用ansible-doc命令对其进行了解。尤其是下面的EXAMPLES结构段会有该模块的实例,对用户来说有非常高的参考价值。

[root@localhost ~]# ansible-doc yum_repository
> YUM_REPOSITORY    (/usr/lib/python3.6/site-packages/ansible/modules/packaging>
​Add or remove YUM repositories in RPM-based Linuxdistributions. If you wish to update an existing repositorydefinition use [ini_file] instead.
​* This module is maintained by The Ansible Core Team
​
……………………省略部分输出信息………………
​
EXAMPLES:
​
- name: Add repositoryyum_repository:name: epeldescription: EPEL YUM repobaseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
​
- name: Add multiple repositories into the same file (1/2)yum_repository:name: epeldescription: EPEL YUM repofile: external_reposbaseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/gpgcheck: no
​
- name: Add multiple repositories into the same file (2/2)yum_repository:name: rpmforgedescription: RPMforge YUM repofile: external_reposbaseurl: http://apt.sw.be/redhat/el7/en/$basearch/rpmforge

还好,参数并不是很多,而且与此前学过的/etc/yum.repos.d/目录中的配置文件基本相似。现在,想为主机清单中的所有服务器新增一个如表16-7所示的软件仓库,该怎么操作呢?

表16-7 新增软件仓库信息

仓库名称EX294_BASE
仓库描述EX294 base software
仓库地址file:///media/cdrom/BaseOS
GPG签名启用
GPG密钥文件file:///media/cdrom/RPM-GPG-KEY-redhat-release

我们可以对照着EXAMPLE实例段,逐一对应填写需求值和参数,其标准格式是在-a参数后接整体参数(用单引号圈起),而各个参数字段的值则用双引号圈起。这是最严谨的写法。在执行下述命令后如果出现CHANGED字样,则表示修改已经成功:

[root@localhost ~]# ansible all -m yum_repository -a 'name="CentOS-Base" description="CentOS base software" baseurl="file:///media/cdrom/BaseOS" gpgcheck=yes enabled=1 gpgkey="file:///media/cdrom/RPM-GPG-KEY-redhat-release"'
……………………以下内容是结果………………
192.168.170.132 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": true, "repo": "CentOS-Base", "state": "present"
}
​

在命令执行成功后,可以到主机清单中的任意机器上查看新建成功的软件仓库配置文件。尽管这个实验的参数很多,但是并不难。

[root@localhost ~]# cat /etc/yum.repos.d/CentOS-Base.repo
……………………省略部分输出信息………………
[CentOS-Base]
baseurl = file:///media/cdrom/BaseOS
enabled = 1
gpgcheck = 1
gpgkey = file:///media/cdrom/RPM-GPG-KEY-redhat-release
name = CentOS base software

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

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

相关文章

机器学习之无监督学习

聚类:发掘纵向结构的某种模式信息,某些x属于相同的分布或者类别 特征学习:发掘横向结构的某种模式信息,每一行都可以看成是一种属性或特征 密度估计:发掘底层数据分布,x都是从某个未知分布p(x)采出来的&a…

代码随想录 474. 一和零

题目 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1: 输入:strs [“10…

vue实现悬浮窗拖动的自定义指令

首先在自己的项目根目录下建一个 src --> config --> drag.js 然后在main.js中全局引入 //鼠标拖动 import drag from /config/drag; Vue.use(drag); drag.js文件相关代码 import Vue from vue; //使用Vue.directive()定义一个全局指令 //1.参数一:指令的…

(四)STM32 操作 GPIO 点亮 LED灯 / GPIO工作模式

目录 1. STM32 工程模板中的工程目录介绍 2. GPIO 简介 3. GPIO 框图剖析 1)保护二极管及上、下拉电阻 2) P-MOS 管和 N-MOS 管 3)输出数据寄存器 3.1)ODR 端口输出数据寄存器 3.2)BSRR 端口位设置/清除寄存器 4&a…

实验六 排序相关典型算法实现

一 实验目的 1.熟悉并掌握各种排序方法的设计思路。 2.掌握各种具体排序算法在计算机上的实现。 3.掌握各种排序方法的性能比较。 二 实验内容及要求 实验内容: 1. 编程实现如下功能: (1&#xff09…

CGAL的手柄和循环器

1、手柄 CGAL中的大多数数据结构在其用户界面中使用Handles 的概念来引用它们存储的元素。这个概念描述了有时被称为琐碎迭代器的东西。Handle类似于指向对象的指针,提供解引用运算符*()和成员访问运算符->()&#…

【Java代码审计】目录穿越篇

【Java代码审计】目录穿越篇 1.Java中的目录穿越2.目录穿越漏洞审计3.Java中目录穿越漏洞修复 1.Java中的目录穿越 目录穿越漏洞产生的本质是路径可控,一旦涉及文件的读取问题便会涉及java.io.File类,因此在审计这类漏洞时可以优先查找java.io.File引用…

最强Pose模型RTMO开源 | 基于YOLO架构再设计,9MB+9ms性能完爆YOLO-Pose

实时多人在图像中的姿态估计面临着在速度和精度之间实现平衡的重大挑战。尽管两阶段的上下文方法在图像中人数增加时会减慢速度,但现有的单阶段方法往往无法同时实现高精度和实时性能。 本文介绍了RTMO,这是一个单阶段姿态估计框架,通过在YOL…

超文本传送协议HTTP

目录 HTTP简介: URL的格式: HTTP协议的特点: HTTP/1.0协议: HTTP/1.1协议: HTTP/2: HTTP代理服务器: HTTP的报文结构: 请求报文的特点: 响应报文的特点: Cook…

小 cookie,大作用:探索网站中的隐私追踪器(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现

0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 /portal/services/itcBulletin 路由发送特殊构造的数据包,利用报错注入获取数据库…

springboot——定时任务、异步任务

springboot——定时任务、异步任务 一、定时任务1、创建一个定时任务、时间配置文件2、springboot主程序开启定时任务 EnableScheduling3、使用 Scheduled 注解 二、定时任务、异步执行。1、springboot主程序开启异步任务 EnableAsync2、方法上增加 Async 注解,标识…

【JAVA日志框架】JUL,JDK原生日志框架详解。

前言 Java日志体系混乱?Java日志框架系列,清晰简洁整理好整个Java的日志框架体系。第一篇,JDK原生日志框架——JUL。 目录 1.概述 2.日志级别 3.配置 4.继承关系 1.概述 日志框架的核心问题: 日志是用来记录应用的一些运行…

.NET基础面试题一

1.C#中堆和栈的区别? 堆(Heap)和栈(Stack)是C#中两种分配内存的不同方式 栈(Stack):是一种先进后出的内存分配方式。它用于存储基本数据类型和对象引用,它是一种连续的内存空间,存储在cpu的寄存器上,它的大小在编译的时就是已知的…

nodejs+vue+微信小程序+python+PHP校园二手交易系统的设计与实现-计算机毕业设计推荐

(2)管理员 进行维护,以及平台的后台管理工作都依靠管理员,其可以对信息进行管理。需具备功能有;首页、个人中心、学生管理、物品分类管理、物品信息管理、心愿贴、系统管理、订单管理等功能。系统分成管理员控制模块和学生模块。 本系统有良好…

pyansys环境配置(安装所需的库)

目录 1. 环境配置: 2. pyansys库配合Ansys软件启动代码 1. 环境配置: 试了好多种版本,最终以下版本可以跑通: 注意:Python和ANSYS的版本也会影响到安装包的版本,我使用的配置如下: Python3.9…

maven+spock

pom配置 话说JunitMockito的组合用起来是真难用&#xff0c;还是Spock的简单&#xff0c;尤其是参数化的测试。junit的Parameter是鸡肋&#xff0c;杂恶心&#xff1b;Theories用来也不爽。 <?xml version"1.0" encoding"UTF-8"?><project xm…

linux ioctl

ioctl 接口介绍 大部分驱动需要 -- 除了读写设备的能力 -- 通过设备驱动进行各种硬件控制的能力. 大 部分设备可进行超出简单的数据传输之外的操作; 用户空间必须常常能够请求, 例如, 设 备锁上它的门, 弹出它的介质, 报告错误信息, 改变波特率, 或者自我销毁. 这些操作常 常通…

【大数据】Doris 的集群规划和环境准备

Doris 的集群规划和环境准备 1.1 环境要求1.1 Linux 操作系统版本需求1.2 软件需求 1.2 硬件要求1.3 节点规划1.4 通信端口1.5 IP 地址绑定 Doris 作为一款开源的 MPP 架构 OLAP 数据库&#xff0c;能够运行在绝大多数主流的商用服务器上。为了能够充分运用 MPP 架构的并发优势…

Spring容器中scope为prototype类型Bean的回收机制

文章目录 一、背景二、AutowireCapableBeanFactory 方法 autowireBean 分析三、Spring 容器中 scope 为 prototype 类型 Bean 的回收机制四、总结 一、背景 最近做 DDD 实践时&#xff0c;遇到业务对象需要交给 Spring 管理才能做一些职责内事情。假设账号注册邮箱应用层代码流…