Minikubeに自分のコードがMergeされReleaseされるまでの流れ
はじめに
Minikubeのlogviewer addonの不具合をみつけたので、それを修正し6月頭くらいにPull Requestを送りました。
それが取り込まれてリリースされたようなので流れをまとめておきます。
不具合について
どんな不具合だったかというと、
- Minikubeに同梱されたlogviewer addonが動かない
といった不具合でした。
試しにaddonを有効化する際にログを出してみます。
gashirar:~/minikube$ minikube addons enable logviewer --alsologtostderr I0605 00:33:35.753131 69149 addons.go:50] Setting logviewer=true in profile "minikube" I0605 00:33:35.753227 69149 addons.go:92] Writing out "minikube" config to set logviewer=true... 🌟 The 'logviewer' addon is enabled
動いていそうなのですが、metrics-serverのaddonでは下記のような出力がされているので、もろもろ処理が抜けてそうな感じです。
gashirar:~/minikube$ minikube addons enable metrics-server --alsologtostderr I0605 00:33:51.684479 69212 addons.go:50] Setting metrics-server=true in profile "minikube" I0605 00:33:51.684507 69212 addons.go:126] Setting addon metrics-server=true in "minikube" I0605 00:33:51.684519 69212 host.go:65] Checking if "minikube" exists ... I0605 00:33:51.684942 69212 cli_runner.go:108] Run: docker container inspect minikube --format={{.State.Status}} I0605 00:33:51.728813 69212 addons.go:233] installing /etc/kubernetes/addons/metrics-apiservice.yaml I0605 00:33:51.728862 69212 ssh_runner.go:215] scp deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl --> /etc/kubernetes/addons/metrics-apiservice.yaml (401 bytes) I0605 00:33:51.728996 69212 cli_runner.go:108] Run: docker container inspect -f "'{{(index (index .NetworkSettings.Ports "22/tcp") 0).HostPort}}'" minikube I0605 00:33:51.764021 69212 sshutil.go:44] new ssh client: &{IP:127.0.0.1 Port:32775 SSHKeyPath:/home/gashirar/.minikube/machines/minikube/id_rsa Username:docker} I0605 00:33:51.865560 69212 addons.go:233] installing /etc/kubernetes/addons/metrics-server-deployment.yaml I0605 00:33:51.865596 69212 ssh_runner.go:215] scp memory --> /etc/kubernetes/addons/metrics-server-deployment.yaml (699 bytes) I0605 00:33:51.880245 69212 addons.go:233] installing /etc/kubernetes/addons/metrics-server-service.yaml I0605 00:33:51.880287 69212 ssh_runner.go:215] scp deploy/addons/metrics-server/metrics-server-service.yaml.tmpl --> /etc/kubernetes/addons/metrics-server-service.yaml (401 bytes) I0605 00:33:51.895699 69212 ssh_runner.go:148] Run: sudo KUBECONFIG=/var/lib/minikube/kubeconfig /var/lib/minikube/binaries/v1.18.3/kubectl apply -f /etc/kubernetes/addons/metrics-apiservice.yaml -f /etc/kubernetes/addons/metrics-server-deployment.yaml -f /etc/kubernetes/addons/metrics-server-service.yaml I0605 00:33:52.042574 69212 addons.go:92] Writing out "minikube" config to set metrics-server=true... 🌟 The 'metrics-server' addon is enabled
不具合の原因を追う
MinikubeのAddon開発は主に3つのステップがあります。
下記でMinikube Addonを作ってたので流れはなんとなくわかってました。(遊んでおいてよかった) MinikubeのAddonを作る - gashirar's blog
1. YAML
deploy/addons/logviewer
を覗く。
gashirar:~/minikube$ ls deploy/addons/logviewer
logviewer-dp-and-svc.yaml.tmpl logviewer-rbac.yaml.tmpl
これと言って問題はなさそうです。
2. pkg/minikube/assets/addons.go
次はYAMLファイルの関連付けを行っているソースを見てみます。
下記がlogviewerの部分。
"logviewer": NewAddon([]*BinAsset{ MustBinAsset( "deploy/addons/logviewer/logviewer-dp-and-svc.yaml.tmpl", vmpath.GuestAddonsDir, "logviewer-dp-and-svc.yaml", "0640", false), MustBinAsset( "deploy/addons/logviewer/logviewer-rbac.yaml.tmpl", vmpath.GuestAddonsDir, "logviewer-rbac.yaml", "0640", false), }, false, "logviewer"),
こちらも問題はなさそうです。
3. pkg/addons/config.go
最後はこちら。
{ name: "kubevirt", set: SetBool, callbacks: []setFn{enableOrDisableAddon}, }, { name: "logviewer", set: SetBool, }, { name: "metrics-server", set: SetBool, callbacks: []setFn{enableOrDisableAddon}, },
kubevirtとmetrics-serverのaddonと比較してすぐにわかりました。callbacks
の指定がされていません。
これが原因の可能性が高いので修正してテストしてバイナリ作ってうごかしてみます。
(今回は上記のような修正だったので追加のテストコードは書きませんでした。が、本当は同じような不具合が発生した時にチェックできるようなテストケースを追加するのがベストだと思います…。)
疎通
gashirar:~/minikube$ ./out/minikube addons enable logviewer --alsologtostderr I0605 00:36:28.749859 75196 addons.go:50] Setting logviewer=true in profile "minikube" I0605 00:36:28.749894 75196 addons.go:126] Setting addon logviewer=true in "minikube" I0605 00:36:28.749930 75196 host.go:65] Checking if "minikube" exists ... I0605 00:36:28.750352 75196 cli_runner.go:108] Run: docker container inspect minikube --format={{.State.Status}} I0605 00:36:28.787287 75196 addons.go:233] installing /etc/kubernetes/addons/logviewer-dp-and-svc.yaml I0605 00:36:28.787326 75196 ssh_runner.go:215] scp deploy/addons/logviewer/logviewer-dp-and-svc.yaml.tmpl --> /etc/kubernetes/addons/logviewer-dp-and-svc.yaml (1942 bytes) I0605 00:36:28.787445 75196 cli_runner.go:108] Run: docker container inspect -f "'{{(index (index .NetworkSettings.Ports "22/tcp") 0).HostPort}}'" minikube I0605 00:36:28.822276 75196 sshutil.go:44] new ssh client: &{IP:127.0.0.1 Port:32779 SSHKeyPath:/home/gashirar/.minikube/machines/minikube/id_rsa Username:docker} I0605 00:36:28.917038 75196 addons.go:233] installing /etc/kubernetes/addons/logviewer-rbac.yaml I0605 00:36:28.917092 75196 ssh_runner.go:215] scp deploy/addons/logviewer/logviewer-rbac.yaml.tmpl --> /etc/kubernetes/addons/logviewer-rbac.yaml (1064 bytes) I0605 00:36:28.933421 75196 ssh_runner.go:148] Run: sudo KUBECONFIG=/var/lib/minikube/kubeconfig /var/lib/minikube/binaries/v1.18.3/kubectl apply -f /etc/kubernetes/addons/logviewer-dp-and-svc.yaml -f /etc/kubernetes/addons/logviewer-rbac.yaml I0605 00:36:29.125240 75196 addons.go:92] Writing out "minikube" config to set logviewer=true... 🌟 The 'logviewer' addon is enabled
直っていそうです。
PR投げる前にContributor License Agreement(CLA)に同意する必要があるので、それをやっていきます。
MinikubeのContributor Guideを読む
Linux Foundationのシステムを利用してCNCFのCLAを提出すれば認可されます。
ほぼ上記の手順で入力していけばOK。
このあとPRを投げましょう。
PR~Merge
実際のPRを見ていくと、k8s-ci-robot
によって先ほど同意したCLAのチェックが行われているようです。
レビュアーもbotによって決まる模様。すごい。
ローカルではテストして通ったことは確認できていたのですが、Travisによるtestは失敗していました。
が、レビュアのmedyagh氏の判断によるのかmergeされることに。
どういたしまして。
以降は適当なタイミングでリリースされるはずなので気長に待ちます。
1.12.0-beta.0
1.12.0-beta.0 Releaseで取り込まれた模様。
下から3番目に載ってました。わーい。
まとめ
ほんの少しの修正でしたが、いつも利用しているOSSにコントリビュートできてよかったです。
あと何の縁かMinikube Addon作って遊んだりしてたのもよかったですね。不思議なものです。