第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

kubectl插件里面,提示輸入?

kubectl插件里面,提示輸入?

Go
炎炎設(shè)計(jì) 2023-06-26 17:41:54
我正在編寫(xiě)一個(gè)kubectl插件來(lái)對(duì)用戶進(jìn)行身份驗(yàn)證,我想在調(diào)用插件后提示用戶輸入密碼。據(jù)我了解,從 STDIN 獲取輸入相當(dāng)簡(jiǎn)單,但我很難看到寫(xiě)入 STDOUT 的消息。目前我的代碼如下所示:在 cmd/kubectl-myauth.go 中:// This is mostly boilerplate, but it's needed for the MRE// https://stackoverflow.com/help/minimal-reproducible-examplepackage myauthimport (...)func main() {    pflag.CommandLine = pflag.NewFlagSet("kubectl-myauth", pflag.ExitOnError)    root := cmd.NewCmdAuthOp(genericclioptions.IOStreams{In: os.Stdin, Out: os.Stdout, ErrOut: os.Stderr})    if err := root.Execute(); err != nil {        os.Exit(1)    }}在 pkg/cmd/auth.go 中:package cmd...type AuthOpOptions struct {    configFlags *genericclioptions.ConfigFlags    resultingContext *api.Context    rawConfig       api.Config    args            []string    ...    genericclioptions.IOStreams}func NewAuthOpOptions(streams genericclioptions.IOStreams) *AuthOpOptions {    return &AuthOpOptions{        configFlags: genericclioptions.NewConfigFlags(true),        IOStreams: streams,    }}func NewCmdAuthOp(streams genericclioptions.IOStreams) *cobra.Command {    o := NewAuthOpOptions(streams)    cmd := &cobra.Command{        RunE: func(c *cobra.Command, args []string) error {            return o.Run()        },    }    return cmd}func (o *AuthOpOptions) Run() error {    pass, err := getPassword(o)    if err != nil {        return err    }    // Do Auth Stuff    // Eventually print an ExecCredential to STDOUT    return nil}當(dāng)從上下文外部運(yùn)行時(shí),這按照我期望的方式工作kubectl- 即,它打印字符串,提示輸入,然后繼續(xù)。然而,從上下文內(nèi)部來(lái)看kubectl,我相信前兩個(gè)全大寫(xiě)注釋([1] 和 [2])之間的打印內(nèi)容正在被kubectlSTDOUT 上的監(jiān)聽(tīng)所吞沒(méi)。我可以通過(guò)打印到 STDERR 來(lái)解決這個(gè)問(wèn)題,但這感覺(jué)......錯(cuò)誤。有沒(méi)有辦法可以繞過(guò)kubectlSTDOUT 的消耗來(lái)與用戶通信?TL;DR:kubectl似乎正在吞噬kubectl插件的所有 STDOUT,但我想提示用戶輸入 - 有沒(méi)有一種簡(jiǎn)單的方法可以做到這一點(diǎn)?
查看完整描述

1 回答

?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

以下是步驟:

  • git clone https://github.com/kubernetes/kubernetes.git

  • 重復(fù)sample-cli-plugintest-cli-plugin(這涉及在暫存/發(fā)布下修復(fù) import-restrictions.yaml、rules-godeps.yaml 和 Rules.yaml - 也許沒(méi)有必要,但這樣更安全)

  • 將 kubectl-ns.go 更改為 kubectl-test.go:

package main


import (

? ? ? ? "os"


? ? ? ? "github.com/spf13/pflag"


? ? ? ? "k8s.io/cli-runtime/pkg/genericclioptions"

? ? ? ? "k8s.io/test-cli-plugin/pkg/cmd"

)


func main() {

? ? ? ? flags := pflag.NewFlagSet("kubectl-test", pflag.ExitOnError)

? ? ? ? pflag.CommandLine = flags


? ? ? ? root := cmd.NewCmdTest(genericclioptions.IOStreams{In: os.Stdin,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Out: os.Stdout,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ErrOut: os.Stderr})

? ? ? ? if err := root.Execute(); err != nil {

? ? ? ? ? ? ? ? os.Exit(1)

? ? ? ? }

}

將 ns.go 更改為 test.go:

package cmd


import (

? ? ? ? "fmt"

? ? ? ? "os"


? ? ? ? "github.com/spf13/cobra"


? ? ? ? "k8s.io/cli-runtime/pkg/genericclioptions"

)


type TestOptions struct {

? ? ? ? configFlags *genericclioptions.ConfigFlags

? ? ? ? genericclioptions.IOStreams

}


func NewTestOptions(streams genericclioptions.IOStreams) *TestOptions {

? ? ? ? return &TestOptions{

? ? ? ? ? ? ? ? configFlags: genericclioptions.NewConfigFlags(true),

? ? ? ? ? ? ? ? IOStreams:? ?streams,

? ? ? ? }

}


func NewCmdTest(streams genericclioptions.IOStreams) *cobra.Command {

? ? ? ? o := NewTestOptions(streams)


? ? ? ? cmd := &cobra.Command{

? ? ? ? ? ? ? ? Use:? ? ? ? ? "test",

? ? ? ? ? ? ? ? Short:? ? ? ? "Test plugin",

? ? ? ? ? ? ? ? SilenceUsage: true,

? ? ? ? ? ? ? ? RunE: func(c *cobra.Command, args []string) error {

? ? ? ? ? ? ? ? ? ? ? ? o.Run()

? ? ? ? ? ? ? ? ? ? ? ? return nil

? ? ? ? ? ? ? ? },

? ? ? ? }


? ? ? ? return cmd

}


func (o *TestOptions) Run() error {

? ? ? ? fmt.Fprintf(os.Stderr, "Testing Fprintf Stderr\n")

? ? ? ? fmt.Fprintf(os.Stdout, "Testing Fprintf Stdout\n")

? ? ? ? fmt.Printf("Testing Printf\n")

? ? ? ? fmt.Fprintf(o.IOStreams.Out, "Testing Fprintf o.IOStreams.Out\n")

? ? ? ? return nil

}

  • 相應(yīng)地修復(fù) BUILD 文件

  • 構(gòu)建插件

  • 跑步make

  • 復(fù)制kubectl-test到/usr/local/bin

  • 運(yùn)行編譯后的二進(jìn)制kubectl文件:

~/k8s/_output/bin$ ./kubectl 測(cè)試

測(cè)試 Fprintf 標(biāo)準(zhǔn)錯(cuò)誤

測(cè)試 Fprintf 標(biāo)準(zhǔn)輸出

測(cè)試 Printf

測(cè)試 Fprintf o.IOStreams.Out


查看完整回答
反對(duì) 回復(fù) 2023-06-26
  • 1 回答
  • 0 關(guān)注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)