核心类说明
InventoryManager类
用来管理主机和主机组相关的资源设备信息
主要方法
##ansible_version == 2.4.1 from ansible.parsing.dataloader import DataLoader from ansible.vars.manager import VariableManager #这里用的ansbile 2.4 from ansible.inventory.manager import InventoryManager #这里用的ansible 2.4 loader = DataLoader() #实例化对象 #这里只允许两个参数,loader和sources,loader 用来表示用什么方式去读取配置文件,此时需要DataLoader类,用来读取yaml配置文件信息(hosts 文件 ) Inv = InventoryManager(loader=loader,sources=['/etc/ansible/hosts']) #source 表示从哪个地方读取,需要传入一个列表 print (Inv.get_groups_dict(),Inv.get_hosts(),Inv.get_host(hostname='ip'))
Inv.add_host(host='ip',port=22,group='test') #注意,这里的group的值必须在配置文件里存在,add_host为添加主机方法
VariableManager类
变量读取,依赖InventoryManager类
In[3]: loader = DataLoader() In[4]: inventory = InventoryManager(loader=loader, sources=['/etc/ansible/hosts']) In[5]: variable_manager = VariableManager(loader=loader, inventory=inventory) In[6]: variable_manager.get_vars() #查看变量方法 Out[6]: {'ansible_playbook_python': '/usr/bin/python3.5', 'groups': {'all': ['10.10.10.11'], 'ungrouped': [], 'test': ['10.10.10.11']}, 'omit': '__omit_place_holder__bbc5830fdb5d9566fd106c5cf1c88c24322ccb1e', 'playbook_dir': '/root/PycharmProjects/MyDevOps'} #获取变量相关信息 In[7]: host = inventory.get_host(hostname='10.10.10.11') In[8]: variable_manager.get_vars(host=host) Out[8]: {'group_names': ['test'], 'inventory_dir': '/etc/ansible', 'inventory_file': '/etc/ansible/hosts', 'omit': '__omit_place_holder__bbc5830fdb5d9566fd106c5cf1c88c24322ccb1e', 'inventory_hostname': '10.10.10.11', 'inventory_hostname_short': '10', 'ansible_playbook_python': '/usr/bin/python3.5', 'ansible_ssh_pass': 'hzcf@2017', 'groups': {'all': ['10.10.10.11'], 'ungrouped': [], 'test': ['10.10.10.11']}, 'playbook_dir': '/root/PycharmProjects/MyDevOps'} #设置主机变量 In[9]: variable_manager.set_host_variable(host=host,varname='ansible_ssh_pass',value='123456') #设置变量 In[10]: variable_manager.get_vars(host=host) Out[10]: {'group_names': ['test'], 'inventory_dir': '/etc/ansible', 'inventory_file': '/etc/ansible/hosts', 'omit': '__omit_place_holder__bbc5830fdb5d9566fd106c5cf1c88c24322ccb1e', 'inventory_hostname': '10.10.10.11', 'inventory_hostname_short': '10', 'ansible_playbook_python': '/usr/bin/python3.5', 'ansible_ssh_pass': '123456', 'groups': {'all': ['10.10.10.11'], 'ungrouped': [], 'test': ['10.10.10.11']}, 'playbook_dir': '/root/PycharmProjects/MyDevOps'} #扩展变量 In[11]: variable_manager.__dict__ #查看所有方法 Out[11]: {'_inventory': <ansible.inventory.manager.InventoryManager at 0x7ff782109d68>, '_omit_token': '__omit_place_holder__bbc5830fdb5d9566fd106c5cf1c88c24322ccb1e', '_group_vars_files': defaultdict(<class 'dict'>, {}), '_fact_cache': <ansible.plugins.cache.FactCache at 0x7ff78210ed30>, '_loader': <ansible.parsing.dataloader.DataLoader at 0x7ff782109320>, '_hostvars': None, '_nonpersistent_fact_cache': defaultdict(<class 'dict'>, {}), '_host_vars_files': defaultdict(<class 'dict'>, {}), '_options_vars': defaultdict(<class 'dict'>, {}), '_vars_cache': defaultdict(<class 'dict'>, {'10.10.10.11': {'ansible_ssh_pass': '123456'}}), '_extra_vars': defaultdict(<class 'dict'>, {})}
In[12]: variable_manager.extra_vars={'myweb':'test','myname':'aaaaa'} #添加(传入)变量 In[13]: variable_manager.get_vars(host=host) #获取所有的变量信息 Out[13]: {'group_names': ['test'], 'omit': '__omit_place_holder__bbc5830fdb5d9566fd106c5cf1c88c24322ccb1e', 'ansible_ssh_pass': '123456', 'groups': {'all': ['10.10.10.11'], 'ungrouped': [], 'test': ['10.10.10.11']}, 'inventory_dir': '/etc/ansible', 'inventory_file': '/etc/ansible/hosts', 'myname': 'aaaaa', 'inventory_hostname': '10.10.10.11', 'inventory_hostname_short': '10', 'myweb': 'test', 'ansible_playbook_python': '/usr/bin/python3.5', 'playbook_dir': '/root/PycharmProjects/MyDevOps'}