Ansible 之动态Inventory文件(二)
上篇主要讲解了Ansible 的安装和配置,并且根据不同的业务场景将服务器的信息存放在Ansible的Inventory中,其实存放这样的数据每次更新都需要我们自动的添加和删除,这样对于我们维护起来很不方便,而Ansible 提供了支持动态的从外部获取主机列表和主机组数据;一般情况动态获取主机信息都会结合CMDB、Zabbix、Cpbbler、云主机管理平台(如AWS、阿里云)在一起使用;
Ansible 动态Inventory 是通过调用外部脚本生成指定格式的json数据,这里不会限制任何语言,只要可以返回指定格式即可,下面看下我们需要返回什么样子的格式;
{
"webserver": # 定义webserver组
{
"hosts": ["39.105.0.244"], # webserver 组内主机
"vars": { # 参数
"ansible_ssh_pass": "", # Inventory 内置变量
"ansible_port": ""
}
},
"dbserver":
{
"hosts": ["47.104.149.180"],
"vars": {
"ansible_ssh_pass": "",
"ansible_port": ""
}
}
}
切记上面的hosts,vars还有children这些变量是固定的,我们不能在返回的json格式里面随意的定义,如果定义成为其他的这里就会出现报错,下面我们把上面的json数据转换为静态的Inventory数据,看下映射关系
[webserver]
39.105.0.244 [dbserver]
47.104.149.180 [webserver:vars]
ansible_ssh_pass: "",
ansible_port: "" [dbserver:vars]
ansible_ssh_pass: "",
ansible_port: ""
通过映射关系我们可以把对/etc/ansible/hosts 数据 和动态获取Inventory数据的对比下,动态的只是通过其他的地方获取数据组合成为Ansible Inventory 可识别的数据而已;
下面我们通过python语言来实现一个demo程序,这里我们把自己的数据源定义成为变量,下面我们来看下例子
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json def inventory_groups():
groups = \
{
"webserver": # 定义webserver组
{
"hosts": ["39.105.0.244"], # webserver 组内主机
"vars": { # 参数
"ansible_ssh_pass": "", # Inventory 内置变量
"ansible_port": ""
}
},
"dbserver":
{
"hosts": ["47.104.149.180"],
"vars": {
"ansible_ssh_pass": "",
"ansible_port": ""
}
}
} return json.dumps(groups, indent=4) if __name__ == '__main__':
print(inventory_groups())
我们在Ansible 运行下我们写好的脚本,首先我们指定webserver 执行ping操作
ansible -i inventory.py webserver -m ping
执行命令以后返回:
这里返回的结果集与我们在/etc/ansible/hosts配置服务器组返回结果一致,其实动态只是让你更加便利的维护服务器组数据。
注意:
ansible -i 参数代表指定Inventory 文件,但是我们指定文件以后还需要指定运行的服务器组或者服务器,如果需要所有的服务器都执行那么我们这里通过all 来实现。
Ansible 之动态Inventory文件(二)的更多相关文章
- Ansible主机清单Inventory文件hosts
Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638 | 字数统计 1,442 | 阅读时长预计 ...
- 细说Ansible主机清单inventory
Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 关于Ansible是 ...
- 【Ansible 文档】【译文】动态inventory
Dynamic Inventory 动态inventory 配置管理系统的用户经常想要保存inventory到不同的软件系统中.Ansible提供了一个基本的基于文本的系统,正如inventory中描 ...
- 002.Ansible之Inventory文件
一 简介 在使用Ansible来批量管理主机的时候,通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫主机清单.该文件默认位于/etc/ansi ...
- Ansible学习 Inventory文件
Ansible可同时操作属于一个组的多台主机,组与主机之间关系配置在inventory文件中,inventory默认的配置文件是/etc/ansible/hosts 1.在/etc/ansible/h ...
- Ansible安装部署和常用命令,及其主机清单inventory(二)
1.ansible的安装方式 1.1使用yum源安装 yum install ansible -y 1.2使用rpm包安装 https://dl.fedoraproject.org/pub/epel/ ...
- ansible运维工具(二)
ansible playbook(二) 运行palybook时 要使用ansible-playbook命令 palybook执行任务的顺序是,在第一个主机上完成第一个任务,然后在第二个主机上完成第一个 ...
- Ansible组件之inventory主机清单
静态inventory 所有的主机信息都存放在Ansible的inventory组件里面,默认Ansible的inventory是一个静态的ini格式的文件/etc/ansible/hosts,当然还 ...
- WIN 下的超动态菜单(二)用法
WIN 下的超动态菜单(一)简介 WIN 下的超动态菜单(二)用法 WIN 下的超动态菜单(三)代码 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/ ...
随机推荐
- 【SoftwareTesting】Lab 2
一. 在火狐浏览器上安装selenium插件 点击“开发者”的选项,然后点击“获取更多工具”,输入seleniumIDE进行搜索,找到后进行安装即可.安装完成后火狐浏览器的右上角会多出一个小的带 ...
- docker学习端口连接docker容器---第四章节
一.Docker容器连接 前面的第二章节,我们事先通过网络端口来访问运行在docker容器内的服务,我们也可以通过端口连接到一个docker容器 我们可以指定容器绑定的网络地址,如绑定127.0.0. ...
- [c++]关于strcpy函数溢出解决方案
必须包含的头文件:<string.h> 可改写成安全函数strcpy_s 找到[项目属性],点击[C++]里的[预处理器],对[预处理器]进行编辑,在里面加入一段代码:_CRT_SECUR ...
- 为什么使用zookeeper?
随着应用规模的迅速扩张,单台机器的部署已经难以支撑用户大规模.高并发的请求了, 因此服务化.集群化.分布式概念应运而生. 针对这种场景,人们通常使用的做法就是将软件按照模块进行拆分,形成独立的子系统, ...
- [RESTful] DHC Client
安装Chrome的DHC插件, 进入DHC Client谷歌插件网页. 安装到Chrome浏览器: 点击Chrome设置 点击扩展程序 把刚刚下载的文件解压缩 把 .crx 后缀的文件直接拖入Chro ...
- vue-router 学习
Vue.js的一大特色就是构建单页面应用十分方便,既然要方便构建单页面应用那么自然少不了路由,vue-router就是vue官方提供的一个路由框架.总体来说,vue-router设计得简单好用,下面就 ...
- 剑指Offer 62. 二叉搜索树的第k个结点 (二叉搜索树)
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 例如, 5 / \ 3 7 / \ / \ 2 4 6 ...
- [date] 时间问题: 更新时间距离现在3个月
public static void main(String[] args) { Date d1 = null; try { d1 = DateFormatUtil.StringToDate(&quo ...
- ios 视图既显示阴影又有圆角实现
//- (UIView *)createTimeBG //{ // UIView *view = [[UIView alloc]init]; // view.backgroundColor ...
- 查询MySQL数据库中表结构的几种方法
什么是表结构?表结构就是定义数据表文件名,确定数据表包含哪些字段,各字段的字段名.字段类型.及宽度,并将这些数据输入到计算机当中. 查询方法:以表‘employees’为例子 1.describe(d ...