minikube/pull/9321 を出した

Invalid suggestion on 'minikube del' というIssueが出ていた。
minikube deleteコマンドをミスタイプした際のsuggestionに「delete」が2回表示されるという報告である

試してみると確かに2回出る。
suggestionはminikubeが使っているCLIライブラリcobraの機能で、cobraに登録しておいたコマンドの中から表示されるものだ。

minikubeには「delete」コマンドと「cashe delete」サブコマンドがあり、cobraのsuggestionは登録されたcommandをそのまま表示するようなので、deleteが2回サジェストされるのはminikubeのバグではなくcobraの仕様であるとコメントした。

よくありがちなとりとめのない挙動なのですぐcloseされるだろうと思った。





が、minikubeは最近マルチノードに対応したから「node delete」サブコマンドもあるじゃんと思い出す。
delete系3コマンドに対しsuggestionが2つ表示されている。先の見解が誤りだと気づき調査を開始、minikubeのバグの可能性が出てきたぞ!

ソースを読んでみると、「delete」コマンドの登録はcmd/delete.go#initメソッドにあり、一見すると、1回だけ登録しているように見えた。他のコマンドも、それぞれのcmd/xxxx.go#initメソッド内で1回だけ登録しているので別段deleteコマンドの処理に怪しさはない。

が、よく読むと落とし穴があり、「minikube delete」コマンドのようなメインコマンドは一括してroot.go#initの方に登録処理があった。

以下がその登録処理である。
「delete」など登録対象のコマンドは「groups」に入っている。登録先は「RootCmd」である。( こういう書き方は主従関係が逆なのでよろしくないな。。。)

groups.Add(RootCmd)

上記処理により、RootCmdにgroupsが登録される。一見それが想像しにくいコードである。

結論としては、サブコマンドの登録処理は各コマンドのinit内が正しいが、「delete」コマンドのようなメインコマンドはroot.go#init内で登録するので、各コマンドのinit内での登録は不要である。

Issueでは報告されていないが、「minikube stop」コマンドについても同じバグがあったので合わせてPR #9321  を出し、無事にマージされた。


この記事が気に入ったらサポートをしてみませんか?