Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表。这篇文章主要介绍了python3连接mysql获取ansible动态inventory脚本,需要的朋友可以参考下
Ansible Inventory 介绍
Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的。这部分一般会结合 CMDB 资管系统、云计算平台等获取主机信息。由于主机资源一般会动态的进行增减,而这些系统一般会智能更新。我们可以通过这些工具提供的 API 或者接入库查询等方式返回主机列表。
脚本地址:https://github.com/AlbertCQY/scripts/tree/master/ansible
脚本用法:README.txt
1、脚本用法
bestpay用户 cd /tools/scripts/ansible
python3.6 invscript.py -h
1)、查询某个分组中包含哪些主机,oracle_nj_all为inventory_group.py中的组名
python3.6 invscript.py --group oracle_nj_all
2)、查询所有
python3.6 invscript.py --list
3)、查询某分组主机中主机名,脚本也可以在play-book中使用-i指定inventory
ansible -i invscript.py mysql_nj_all -m shell -a “hostname”
2、更新数据库主机列表,sql中最好对ip进行去除空格并排序,否则可能会有warning
inventory_group.py中格式:
mygrp2就是ansible使用的组名
‘ssh_user’:‘root’ root用户代表连到目标主机的用户。如果ansible server主机的test用户和目标的root用户有互信,那么ansible脚本在test用户下执行。
例子如下:
mygrp2 = {
‘sql':"""
select ‘1.1.3.8' as ips
union all
select ‘1.1.3.112' as ips
union all
select ‘1.1.3.113' as ips
“”",
‘ssh_user':‘root'}
部分脚本内容:
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
# =========================================================================
"""
-- File Name : invscript.py
-- Purpose : 从mysql数据中动态获取主机列表,动态inventory,不用维护主机列表
-- Date : 2020/01
-- Author:陈晴阳
Vervisons:
-- 20200106 1.0,陈晴阳,实现了动态获取主机列表,按照默认互信方式获取主机信息。
-- 20200116 2.0,陈晴阳,增加--group参数,并统计各个分组主机个数;重构了group_all 所有主机按照各组设置的互信用户来抓信息;增加对IP地址排序功能。
"""
# =========================================================================
import argparse
import sys
import json
import settings
import inventory_group as invgrp
from connect_mysql import Mysql_Conn
class DynamicInventory(object):
def read_cli(self):
parser = argparse.ArgumentParser()
parser.add_argument('--host', nargs=1)
parser.add_argument('--list', action='store_true')
parser.add_argument(