Chef Server 12.2.0-1。
我正试图找到一种从PostgreSQL数据库中查询Ohai节点属性的方法。浏览了表模式和数据后,我没有看到任何包含这些属性的表。
这些属性是否存储在Chef服务器上?有没有办法通过数据库查询或REST调用远程查看它们?
opscode_chef表列表:
checksums
clients
containers
cookbook_artifact_version_checksums
cookbook_artifact_versions
cookbook_artifacts
cookbook_version_checksums
cookbook_versions
cookbooks
data_bag_items
data_bags
environments
groups
keys
node_policy
nodes
opc_customers
opc_users
org_migration_state
org_user_associations
org_user_invites
orgs
policies
policy_groups
policy_revisions
policy_revisions_policy_groups_association
roles
sandboxed_checksums
users
更新1 :感谢@Tensibai。
属性存储在表nodes
,列serialized_object
中。列serialized_object
是gzip编码的。
用于获取json中的属性的Java代码:
String query = "SELECT name, serialized_object FROM nodes";
PreparedStatement st = conn.prepareStatement(query);
ResultSet rs = st.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
byte[] arr = rs.getBytes("serialized_object");
byte[] out = unzip(arr);
System.out.println(name + " : " + new String(out));
}
public static byte[] unzip(byte[] in) throws IOException{
ByteArrayOutputStream out = new ByteArrayOutputStream();
FileUtils.copy(new GZIPInputStream(new ByteArrayInputStream(in)), out);
return out.toByteArray();
}
示例属性:https://gist.github.com/rodionos/cb744155539699b5c348
我不是PostgreSQL的专家。更好的解决方案可能是启用本机描述的本机解压缩功能:https://github.com/chef/chef-server/issues/8#issuecomment-99152808