核心類說明
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'}