def parse_inventory(self, host_list): # 根据传入 主机列表生成 Inventory """用于生成动态构建Ansible Inventory. self.host_list: [ {"name": "asset_name", "ip": <ip>, "port": <port>, "user": <user>, "pass": <pass>, "key": <sshKey>, "groups": ['group1', 'group2'], "other_host_var": <other>}, {...}, ] :return: 返回一个Ansible的inventory对象 """ # TODO: 验证输入 # 创建Ansible Group,如果没有则创建default组 ungrouped = Group('ungrouped') all = Group('all') all.add_child_group(ungrouped) self.groups = dict(all=all, ungrouped=ungrouped) for asset in host_list: host = JMSHost(asset=asset) # 迭代获取到host asset_groups = asset.get('groups') if asset_groups: for group_name in asset_groups: if group_name not in self.groups: group = Group(group_name) self.groups[group_name] = group else: group = self.groups[group_name] group.add_host(host) else: ungrouped.add_host(host) all.add_host(host) # 添加到Inventory
def parse_inventory(self, host_list): """用于生成动态构建Ansible Inventory. self.host_list: [ {"name": "asset_name", "ip": <ip>, "port": <port>, "user": <user>, "pass": <pass>, "key": <sshKey>, "groups": ['group1', 'group2'], "other_host_var": <other>}, {...}, ] :return: 返回一个Ansible的inventory对象 """ # TODO: 验证输入 # 创建Ansible Group,如果没有则创建default组 ungrouped = Group('ungrouped') all = Group('all') all.add_child_group(ungrouped) self.groups = dict(all=all, ungrouped=ungrouped) for asset in host_list: host = JMSHost(asset=asset) asset_groups = asset.get('groups') if asset_groups: for group_name in asset_groups: if group_name not in self.groups: group = Group(group_name) self.groups[group_name] = group else: group = self.groups[group_name] group.add_host(host) else: ungrouped.add_host(host) all.add_host(host)