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

自动化运维(二十七)Ansible 实战Shell 插件和模块工具

 Ansible 支持多种类型的插件,这些插件可以帮助你扩展和定制 Ansible 的功能。每种插件类型都有其特定的用途和应用场景。今天我们一起学习Shell 插件和模块工具。

 一、 Shell 插件

Ansible shell 插件决定了 Ansible 如何在远程系统上执行命令。这些插件非常关键,因为它们处理 Ansible 模块在目标机器上的执行环境。Shell 插件主要用于设置执行命令时使用的 shell 环境,比如 Bash、Sh、PowerShell 等。

主要用途

  1. 命令封装:Shell 插件负责将 Ansible 模块的命令封装进适当的 shell 命令格式中。
  2. 环境适配:确保命令能在目标系统的默认 shell 中正确执行,例如在 Linux 上通常是 Bash,而在 Windows 上则是 PowerShell。

默认和常用 Shell 插件

  • sh:默认的 shell 插件,用于大多数 Unix-like 系统。
  • bash:对于需要 Bash 特性的场景,如使用 Bash 的特定语法或功能。
  • powershell:用于 Windows 系统,执行 PowerShell 命令。
  • cmd:也用于 Windows,但执行传统的 CMD 命令。

使用示例

1. 使用 Bash Shell 插件

如果你需要确保脚本在 Bash 环境中执行(尤其是利用 Bash 特定的功能时),可以明确指定使用 Bash shell 插件。

示例 Playbook

- hosts: alltasks:- name: Run a Bash-specific scriptshell: |echo "Here is a Bash-specific feature"# Bash-specific syntax or commands go hereargs:executable: /bin/bash

在这个示例中,executable 参数指定了 /bin/bash 作为执行命令的 shell。

2. 使用 PowerShell Shell 插件

在管理 Windows 主机时,你可能需要执行 PowerShell 脚本或命令。

示例 Playbook

- hosts: windows_serverstasks:- name: Execute PowerShell commandwin_shell: |Get-Process | Where-Object {$_.CPU -gt 1000}args:executable: powershell

这里使用了 win_shell 模块,它默认使用 PowerShell。executable 参数通常不必指定,除非需要从不同版本的 PowerShell 中选择。

注意事项

  • 确保在编写任务时考虑到目标系统的默认 shell,尤其是在编写跨平台 playbook 时。
  • 使用 shell 插件时,需要注意安全问题,尤其是在执行来自不可信源的命令时。避免使用 shell 模块直接执行用户输入的命令。
  • 了解不同的 shell 环境和它们的差异,以便更有效地编写适用于特定环境的任务。

Shell 插件使 Ansible 能够灵活地适应不同的系统环境,通过正确的 shell 执行复杂的命令和脚本。

二、模块工具

在 Ansible 中,模块工具是一种特殊的 Python 脚本或库,用于为模块提供通用功能,避免在编写各个模块时重复相同的代码。模块工具通常位于 Ansible 的 module_utils 目录中,模块可以引入这些工具来简化任务,如处理文件操作、网络请求、配置文件解析等。

主要用途

  1. 代码重用:通过模块工具,可以在多个模块之间共享代码,减少重复,提高维护效率。
  2. 简化模块开发:开发者可以专注于模块的特定逻辑,而将常见功能如 API 调用、数据转换等交由模块工具处理。
  3. 增强功能:模块工具可以提供额外的功能,使得模块能够执行更复杂的操作。

示例:使用 basic.py 模块工具

basic.py 是 Ansible 中一个非常常用的模块工具,提供了很多基础的功能,如类型转换、配置文件读取、简单的系统操作等。

假设我们需要编写一个自定义模块,该模块需要读取本地文件内容并返回。我们可以利用 basic.py 中的 AnsibleModule 类来简化这个过程。

1. 创建自定义模块文件

创建一个名为 read_file.py 的文件,放在 Ansible 的模块目录或 playbook 同级的 library/ 文件夹中:

#!/usr/bin/python
# -*- coding: utf-8 -*-from ansible.module_utils.basic import AnsibleModuledef read_file_contents(params):file_path = params['path']try:with open(file_path, 'r') as file:contents = file.read()except IOError as e:return False, str(e)return True, contentsdef main():module_args = dict(path=dict(type='str', required=True))module = AnsibleModule(argument_spec=module_args,supports_check_mode=True)success, result = read_file_contents(module.params)if success:module.exit_json(changed=False, contents=result)else:module.fail_json(msg='Error reading file: %s' % result)if __name__ == '__main__':main()

2. 使用自定义模块的 Playbook

创建一个 playbook read_file.yml 来使用这个模块:

- hosts: localhosttasks:- name: Read contents of a fileread_file:path: "/path/to/your/file.txt"register: output- name: Show contentsdebug:msg: "The contents of the file are {{ output.contents }}"

执行 Playbook

运行这个 playbook 时,Ansible 会调用自定义的 read_file 模块,该模块使用 AnsibleModule 类来处理参数和错误,从而简化了模块的开发过程。

注意事项

  • 模块工具应仅包含通用的、与业务逻辑无关的代码。
  • 模块开发时应遵循 Ansible 的最佳实践,确保代码的安全性和效率。
  • 当 Ansible 环境升级时,需要检查模块工具的兼容性以确保自定义模块的正常工作。

通过使用模块工具,可以显著提升 Ansible 模块开发的效率和质量,使得自动化脚本更加健壮和易于维护。

 

相关文章:

自动化运维(二十七)Ansible 实战Shell 插件和模块工具

Ansible 支持多种类型的插件,这些插件可以帮助你扩展和定制 Ansible 的功能。每种插件类型都有其特定的用途和应用场景。今天我们一起学习Shell 插件和模块工具。 一、 Shell 插件 Ansible shell 插件决定了 Ansible 如何在远程系统上执行命令。这些插件非常关键&a…...

Jenkins使用-绑定域控与用户授权

一、Jenkins安装完成后,企业中使用,首先需要绑定域控以方便管理。 操作方法: 1、备份配置文件,防止域控绑定错误或授权策略选择不对,造成没办法登录,或登录后没有权限操作。 [roottest jenkins]# mkdir ba…...

【前端】es-drager 图片同比缩放 缩放比 只修改宽 只修改高

【前端】es-drager 图片同比缩放 缩放比 ES Drager 拖拽组件 (vangleer.github.io) 核心代码 //初始宽 let width ref(108)//初始高 let height ref(72)//以下两个变量 用来区分是单独的修改宽 还是高 或者是同比 //缩放开始时的宽 let oldWidth 0 //缩放开始时的高 let o…...

蓝桥杯第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组题解

1.幸运数 题目链接&#xff1a;0幸运数 - 蓝桥云课 (lanqiao.cn) #include<bits/stdc.h> using namespace std; bool deng(string& num){int n num.size();int qian 0,hou 0;for(int i0;i<n/2;i) qian (num[i]-0);for(int in/2;i<n;i) hou (num[i]-0);r…...

eclipse .project

.project <?xml version"1.0" encoding"UTF-8"?> <projectDescription> <name>scrm-web</name> <comment></comment> <projects> </projects> <buildSpec> <buil…...

react的闭包陷阱

React 的闭包陷阱是指在使用 React Hooks 时&#xff0c;由于闭包特性导致在某些函数或异步操作中无法正确访问到更新后状态或 prop 的值&#xff0c;而仍旧使用了旧值。下面通过几个代码示例来具体说明闭包陷阱的几种常见情形&#xff1a; 示例 1: useState 闭包陷阱 import…...

神经网络解决回归问题(更新ing)

神经网络应用于回归问题 优势是什么&#xff1f;&#xff1f;&#xff1f;生成数据集&#xff1a;通用神经网络拟合函数调整不同参数对比结果初始代码结果调整神经网络结构调整激活函数调整迭代次数增加早停法变量归一化处理正则化系数调整学习率调整 总结ingfnn.py进行计算&am…...

【小红书校招场景题】12306抢票系统

1 坐过高铁吧&#xff0c;有抢过票吗。你说说抢票系统对于后端开发人员而言会有哪些情况&#xff1f; 对于后端开发人员来说&#xff0c;开发和维护一个高铁抢票系统&#xff08;如中国的12306&#xff09;会面临一系列的挑战和情况。这些挑战主要涉及系统的性能、稳定性、数据…...

Spring(三)

1. Spring单例Bean是不是线程安全的? Spring单例Bean默认并不是线程安全的。由于多个线程可能访问同一份Bean实例&#xff0c;当Bean的内部包含了可变状态&#xff08;mutable state&#xff09;即有可修改的成员变量时&#xff0c;就可能出现线程安全问题。Spring容器不会自动…...

使用element-plus中的表单验证

标签页代码如下&#xff1a; // 注意&#xff1a;el-form中的数据绑定不可以用v-model&#xff0c;要使用:model <el-form ref"ruleFormRef" :rules"rules" :model"userTemp" label-width"80px"><el-row :gutter"20&qu…...

flinksql

Flink SQL 是 Apache Flink 项目中的一个重要组成部分,它允许开发者使用标准的 SQL 语言来处理流数据和批处理数据。Flink SQL 提供了一种声明式的编程范式,使得用户能够以一种简洁、高效且易于理解的方式来表达复杂的数据处理逻辑。 ### 背景 Flink SQL 的设计初衷是为了简…...

Dockerfile中 CMD和ENTRYPOINT的区别

在 Dockerfile 中&#xff0c;CMD 和 ENTRYPOINT 都用于指定容器启动时要执行的命令。它们之间的主要区别是&#xff1a; - CMD 用于定义容器启动时要执行的命令和参数&#xff0c;它设置的值可以被 Dockerfile 中的后续指令覆盖&#xff0c;包括在运行容器时传递的参数。如果…...

【TC3xx芯片】TC3xx芯片的总线内存保护

前言 广义上的内存保护,包括<<【TC3xx芯片】TC3xx芯片MPU介绍>>一文介绍的MPU(常规狭义上的内存保护),<<【TC3xx芯片】TC3xx芯片的Endinit功能详解>>一文中介绍的寄存器的EndInit保护,<<【TC3xx芯片】TC3xx芯片ACCEN寄存器保护详解>>一…...

抖音小店选品必经五个阶段,看你到哪一步了,直接决定店铺爆单率

大家好&#xff0c;我是电商笨笨熊 新手选品必经的阶段就是迷茫期&#xff0c;不知道怎么选品&#xff0c;在哪里选品&#xff0c;选择什么样的品&#xff1b; 而有些玩家也会在进入店铺后疯狂选品&#xff0c;但是上架的商品没有销量&#xff1b; 而这些都是每个玩家都要经…...

ML在骨科手术术前、书中、术后方法应用综述【含数据集】

达芬奇V手术机器人 近年来,人工智能(AI)彻底改变了人们的生活。人工智能早就在外科领域取得了突破性进展。然而,人工智能在骨科中的应用研究尚处于探索阶段。 本文综述了近年来深度学习和机器学习应用于骨科图像检测的最新成果,描述了其贡献、优势和不足。以及未来每项研究…...

vue3-video-play 在安卓上正常播放,在ios上不能播放,问题解决

1.ios上autoplay需要静音&#xff0c;在播放后再打开声音 <vue3videoPlay v-if"!isComponent" v-bind"options" :playsinline"playsinline"></vue3videoPlay>let playsinline computed(() > {if (props.isComponent) {return}o…...

【C++类和对象】上篇

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…...

微信订阅号环境搭建及开发者工具下载

目录 一、注册订阅号 1.1 选择注册 2.2 选择订阅号注册 1.3 登录进入主页面 ​编辑 1.4 可以进行自定义菜单 1.5 我们重点关注公众平台测试账号 ​编辑 1.6 自定义一个域名 1.7 用自己的微信扫描这个二维码 ​编辑 1.8 点击修改&#xff0c;并自定义个域名 二、开发…...

Failed to resolve ‘bss.myhuaweicloud.com‘ ([Errno -2] Name or service not know

Failed to resolve ‘bss.myhuaweicloud.com’ ([Errno -2] Name or service not know 解決方案&#xff1a; 修改/etc/resolv.conf文件来指定DNS服务器&#xff0c;例如添加Google的公共DNS服务器&#xff1a; nameserver 8.8.8.8 nameserver 8.8.4.4...

大厂基础面试题(之二)

Q1&#xff1a;flex布局 Flex布局容器属性包括&#xff1a; flex-direction: 定义主轴的方向&#xff0c;决定flex容器中的子元素的排列方式 flex-wrap&#xff1a;设置子元素是否换行 flex-flow&#xff1a;是flex-direction和flex-wrap的简写形式&#xff0c;用于设置容器的排…...

swiftui macOS实现加载本地html文件

import SwiftUI import WebKitstruct ContentView: View {var body: some View {VStack {Text("测试")HTMLView(htmlFileName: "localfile") // 假设你的本地 HTML 文件名为 index.html.frame(minWidth: 100, minHeight: 100) // 设置 HTMLView 的最小尺寸…...

科技云报道:大模型加持后,数字人“更像人”了吗?

科技云报道原创。 北京冬奥运AI 虚拟人手语主播、杭州亚运会数字人点火、新华社数字记者、数字航天员小诤…当随着越来越多数字人出现在人们生活中&#xff0c;整个数字人行业也朝着多元化且广泛的应用方向发展&#xff0c;快速拓展到不同行业、不同场景。 面向C端&#xff0…...

轻松驾驭时间流:MYSQL日期与时间函数的实用技巧

​&#x1f308; 个人主页&#xff1a;danci_&#x1f525; 系列专栏&#xff1a;《MYSQL应用》&#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 轻松驾驭时间流&#xff1a;MYSQL日期与时间函数的实用技巧 MYSQL日期时间函数是数据库操作中不可…...

如何在极狐GitLab 使用Docker 仓库功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…...

streamlit 大模型前段界面

结合 langchain 一起使用的工具&#xff0c;可以显示 web 界面 pip install streamlit duckduckgo-search 运行命令 streamlit run D:\Python_project\NLP\大模型学习\test.py import os from dotenv import load_dotenv from langchain_community.llms import Tongyi load…...

K8s 命令行工具

文章目录 K8s 命令行工具kubectl 工具在任意节点使用kubectl方式创建对象命令显示和查找资源更新资源修补资源编辑资源Scale 资源删除资源查看pod信息节点相关操作 K8s 命令行工具 在搭建集群的时候&#xff0c;我们通过yum 下载了kubeadm kubelet kubectl 三个命令行工具&…...

优先级队列

优先级队列的基本使用 模拟实现上面的接口函数&#xff0c;优先级队列不是队列&#xff0c;而是类似一个堆一样的东西&#xff0c;我们先来试试它的接口函数是怎么个样子的。 需要包含的头文件是queue。 #include<iostream> #include<queue> using namespace std;…...

gitlab使用

个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔…...

ppt技巧:如何将Word文档大纲中导入到幻灯片中?

在PowerPoint中&#xff0c;将Word文档的大纲导入到新的幻灯片是一种非常实用的技巧。以下是详细的步骤&#xff1a; 首先&#xff0c;需要打开PowerPoint软件并打开原始的幻灯片文件。 在PowerPoint的顶部【开始】菜单栏中&#xff0c;找到并点击“新建幻灯片”按钮&#xff0…...

0.开篇:SSM+Spring Boot导学

1. 为什么要使用框架 Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。 几乎当下所有企业级JavaEE开发都离不开SSM&#xff08;Spring SpringMVC MyBatis&#xff09;Spring B…...

织梦做的网站打包在dw修改/2022最火营销方案

大小尾数 小尾数&#xff1a;低位字节存储在低内存位置或寄存器的低位地址&#xff0c;高位字节存储在高内存位置或寄存器的高位地址。 大尾数&#xff1a;和小尾数的存储顺序是相反的&#xff0c;低位字节存储在高位地址。 intel采用的是小尾数存储格式&#xff1a; 检测&…...

wordpress videopro汉化/网络销售就是忽悠人

WordPress作为外贸建站、风靡全球的网站开源框架&#xff0c;具备移动端自适应、模板资源丰富、功能扩展良好、上手容易等技术特点。除此之外&#xff0c;由于WordPress兼容大量专业级SEO插件&#xff0c;决定了外贸网站优化排名变得相对容易&#xff0c;从而促使WordPress网站…...

中国品牌网官网查询/百度seo关键词排名查询

今天数据迁移的小组找到我&#xff0c;希望我能够重新构建一些测试环境&#xff0c;其中测试环境中的一些分区表都需要去掉分区&#xff0c;转换成普通表的形式&#xff0c;因为他们在做一些工作的时候碰到了问题&#xff0c;而且希望必要的约束等都保留&#xff0c;这个需求听…...

信宜网站建设公司/免费seo技术教程

MongoDB 下载下来 下载地址 安装 mongdb 服务启动 进入安装目录 C:\Program Files\MongoDB\Server\3.4\bin ./mongod –dbpath d:\data\db # 这个目录一定要存在 mongdb 默认端口 27017 一、导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSO…...

做网站需要的图片去哪找/网络营销怎么做

默认安装完毕wordpress后&#xff0c;需要完善的地方很有很多&#xff0c;首选就是选择一个符合网站风格的模版&#xff0c;面对众多免费worpress模版&#xff0c;肯定会挑花了你眼。这真是worpress强大之初&#xff0c;所有你想到或没想到的&#xff0c;wp团队都为你想到和做到…...

程序员做图网站/兰州网站seo优化

原来是 qq 五笔输入法的坑 用上了微软的五笔输入法问题不在。 虽然有点功能上使用不便。...