小编dbz*_*zuk的帖子

全局标志和子命令

我正在实现一个带有多个子命令的小型 CLI。我想支持全局标志,即适用于所有子命令以避免重复的标志。

例如,在下面的示例中,我尝试拥有-required所有子命令所需的标志。

package main

import (
    "flag"
    "fmt"
    "log"
    "os"
)

var (
    required = flag.String(
        "required",
        "",
        "required for all commands",
    )
    fooCmd = flag.NewFlagSet("foo", flag.ExitOnError)
    barCmd = flag.NewFlagSet("bar", flag.ExitOnError)
)

func main() {
    flag.Parse()

    if *required == "" {
        fmt.Println("-required is required for all commands")
    }

    switch os.Args[1] {
    case "foo":
        fooCmd.Parse(os.Args[2:])
        fmt.Println("foo")
    case "bar":
        barCmd.Parse(os.Args[2:])
        fmt.Println("bar")
    default:
        log.Fatalf("[ERROR] unknown subcommand '%s', see help for more details.", os.Args[1])
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望用法如下:

$ go run main.go …
Run Code Online (Sandbox Code Playgroud)

command-line-interface go command-line-arguments

13
推荐指数
1
解决办法
6985
查看次数

从 k8s 事件处理程序中的对象获取注释

我正在构建一个基于sample-controller的小 k8s控制器

我正在使用以下事件处理程序侦听 ServiceAccount 事件:

...
serviceAccountInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
    AddFunc:    controller.enqueueServiceAccount,
    DeleteFunc: controller.enqueueServiceAccount,
})
...

func (c *Controller) enqueueServiceAccount(obj interface{}) {
    var key string
    var err error

    if key, err = cache.MetaNamespaceKeyFunc(obj); err != nil {
        utilruntime.HandleError(err)
        return
    }
    c.workqueue.Add(key)
}
Run Code Online (Sandbox Code Playgroud)

这工作正常;我的事件正在进入并且enqueueServiceAccount()函数正在被调用。

这是我第一次接触 Golang,我不知道如何从obj.

我倾倒了对象,go-spew可以确认它有一个ObjectMeta. 我只是不确定如何将它转换为可以访问的某个对象ObjectMeta- 从那里应该很容易获得注释(在这种情况下,该对象没有任何注释,它是<nil>值之一。

(*v1.ServiceAccount)(0xc0002c1010)(&ServiceAccount{ObjectMeta:{kube-proxy  kube-system /api/v1/namespaces/kube-system/serviceaccounts/kube-proxy d2013421-92c8-44ae-b6d8-202231ea557c 234 0 2021-04-29 18:40:20 +0100 BST <nil> <nil> map[eks.amazonaws.com/component:kube-proxy k8s-app:kube-proxy] map[kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"labels":{"eks.amazonaws.com/component":"kube-proxy","k8s-app":"kube-proxy"},"name":"kube-proxy","namespace":"kube-system"}}
Run Code Online (Sandbox Code Playgroud)

如何访问此对象的注释?

go kubernetes

2
推荐指数
1
解决办法
53
查看次数