def main(): hosts_resource = { "Group1": { "hosts": [{ "ip": "10.0.0.62", "port": "22", "username": "******", "password": "******" }, { "ip": "10.0.0.61", "port": "22", "username": "******", "password": "******" }], "group_vars": { "var1": "ansible" } }, # "Group2": {} } my_inventory_obj = MyInventory(hosts_resource) print(my_inventory_obj.inventory_obj.get_groups_dict()) # 1.get_groups_dict()组信息: # 如果配置了正确的sources, InventoryManager(loader=self.loader, sources=self.hosts_file),输出是 # {'all': ['10.0.0.62', '172.16.1.61', '10.0.0.61'], # 'ungrouped': ['10.0.0.61'], 'db': ['172.16.1.61'], # 'php': ['172.16.1.61'], 'nginx': ['10.0.0.62'], # 'Group1': ['10.0.0.62', '10.0.0.61']} # 如果没有配置正确的sources,即self.hosts_file = [""] ,输出是 # [WARNING]: No inventory was parsed, only implicit localhost is available # {'all': [], 'ungrouped': [], 'Group1': ['10.0.0.62', '10.0.0.61']} # 想怎样配置,看自己需求啦,啦啦啦啦 print(type(my_inventory_obj.inventory_obj.get_groups_dict())) # <class 'dict'>,组内的主机信息就通过操作字典来获取数据了 # 2.获取主机对象 print(my_inventory_obj.inventory_obj.get_hosts()) # [] host = my_inventory_obj.inventory_obj.get_host("10.0.0.61") print() # 10.0.0.61 print(type(host)) # <class 'ansible.inventory.host.Host'> # 3.获取主机的变量 print(host.get_vars()) # {'ansible_port': 22, 'inventory_file': None, 'inventory_dir': None, # 'inventory_hostname': '10.0.0.61', 'inventory_hostname_short': '10', 'group_names': ['Group1']} print(type(host.get_vars())) # <class 'dict'> # 4.获取主机所在的组 print(host.get_groups()) # [Group1] print(type(host.get_groups())) # <class 'list'> # 5.获取组对象 group_obj = my_inventory_obj.inventory.groups.get("Group1") # group_obj = Group(name="Group2") print(type(group_obj)) # <class 'ansible.inventory.group.Group'> # 6.把主机添加到组中,但这样并没有添加到inventory中 my_inventory_obj.inventory.add_group("Group2") group_obj2 = my_inventory_obj.inventory.groups.get("Group2") new_host = Host(name="10.0.0.63", port="22") new_host.add_group(group_obj2) print(new_host.groups) # [Group2] print(my_inventory_obj.inventory.get_groups_dict()) # {'all': [], 'ungrouped': [], 'Group1': ['10.0.0.62', '10.0.0.61'], 'Group2': []} # 添加主机到主机组 # 添加主机到主机组 my_inventory_obj.inventory.add_host(host="10.0.0.63", group="Group2", port="22") print(my_inventory_obj.inventory.get_groups_dict()) # {'all': [], 'ungrouped': [], 'Group1': ['10.0.0.62', '10.0.0.61'], 'Group2': ['10.0.0.63']} # 7.获取主机的变量 print(my_inventory_obj.variable_manager.get_vars(host=host))
class TestHost(unittest.TestCase): ansible_port = 22 def setUp(self): self.hostA = Host('a') self.hostB = Host('b') def test_equality(self): self.assertEqual(self.hostA, self.hostA) self.assertNotEqual(self.hostA, self.hostB) self.assertNotEqual(self.hostA, Host('a')) def test_hashability(self): # equality implies the hash values are the same self.assertEqual(hash(self.hostA), hash(Host('a'))) def test_get_vars(self): host_vars = self.hostA.get_vars() self.assertIsInstance(host_vars, dict) def test_get_group_vars(self): group_vars = self.hostA.get_group_vars() self.assertIsInstance(group_vars, dict) def test_repr(self): host_repr = repr(self.hostA) self.assertIsInstance(host_repr, string_types) def test_gathered_facts_empty(self): gathered_facts = self.hostA.gathered_facts self.assertFalse(gathered_facts) def test_add_group(self): group = Group('some_group') group_len = len(self.hostA.groups) self.hostA.add_group(group) self.assertEqual(len(self.hostA.groups), group_len + 1) def test_get_groups(self): group = Group('some_group') self.hostA.add_group(group) groups = self.hostA.get_groups() self.assertEqual(len(groups), 1) for _group in groups: self.assertIsInstance(_group, Group) def test_get_group_vars_with_groups(self): group = Group('some_group') self.hostA.add_group(group) group_vars = self.hostA.get_group_vars() self.assertIsInstance(group_vars, dict) def test_get_group_vars_with_nested_groups(self): parent_group = Group('some_parent_group') parent_group.set_variable('parent_some_key', 'parent_some_value') child_group = Group('some_child_group') child_group.set_variable('child_some_key', 'child_some_value') parent_group.add_child_group(child_group) self.hostA.add_group(child_group) group_vars = self.hostA.get_group_vars() self.assertIsInstance(group_vars, dict) self.assertIn('parent_some_key', group_vars) self.assertIn('child_some_key', group_vars) def test_equals_none(self): other = None self.hostA == other other == self.hostA self.hostA != other other != self.hostA self.assertNotEqual(self.hostA, other) def test_serialize(self): group = Group('some_group') self.hostA.add_group(group) data = self.hostA.serialize() self.assertIsInstance(data, dict) def test_serialize_then_deserialize(self): group = Group('some_group') self.hostA.add_group(group) hostA_data = self.hostA.serialize() hostA_clone = Host() hostA_clone.deserialize(hostA_data) self.assertEquals(self.hostA, hostA_clone) def test_set_state(self): group = Group('some_group') self.hostA.add_group(group) pickled_hostA = pickle.dumps(self.hostA) hostA_clone = pickle.loads(pickled_hostA) self.assertEquals(self.hostA, hostA_clone) def test_set_gathered_facts(self): self.hostA.set_gathered_facts(True) self.assertTrue(self.hostA.gathered_facts)
class TestHost(unittest.TestCase): ansible_port = 22 def setUp(self): self.hostA = Host('a') self.hostB = Host('b') def test_equality(self): self.assertEqual(self.hostA, self.hostA) self.assertNotEqual(self.hostA, self.hostB) self.assertNotEqual(self.hostA, Host('a')) def test_hashability(self): # equality implies the hash values are the same self.assertEqual(hash(self.hostA), hash(Host('a'))) def test_get_vars(self): host_vars = self.hostA.get_vars() self.assertIsInstance(host_vars, dict) def test_repr(self): host_repr = repr(self.hostA) self.assertIsInstance(host_repr, string_types) def test_add_group(self): group = Group('some_group') group_len = len(self.hostA.groups) self.hostA.add_group(group) self.assertEqual(len(self.hostA.groups), group_len + 1) def test_get_groups(self): group = Group('some_group') self.hostA.add_group(group) groups = self.hostA.get_groups() self.assertEqual(len(groups), 1) for _group in groups: self.assertIsInstance(_group, Group) def test_equals_none(self): other = None self.hostA == other other == self.hostA self.hostA != other other != self.hostA self.assertNotEqual(self.hostA, other) def test_serialize(self): group = Group('some_group') self.hostA.add_group(group) data = self.hostA.serialize() self.assertIsInstance(data, dict) def test_serialize_then_deserialize(self): group = Group('some_group') self.hostA.add_group(group) hostA_data = self.hostA.serialize() hostA_clone = Host() hostA_clone.deserialize(hostA_data) self.assertEquals(self.hostA, hostA_clone) def test_set_state(self): group = Group('some_group') self.hostA.add_group(group) pickled_hostA = pickle.dumps(self.hostA) hostA_clone = pickle.loads(pickled_hostA) self.assertEquals(self.hostA, hostA_clone)