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": "123456",  # Inventory 内置变量
                "ansible_port": "61821"
                }
            },
        "dbserver":
            {
            "hosts": ["47.104.149.180"],
            "vars": {
                "ansible_ssh_pass": "123456",
                "ansible_port": "61821"
                    }
            }
        }

  切记上面的hosts,vars还有children这些变量是固定的,我们不能在返回的json格式里面随意的定义,如果定义成为其他的这里就会出现报错,下面我们把上面的json数据转换为静态的Inventory数据,看下映射关系

[webserver]
    39.105.0.244

[dbserver]
    47.104.149.180

[webserver:vars]
    ansible_ssh_pass: "123456",
     ansible_port: "61821"

[dbserver:vars]
     ansible_ssh_pass: "123456",
     ansible_port: "61821"

  通过映射关系我们可以把对/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": "123456",  # Inventory 内置变量
                "ansible_port": "61821"
                }
            },
        "dbserver":
            {
            "hosts": ["47.104.149.180"],
            "vars": {
                "ansible_ssh_pass": "123456",
                "ansible_port": "61821"
                    }
            }
        }

    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 来实现。

原文地址:https://www.cnblogs.com/mengyu/p/8922053.html

时间: 2024-10-11 23:42:08

Ansible 之动态Inventory文件(二)的相关文章

自动化运维工具Ansible之动态inventory文件

去年的时候开发了一个自动化运维的小系统,用的就是Ansible 的python API,其中动态从数据库获取主机组合主机变量的功能,着实费了老大的劲,最后用了个很鸡肋的方法实现了.最近几个月把Ansible的官方文档通看了一遍,哎,想死的心都有了,文档里面已经写的很清楚如何实现动态inventory文件了,就怪当时自己太着急,没仔细看文档. 自己开发的动态inventory脚本文件,只需要支持两个参数即可: --list 返回所有的主机组信息,每个组都应该包含字典形式的主机列表,子组列表,如果需

Ansible 五(inventory文件 主机清单)

Ansible 五(inventory文件  主机清单) Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts 除默认文件外,你还可以同时使用多个 inventory 文件(后面会讲到),也可以从动态源,或云上拉取 inventory 配置信息.详见 动态Inventory                   http://www.ansible.com.cn/docs/intro_dyna

自动化批量部署工具Ansible笔记之ansible安装与Inventory文件

一.ansible简介 ansible是一款自动化运维部署工具,与saltstack,pupet等不同的是,ansible没有采用C/S的架构,即没有客户端与服务端之分.这也就意味着,ansible的安装更加方便,管理节点更加灵活(任何一台安装了ansible的机器都可以充当管理节点). ansible提供了丰富的模块来方便的完成管理任务,对于复杂的管理任务来说,ansible通过编写playbook的方式来批量执行.而且ansible也可以并发的执行操作,可以同时在多台机器上执行playboo

3、Ansible配置文件和Inventory文件

如果是用RPM包方式安装的Ansible,那么安装完成后会生成以下文件: /etc/ansible                              ###存放ansible配置文件的目录 /etc/ansible/hosts                   ###ansible Inventory文件 /etc/ansible/ansible.cfg        ###ansible的配置文件 如果是pip安装的Ansible,那么需要手动创建这些文件,也可以从其他地方拷贝. a

ansible安装以及配置优化和实现动态inventory

系统环境 # uname -a     Linux puppetserver25 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux # cat /etc/issue Red Hat Enterprise Linux Server release 6.5 (Santiago) Kernel \r on an \m # python -V Python 2.6.6 所需要的

细说Ansible主机清单inventory

Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 关于Ansible是什么,我在之前的文章中没有说:当然了,我这里也不会说.当你看到我写的这篇文章时,我想你已经知道了Ansible是什么了,如果您还不知道什么是Ansible是什么,那我的建议是先去百度一下,知道了Ansible是什么了,知道了Ansible能干什么了以后,再回过头来继续阅读我这里的总结. 在Ansib

ansible动态inventory里的针对AWS中国的设置

如果你想使用ansible来动态管理AWS里的机器和设施,不幸的你用的是国内的AWS服务,你会发现一开始怎么用例子里的ec2.py都会报错说 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 不对. 博主研究了一下配置文件,发现缺省的ec2.ini文件里,竟然把中国区和美国政府专区给排除掉了.看起来,AWS的所有商业全球区域,也就是我中国区有此荣幸,被列为一个专区了. # AWS regions to make calls to. Set this to 'al

爬虫之路: 字体文件反爬二(动态字体文件)

上一篇解决了但页面的字体反爬, 这篇记录下如何解决动态字体文件, 编码不同, 文字顺序不同的情况 源码在最后 冷静分析页面 打开一个页面, 发现字体文件地址是动态的, 这个倒是好说, 写个正则, 就可以动态匹配出来 先下载下来一个新页面的字体文件, 做一下对比, 如图 mmp, 发现编码, 字体顺序那那都不一样, 这可就过分了, 心里一万个xxx在奔腾 头脑风暴ing.gif (与伙伴对话ing...) 不着急, 还是要冷静下来, 再想想哪里还有突破点 同一个页面的字体文件地址是动态的, 但是,

ansible运维工具(二)

ansible playbook(二) 运行palybook时 要使用ansible-playbook命令 palybook执行任务的顺序是,在第一个主机上完成第一个任务,然后在第二个主机上完成第一个任务 而不是在第一个主机上完成所有任务,然后再在第二个主机上完成所有任务,以任务为中心,在所有主机上执行 如何构建ansible的playbook Inventory Modules Ad Hoc Commands PlayBooks Tasks 任务,及调用某模块所完成的操作 Variable 变