首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何提取kubernetes命令执行结果属性

如何提取kubernetes命令执行结果属性
EN

Stack Overflow用户
提问于 2022-03-03 01:36:38
回答 1查看 253关注 0票数 1

我正在通过client-Go连接到pod,我想获得文件目录的属性。

代码语言:javascript
运行
复制
func GetPodFiles(c *gin.Context)  {
    client, _ := Init.ClusterID(c)
    path := c.DefaultQuery("path", "/")
    cmd := []string{
        "sh",
        "-c",
        fmt.Sprintf("ls -l %s", path),
    }
    config, _ := Init.ClusterCfg(c)
    req := client.CoreV1().RESTClient().Post().
        Resource("pods").
        Name("nacos-0").
        Namespace("default").SubResource("exec").Param("container", "nacos")
    req.VersionedParams(
        &v1.PodExecOptions{
            Command: cmd,
            Stdin:   false,
            Stdout:  true,
            Stderr:  true,
            TTY:     false,
        },
        scheme.ParameterCodec,
    )

    var stdout, stderr bytes.Buffer
    exec, err := remotecommand.NewSPDYExecutor(config, "POST", req.URL())
    if err != nil {
        response.FailWithMessage(response.InternalServerError, err.Error(), c)
        return
    }
    err = exec.Stream(remotecommand.StreamOptions{
        Stdin:  nil,
        Stdout: &stdout,
        Stderr: &stderr,
    })
    if err != nil {
        response.FailWithMessage(response.InternalServerError, "Error obtaining file", c)
        return
    }

    fmt.Println(stdout.String())
}

执行结果输出

代码语言:javascript
运行
复制
total 0
lrwxrwxrwx   1 root root   7 Jun  1  2018 bin -> usr/bin
drwxr-xr-x   5 root root 360 Feb 16 16:39 dev
lrwxrwxrwx   1 root root   8 Jun  1  2018 sbin -> usr/sbin
drwxr-xr-x   2 root root   6 Apr 11  2018 srv

期待结果

代码语言:javascript
运行
复制
"data": [
        {
            "perm": "drwxr-xr-x",
            "mod_time": "2022-03-02 15:02:15",
            "kind": "d",
            "name": "temp",
            "size": ""
        },
]

有什么好办法或者一个高丽的第三方图书馆来处理它吗?请让我知道。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-03 13:14:01

在库伯内特斯吊舱中,您可以执行stat linux命令而不是ls命令。

代码语言:javascript
运行
复制
$ stat yourFileOrDirName

默认情况下,此命令的输出如下:

代码语言:javascript
运行
复制
  File: yourFileOrDirName
  Size: 346             Blocks: 0          IO Block: 4096   directory
Device: 51h/82d Inode: 40431       Links: 1
Access: (0755/drwxr-xr-x)  Uid: ( 1000/ username)   Gid: ( 1000/ groupname)
Access: 2022-03-02 11:59:07.384821351 +0100
Modify: 2022-03-02 11:58:48.733821177 +0100
Change: 2022-03-02 11:58:48.733821177 +0100
 Birth: 2021-12-21 11:12:05.571841723 +0100

但是您可以这样调整它的输出:

代码语言:javascript
运行
复制
$ stat --printf="%n,%A,%y,%s" yourFileOrDirName

其中%n -文件名、%A -权限位和文件类型为人类可读的形式,%y -最后一次数据修改的时间-人类可读的,%s -总大小,以字节为单位.您也可以选择任何字符作为分隔符,而不是逗号。

产出如下:

代码语言:javascript
运行
复制
yourFileOrDirName,drwxr-xr-x,2022-03-02 11:58:48.733821177 +0100,346

请参阅有关stat命令这里的更多信息。

当你得到这样的输出后,我相信如果你真的需要的话,你可以很容易地把它转换成json格式。

Furthermore,您可以像这样运行stat命令:

代码语言:javascript
运行
复制
$ stat --printf="{\"data\":[{\"name\":\"%n\",\"perm\":\"%A\",\"mod_time\":\"%y\",\"size\":\"%s\"}]}" yourFileOrDirName

或者,正如@mdaniel所建议的那样,由于命令不包含任何shell变量,也不包含',所以更干净的命令是:

代码语言:javascript
运行
复制
stat --printf='{"data":[{"name":"%n","perm":"%A","mod_time":"%y","size":"%s"}]}' yourFileOrDirName

然后得到DIY json的输出:

代码语言:javascript
运行
复制
{"data":[{"name":"yourFileOrDirName","perm":"drwxrwxr-x","mod_time":"2022-02-04 15:17:27.000000000 +0000","size":"4096"}]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71331142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档