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 を出し、無事にマージされた。
この記事が気に入ったらサポートをしてみませんか?