使用Nodejs解析kubectl输出“TypeError: item.spec.map is not a function”

问题描述 投票:0回答:1

使用nodejs尝试通过运行child_process kubectl部署json输出来解析属性值(副本数) 你能建议我做错了什么吗?

** 错误:var deploymentInfo = item.spec.map((c) => { return {replicas: c.replicas} }); ^ TypeError:item.spec.map 不是函数 **

` {

"apiVersion": "v1",
"items": [
    {
        "apiVersion": "extensions/v1beta1",
        "kind": "Deployment",
        "metadata": {
            "labels": {
                "env": "stage"
            },
            "name": "sl-deployment"
        },
        "spec": {
            "progressDeadlineSeconds": 2147483647,
            "replicas": 3,
            "revisionHistoryLimit": 3,
            "selector": {
                "matchLabels": {
                    "env": "nonprod",
                    "microservice": "svc-microservice",
                    "name": "sl-deployment"
                }
            },
            "strategy": {
                "rollingUpdate": {
                    "maxSurge": 1,
                    "maxUnavailable": 1
                },
                "type": "RollingUpdate"
            },
            "template": {
                "metadata": {
                    "labels": {
                        "env": "stage",
                        "microservice": "svc-microservice",
                        "name": "sl-deployment"
                    }
                },
                "spec": {
                    "containers": [
                        {
                            "image": "myregistry/svc-microservice/sl-deployment:stage.4.30",
                            "name": "sl-deployment",
                            "resources": {
                                "limits": {
                                    "cpu": "6",
                                    "memory": "16Gi"
                                },
                                "requests": {
                                    "cpu": "2",
                                    "memory": "6Gi"
                                }
                            }
                
                        }
                    ]
                   
                }
            }
        }
    } ]`

尝试了下面粘贴的代码

exec(`kubectl get deployment -n svc-microservice -o json`, (error, stdout, stderr) => {
        if (error) {
          console.log(`error: ${error.message}`);
          return;
        }
        if (stderr) {
          console.log(`stderr: ${stderr}`);
          return;
        }
        var deployjson = JSON.parse(stdout);
        
        for (let item of datamaps.items) {
          
          var  deploymentInfo = item.spec.map((c) => { return { replicas: c.replicas} });
          for (let info of deploymentInfo) {
            metadata[name][info.name] = { deployment:info.replicas}
          }
        }
        })

** 错误:varDeploymentInfo = item.spec.map((c) => { return {replicas: c.replicas} }); ^ 类型错误:item.spec.map 不是函数 **

javascript node.js json kubectl
1个回答
0
投票

看起来

spec
属性是一个对象,所以你不能在它上面使用map函数。 map 函数仅适用于数组。

如果你只是想获取

replicas
属性,则不需要做任何特殊的事情,只需访问spec对象上的属性即可:

item.spec.replicas
© www.soinside.com 2019 - 2024. All rights reserved.