ansible组件——Inventory

当你希望通过ansible来配置管理一台的机器的时候,你只需要将这台机器的ip写入到inventory组件里面。
一般inventory默认的地址是:
  inventory = /etc/ansible/hosts

1.定义主机和主机组

一般ansible默认的配置文件是/etc/ansible/ansible.cfg,
主机信息配置文件是/etc/ansible/hosts.
如果机器数量不多,你只需要将ip以及密码写入到hosts文件里面,这样就可以使用了

 

如果你是用的是密钥登录,那么直接下面这样就可以了:

关于如何通过密钥来无密码登录,可以参考博客:https://www.cnblogs.com/yangmingxianshen/p/10159539.html

在最新版本中,默认是适用密钥来登录,所以需要将host_key_checking = False,也就是不通过密钥认证。
但是在生产环境中,机器的数量非常多,我们希望进行一个分组管理:

上面配置了servers这个大组,还有webservers和dbservers这两个小组,之所以这样配置,是有些操作希望所有的机器都可以配置到。
然乎就有下面这几种操作方式:

方式1:直接操作ip

方式2:操作组名

操作小组也可以:

-m:指定模块名;
-a:指定模块的参数;
这样就可以区别对待了。

2.多个Inventory

如果你面对的机器群的量非常大,一个hosts配置这些机器信息,那么这个文件最后将将非常大。
此时你可以将hosts文件进行拆分,这样更加方便。
此时你在ansible.cfg需要指定inventory是一个目录:
  inventory = /etc/ansible/inventory
目录结构:

配置内容:

这里你定义的多个hosts文件,不论你定义什么名字都可以,ansible会直接扫描inventory目录下所有文件中的组:

3.动态Inventory

  在实际应用中会部署大量的主机列表,如果手动维护将是一件非常繁琐的事情。
Ansible还支持动态的Inventory,也就是Ansible所有的Inventory文件里的主机列表和变量信息都可以从外部拉取。
ansible会根据脚本信息,然后选择对应的方式执行脚本,动态获取主机信息。
此时我们只需要将inventory的值设置成一个脚本就可以了。
  inventory = /etc/ansible/pro.py
对于这个脚本的编写会有两个要求,必须支持两个参数:
  --list或者-L:显示所有主机和主机组的信息,JSON格式。

  

  --host或者-H:返回某台主机的信息,JSON格式。

  

脚本信息:

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

import sys
import json

hosts = {"hosts":["129.28.86.57","148.70.122.28"]}
r = {}
r["servers"] = hosts
argv_1 = None

try:
    argv_1 = sys.argv[1]
except IndexError as e:
    raise ValueError("请输入参数")


if argv_1 and argv_1 in ["--list","-L","--host","-H"]:
    if argv_1 in ["--list","-L"]:
        print(json.dumps(r))
    else:
        print(json.dumps({"ansible_ssh_pass":"467661568cx."}))
else:
    print("please enter --list or -L or --host or -H")

最后我们就可以动态操作服务器:

通过-i指定脚本也可以:

4.Inventory内置参数

Ansible中有一些内置参数,比如我们之前看到的ansible_ssh_pass.

原文地址:https://www.cnblogs.com/yangmingxianshen/p/12656195.html