上篇主要讲解了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文件(二)的更多相关文章

  1. Ansible主机清单Inventory文件hosts

    Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638 | 字数统计 1,442 | 阅读时长预计 ...

  2. 细说Ansible主机清单inventory

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 关于Ansible是 ...

  3. 【Ansible 文档】【译文】动态inventory

    Dynamic Inventory 动态inventory 配置管理系统的用户经常想要保存inventory到不同的软件系统中.Ansible提供了一个基本的基于文本的系统,正如inventory中描 ...

  4. 002.Ansible之Inventory文件

    一 简介 在使用Ansible来批量管理主机的时候,通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫主机清单.该文件默认位于/etc/ansi ...

  5. Ansible学习 Inventory文件

    Ansible可同时操作属于一个组的多台主机,组与主机之间关系配置在inventory文件中,inventory默认的配置文件是/etc/ansible/hosts 1.在/etc/ansible/h ...

  6. Ansible安装部署和常用命令,及其主机清单inventory(二)

    1.ansible的安装方式 1.1使用yum源安装 yum install ansible -y 1.2使用rpm包安装 https://dl.fedoraproject.org/pub/epel/ ...

  7. ansible运维工具(二)

    ansible playbook(二) 运行palybook时 要使用ansible-playbook命令 palybook执行任务的顺序是,在第一个主机上完成第一个任务,然后在第二个主机上完成第一个 ...

  8. Ansible组件之inventory主机清单

    静态inventory 所有的主机信息都存放在Ansible的inventory组件里面,默认Ansible的inventory是一个静态的ini格式的文件/etc/ansible/hosts,当然还 ...

  9. WIN 下的超动态菜单(二)用法

    WIN 下的超动态菜单(一)简介 WIN 下的超动态菜单(二)用法 WIN 下的超动态菜单(三)代码 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/     ...

随机推荐

  1. shell练习题1

    需求如下: 写一个shell脚本,把10.0.1.0/24网段在线的ip列出来. 参考解答如下 方法1 #!/bin/bash ip="10.0.1." for i in $(se ...

  2. JS的作用域链与原型链

    来一波,好记性不如烂笔头. 这两条链子可是很重要的. 作用域链 当执行一段JS代码(全局代码或函数)时,JS引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加 ...

  3. vue爬坑:把对象中的数据给了某个变量,改变一个对象的值,另一个对象也变化

    今天做项目碰到了 一个坑,一个vue变量赋值给一个新的变量,对这个新的变量里的值做更改,vue的变量也变了.记录一下这个坑坑~~ 然后百度搜到了一个解决方案: 就是把变量先转成字符串,再把字符串转成对 ...

  4. 前端开发【第二篇: css】

    css概述 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS ...

  5. 2018-2019-1 20165318 20165326 实验五 通讯协议设计.md

    目录 实验内容 问题及解决 参考资料 实验内容 任务一 在Ubuntu中完成作业 openSSL OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/L ...

  6. Java ASM 技术简介

    什么是ASM ASM 是一个 Java 字节码操控框架.它能被用来动态生成类或者增强既有类的功能.ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为. ...

  7. Python成长之路【第二篇】Python基础之数据类型

    阅读目录 简介 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 数字(整形,长整形,浮点型 ...

  8. linux 入门学习

    一.命令 1.命令提示符 [root@localhost ~]# [] :提示符的分隔符,无特殊含义: root:当前的登录用户: @:分隔符,无特殊含义: localhost:当前主机名(完整名称: ...

  9. Python 常见字符串常量和表达式

    常见字符串常量和表达式 操作 解释 s = '' 空字符串 s = "spam's" 双引号和单引号相同 S = 's\np\ta\x00m' 转义序列 s = "&qu ...

  10. Mybatis 中获取添加的自增主键ID(针对mysql)

    分享一篇博客,主要就是针对在我们使用SSM的时候,在.xml中获取<insert></insert> 时的自增主键Id,由于好久没有,这个时候使用,有点生疏,就在这里写个笔记, ...