performance - 为什么ansible库存解析器我的json这么慢
问题描述
我从公共云生成了一个 json,但是使用这个 inventory.json 太慢了。请告诉我为什么我的 json 是这样的:
{
"angelbeats": {
"hosts": ["10.193.0.24", "10.193.0.23"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"grammy": {
"hosts": ["10.193.2.5", "10.193.0.9", "10.193.10.4", "10.193.8.5"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"cdn": {
"hosts": ["10.193.0.12", "10.193.0.11", "10.193.2.7", "10.193.2.8"],
"vars": {
"ansible_ssh_user": "root"
}
},
"mdianying": {
"hosts": ["10.193.0.31"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"zkmq": {
"hosts": ["10.193.0.26", "10.193.0.27", "10.193.0.25"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"bmovie": {
"hosts": [],
"children": ["angelbeats", "growingpains", "forrestgump", "zkmq", "job", "tm", "inception"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"xxljob": {
"hosts": ["10.193.0.6"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"redis": {
"hosts": ["10.193.0.40", "10.193.2.13"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"tm": {
"hosts": ["10.193.0.13", "10.193.0.14", "10.193.0.16", "10.193.0.17", "10.193.0.15"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"dns": {
"hosts": ["10.193.0.100", "10.193.2.100", "10.193.10.10", "10.193.8.19"],
"vars": {
"ansible_ssh_user": "root"
}
},
"yctask": {
"hosts": ["10.193.8.15"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"cmovie": {
"hosts": [],
"children": ["angelbeats", "growingpains", "forrestgump", "zkmq", "job", "tm", "inception"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"forrestgump": {
"hosts": ["10.193.0.104", "10.193.2.101", "10.193.8.20", "10.193.10.11"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"pwapi": {
"hosts": ["10.193.0.28", "10.193.2.11", "10.193.8.10", "10.193.10.9"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"pwweb": {
"hosts": ["10.193.0.20", "10.193.0.19", "10.193.2.9", "10.193.2.10", "10.193.8.9", "10.193.8.8", "10.193.10.6", "10.193.10.7"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"pwtask": {
"hosts": ["10.193.0.29"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"apishow": {
"hosts": ["10.193.0.32", "10.193.8.11"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"inception": {
"hosts": ["10.193.0.10", "10.193.2.6", "10.193.8.7", "10.193.10.5"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"moviebi": {
"hosts": ["10.193.0.42", "10.193.8.18"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"yanchu": {
"hosts": ["10.193.0.35", "10.193.8.14"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"growingpains": {
"hosts": ["10.193.0.21", "10.193.0.22"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"goods": {
"hosts": ["10.193.0.33", "10.193.8.12"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"urm": {
"hosts": ["10.193.0.39", "10.193.2.12"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"job": {
"hosts": ["10.193.0.105"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
},
"order": {
"hosts": ["10.193.0.34", "10.193.8.13"],
"vars": {
"ansible_ssh_user": "wangluoli"
}
}
}
解决方案
您需要_meta
在 JSON 中创建一个部分:
上面详述的库存脚本系统适用于所有版本的 Ansible,但为每个主机调用 --host 可能效率很低,尤其是当它涉及对远程子系统的 API 调用时。
为了避免这种低效率,如果清单脚本返回一个名为“_meta”的顶级元素,则可以在一个脚本执行中返回所有主变量。当此元元素包含“hostvars”的值时,将不会使用 --host 为每个主机调用清单脚本。这导致大量主机的性能显着提高。
推荐阅读
- java - 将文件 .bmp 转换为二进制文件并将二进制文件转换回 Java 中的文件 .bmp
- spring - 在自动化测试项目中使用 Spring jpa + Cucumber + JUnit 进行查询
- reactjs - React 中的条件渲染可以使用逻辑运算符 || 渲染相同的内容时?
- react-native - 在组件中插入 REST / API 返回
- node.js - 在安装 ElectronJS 时获取“证书链中的自签名证书”
- lua - 有没有办法用 Lua 更新帧大小?
- java - 在 Java 中创建一个二维对象数组
- javascript - 笑话:监视对象方法?
- arrays - 匹配并反映最新时间
- sql - 如何从 Snowflake 的列中过滤非 ascii 字符?