文档章节

Ansible 之动态Inventory文件(二)

o
 osc_mervd488
发布于 2018/04/25 00:31
字数 646
阅读 9
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

  上篇主要讲解了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 来实现。

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

功能之前,感叹号有什么作用? - What does the exclamation mark do before the function?

问题: !function () {}(); 解决方案: 参考一: https://stackoom.com/question/Fl0I/功能之前-感叹号有什么作用 参考二: https://oldbug.net/q/Fl0I/What-does-the-exclamation-mark-do-......

富含淀粉
49分钟前
3
0
微服务分布式构架开发实战 附下载地址

微服务是一种软件架构风格,目标是将一个复杂的应用拆分成多个服务模块,每个模块专注单一业务功能对外提供服务,并可以独立编译及部署,同时各模块间互相通信彼此协作,组合为整体对外提供完...

Idea
今天
18
0
AppEmit v0.9.5 新功能 chrome 浏览器调用本地应用程序 支持打开 编辑 金山 wps office,  excel  ppt

AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 office 更多主页 能在以及几乎所有支持websock浏览器,包括chrome各个版本,支持打开 编辑 金山 wps office, excel ppt ...

AppEmit
今天
11
0
Git(学习二)----->Tortoise Git(图形化工具) 安装

下载: 本人使用版本为2.4.0.2有需要的可以从网盘下载,也可以百度找资源 链接:https://pan.baidu.com/s/13Vu0VNUQMZNFKLFhl6VzDw 提取码:y27p 一、安装 步骤1:安装向导 步骤2:许可介绍 步...

安然_oschina
今天
7
0
TarsGo 服务获取自定义模版(配置)值

作者:amc 导语:之前的文章中我们介绍了如何使用TarsGo创建HTTP服务和TARS RPC服务,本篇文章中,我们将介绍如何在TarsGo服务中获得自定义模板的配置值。 TARS 模版是什么? TARS 框架中,有...

TARS基金会
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部