使用shell,python,go来实现ansible的自定义模块

  • 一、自定义模块运行原理
  • 二、自定义模块实战
  • 2.1 shell方式
  • 2.2 python方式
  • 2.3 golang方式
  • 三、测试验证
  • 3.1 shell方式验证
  • 3.2 python方式验证
  • 3.3 golang方式验证

ansible已经提供了非常多的模块,涵盖了系统、网络、数据库、容器、以及其他的方方面面的领域,几乎可以不用重复造轮子,只要你能想的到的,官方基本上都已经提供了,可以说极大的提高了我们的自动化效率,但是总会有些情况无法满足我们的需求,因此我们需要学会如何去编写一个自定义的模块

在下文的介绍中,会介绍下自定义模块的工作原理,分别以shell, python, golang等来实现自定义模块,通过这三种写法来实现修改主机的hosts文件的功能。

一、自定义模块运行原理

首先我们可以通过修改配置文件来设置自定义模块的位置,默认配置文件位置:/etc/ansible/ansible.cfg,例如如下配置:

[defaults]

# some basic default values...
library        = /opt/workspace/ansible/library  # 此目录可以随意设置

这里我通过修改ansible的配置文件,来配置我们存放自定义模块的目录,也就是说我们所编写的自定义模块,可以存放至此目录中,在使用自定义模块时就会从此目录进行拷贝,注意是拷贝

下面我们在/opt/workspace/ansible/library这个目录中编写一个shell脚本,看看ansible在运行时做了什么?

#!/bin/bash

echo "hello world"

保存为文件:test_mod.sh,此时我们的模块名称就叫做:test_mod,接下来我们以ad-hoc的方式运行下这个模块,看看会发生什么?

# ansible localhost -m test_mod -a "name=tom age=18"
localhost | FAILED! => {
    "changed": false, 
    "module_stderr": "", 
    "module_stdout": "hello world\n", 
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", 
    "rc": 0
}

可以看到,我们在通过ad-hoc执行模块时,传入了两个参数:name和age,这两个参数是我随意设置的,执行之后ansible输出了一段结果,看格式应该是一个json,其中module_stdout输出了我们脚本里的命令输出,msg却输出了一段内容:MODULE FAILURE\nSee stdout/stderr for the exact error,关于为什么会输出这个错误,这里先不说明,到后面大家就会明白。

接下来,我们开启debug来看看会发生什么?

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值