当你希望通过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.