通过刀获取节点属性

时间:2019-02-14 15:35:11

标签: json ruby chef knife ohai-gem

我有一个要求,我需要获取为多个节点安装的主机名,内存,核心,存储,软件包(约1k)。 我已经用刀解决了这个问题。

@Entity(indices = [Index(value = ["title"], unique = true)], tableName ="tasks")
    class Task(
        var title: String = "",
        var description: String = "",
        var date: Date,
        @Embedded 
        var remind: Constants.RemindPeriod = Constants.RemindPeriod.MIN5,
        @Embedded
        var prior: Priority) : Serializable {
        @PrimaryKey(autoGenerate = true)
        var id: Long = 0}

此命令的典型输出如下;

 private fun checkDatabaseState() {
        doAsync {
            val db = App.database
            val entityCount = db.taskDao().getTasksCount().or(0)
            isDatabaseNotEmpty = entityCount > 0
        }
    }  

但是,有些细节我不需要;

  • 我们如何设置显示顺序与命令中属性列表的显示顺序相同,即主机名然后是核心,内存...
  • 我们获得了文件系统名称及其相应的大小,但是,我们还获得了所有其他标签值;我们如何才能仅获取文件系统名称和(类似于从 df 命令获得的内容;例如apps / logger / root_vg-apps:kb_size:3997376)
  • $ knife search node 'hostname:HostName1 OR hostname:HostName2 OR hostname:HostName3' -a hostname -a cpu.cores -a memory.total -a rpm -a filesystem.by_device -F j|jq '.' 属性的输出为我们提供了rpm包名称,体系结构,版本和发行版信息,如何将多个属性的输出连接在一行中(类似于运行已安装yum list 命令;例如loger-multipath.x86_64 0.4.9-123.el7)

编辑:

经过大量搜索后,这是进度:

    {
  "results": 3,
  "rows": [
    {
      "MyHostName1": {
        "hostname": "MyHostName1",
        "cpu.cores": 4,
        "memory.total": "15645184kB",
        "rpm": {
          "loger-multipath": [
            {
              "version": "0.4.9",
              "release": "123.el7",
              "arch": "x86_64"
            }
          ],
          "python": [
            {
              "version": "7.19.0",
              "release": "19.el7",
              "arch": "x86_64"
            }
          ]
        },
        "filesystem.by_device": {
          "/apps/logger/root_my-root": {
            "kb_size": "8125880",
            "kb_used": "2426760",
            "kb_available": "5263308",
            "percent_used": "32%",
            "mount_options": [
              "rw",
              "discard",
              "data=ordered"
            ],
            "uuid": "87ujrf56-6yu6-654r-yu43-uy67yg43ws67",
            "mounts": [
              "/"
            ]
          }
          }
        }
      }
    }

以及相应的输出

rpm

我知道这似乎有点混乱;欢迎任何帮助

1 个答案:

答案 0 :(得分:0)

查看问题中提供的json,看来您的查询未对您指定的键使用正确的值-即hostname-您在感觉上指定了hostname:HostName1它必须为hostname:MyHostName1

此外,您可以从node命令中删除search参数,并在查询中将其指定,例如node:my.node.name