Python调用ansible API系列(四)动态生成hosts文件

方法一:通过最原始的操作文件的方式

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
通过操作文件形式动态生成ansible的hosts文件
"""

import sys

class Inventory:

    def __init__(self):

        # ansible的hosts文件路径
        self._hostsfile = "./aaa"
        self._data = self._getInventoryInfo()
        if self._genHostsFile():
            print("生成完成。")
        else:
            print("生成失败。")

    def _getInventoryInfo(self):
        """
        从数据库中获取资产信息
        :return:
        """
        tempdata = [
            {
                "Groupname": "Group1",
                "Items": [
                    {
                        "name": "Srv01",
                        "ansible_ssh_host": "172.16.100.20",
                        "ansible_ssh_port": "22",
                        "ansible_ssh_user": "work",
                        "ansible_python_interpreter": "/usr/bin/python"
                    },
                    {
                        "name": "Srv02",
                        "ansible_ssh_host": "172.16.100.30",
                        "ansible_ssh_port": "22",
                        "ansible_ssh_user": "work",
                        "ansible_python_interpreter": "/usr/bin/python"
                    },
                ]
            },
        ]

        return tempdata

    def _genHostsFile(self):
        """
        生成资产hosts文件
        :return: 生成成功返回True
        """
        try:
            with open(self._hostsfile, "w") as file1:
                for i in self._data:
                    groupname = i.get("Groupname")
                    file1.write("["+groupname+"]\n")
                    for server in i.get("Items"):
                        name = server.get("name")
                        ansible_ssh_host = server.get("ansible_ssh_host")
                        ansible_ssh_port = server.get("ansible_ssh_port")
                        ansible_ssh_user = server.get("ansible_ssh_user")
                        ansible_python_interpreter = server.get("ansible_python_interpreter")

                        info = "ansible_ssh_host={0} ansible_ssh_port={1} ansible_ssh_user={2} ansible_python_interpreter={3}".                            format(ansible_ssh_host, ansible_ssh_port, ansible_ssh_user, ansible_python_interpreter)
                        line = name + " " + info + "\n"
                        file1.write(line)
        except Exception as err:
            print(err)
            return False
        return True

def main():
    Inventory()

if __name__ == "__main__":
    try:
        main()
    finally:
        sys.exit()

方法二:通过数据库或者调用其他API获取数据来动态获得

原文地址:https://www.cnblogs.com/yunxizhujing/p/10677716.html

时间: 2024-11-05 20:43:33

Python调用ansible API系列(四)动态生成hosts文件的相关文章

Python 调用 Ansible API 简例

如下是ad-hoc模式下的调用方式:ansible [模块] [选项] [主机资产] #!/usr/bin/env python import json import shutil from collections import namedtuple from ansible.parsing.dataloader import DataLoader from ansible.vars.manager import VariableManager from ansible.inventory.ma

Python调用微博API

上头叫通过微博ID获取用户发布过的历史微博内容,于是研究了下新浪微博提供的API 1 首先在微博开放中心下"创建应用"创建一个应用,应用信息那些随便填,填写完毕后,不需要提交审核,需要的只是那个app-key和app-secret 2 在"微博开放平台"的"管理中心"找到刚才创建的应用,点开这个应用,点开左边"应用信息"栏,会看见"App key"和"App Secret"的字样,这两个

Ansible Tower系列 四(使用tower执行一个命令)【转】

在主机清单页面中,选择一个主机清单,进入后,选择hosts里的主机 Paste_Image.png 点击 RUN COMMANDS MODULE 选择 commandARGUMENTS 填写 ifconfig eth0MACHINE CREDENTIAL 选择 ssh登陆账号Verbosity 选择 3 (Debug) Paste_Image.png 点击 Launch,查看输出 转自 Ansible Tower系列 四(使用tower执行一个命令) - 简书http://www.jianshu

使用Python调用Flickr API抓取图片数据

Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据. 首先需要先去Flickr注册成为其开发者,创建应用,获得API_KEY和API_SECRET,其API网址在:https://www.flickr.com/services/api/ Flickr提供了多种开发工具进行使用.这里我们使用Python开发工具.官方推荐的开发工具是Beej’s Python

python 调用zabbix api实现查询主机信息,输出所有主机ip

之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python #coding:utf8 import requests import json headers = {'Content-Type': 'application/json-rpc'} server_ip = '10.37.149.109' url = 'http://%s/zabbix/api_j

ASP.NET MVC4中调用WEB API的四个方法

http://tech.it168.com/a2012/0606/1357/000001357231_all.shtml [IT168技术]当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法.就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强大的服务.然而,越来越多的互联网应用,希望将服务只是通过HTTP发布出去,而不是使用复杂的SOAP协议.为了解决这个问题,ASP.NET WebAPI就出现了.

python调用zabbix api接口实时展示数据

近日公司准备自已做一个运维管理平台,其中的监控部分,打算调用zabbix api接口来进行展示. 经过思考之后,计划获取如下内容: 1.  获得认证密钥 2.  获取zabbix所有的主机组 3.  获取单个组下的所有主机 4.  获取某个主机下的所有监控项 5.  获取某个监控项的历史数据 6.  获取某个监控项的最新数据 计划最后展示框架如下内容(这只是值方面,其它的会再加): 主机组1 ----主机名1---监控项1----当前值 ---监控项2----当前值 ----主机名2----监控

(二)Python调用Zabbix api之从入门到放弃——登录并获取身份验证令牌

访问zabbix api的URL是: http://x.x.x.x/zabbix/api_jsonrpc.php x.x.x.x可能是你的IP或者域名 访问流程概览: 1.首先登录 2.认证成功后zabbix server返回一个token 3.带着这个token去访问各种数据,做各种操作 4.完毕! 一.用RESTClient进行登录 在json请求的正文中,具有以下属性: jsonrpc - API使用的JSON-RPC协议的版本; Zabbix API实现JSON-RPC版本2.0; me

Python调用Windows API函数编写录音机和音乐播放器

功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. . 参考代码: ? 运行界面: ? 原文地址:https://www.cnblogs.com/7758520lzy/p/12149931.html