- いままではgo modは使わずにGOPATHを利用する普通のパッケージ管理方式でやっていた
- ビルドしようとしたときに最新のパッケージをダウンロードするからか、どこかのタイミングでビルドが失敗するようになった
やること
- go modへ移行して、ビルド成功していた時のバージョンを指定する
サンプル
package main
import (
"context"
"encoding/json"
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"log"
"os"
"path/filepath"
)
func main() {
// Kubeconfig縺ョ繝輔ぃ繧、繝ォ繝代せ繧呈欠螳・ kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config")
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
log.Fatal(err)
}
// Kubeconfig繧定ェュ縺ソ霎シ繧
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
log.Fatal(err)
}
// Pod荳隕ァ繧貞他縺ウ蜃コ縺・ namespace := "default"
pods, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{
LabelSelector: "app=vamdemic111aaa-app",
})
if err != nil {
log.Fatalln("failed to get pods:", err)
}
m := map[string]string{}
for _, pod := range pods.Items {
m[pod.Name] = string(pod.Status.Phase)
}
data, _ := json.Marshal(m)
fmt.Printf(string(data))
}
整理
go mod tidy
エラー内容
go: finding k8s.io/utils latest
go: finding golang.org/x/time latest
main imports
k8s.io/client-go/kubernetes imports
k8s.io/client-go/discovery imports
github.com/googleapis/gnostic/OpenAPIv2: module github.com/googleapis/gnostic@latest found (v0.5.5), but does not contain package github.com/googleapis/gnostic/OpenAPIv2
main imports
k8s.io/client-go/kubernetes imports
k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1 imports
k8s.io/api/auditregistration/v1alpha1: module k8s.io/api@latest found (v0.21.1), but does not contain package k8s.io/api/auditregistration/v1alpha1
main imports
k8s.io/client-go/kubernetes imports
k8s.io/client-go/kubernetes/typed/batch/v2alpha1 imports
k8s.io/api/batch/v2alpha1: module k8s.io/api@latest found (v0.21.1), but does not contain package k8s.io/api/batch/v2alpha1
main imports
k8s.io/client-go/kubernetes imports
k8s.io/client-go/kubernetes/typed/settings/v1alpha1 imports
k8s.io/api/settings/v1alpha1: module k8s.io/api@latest found (v0.21.1), but does not contain package k8s.io/api/settings/v1alpha1
ひとつづつつぶしていく
k8s.io/api
main imports
k8s.io/client-go/kubernetes imports
k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1 imports
k8s.io/api/auditregistration/v1alpha1: module k8s.io/api@latest found (v0.21.1), but does not contain package k8s.io/api/auditregistration/v1alpha1
バージョン一覧
以前は動いていたので、少し前のバージョンをgo modで指定する
指定
go mod edit -require k8s.io/api/auditregistration@v0.20.2
試す
消えてる
yuta:/tmp/go $ go mod tidy
go: downloading k8s.io/api v0.20.2
go: extracting k8s.io/api v0.20.2
main imports
k8s.io/client-go/kubernetes imports
k8s.io/client-go/discovery imports
github.com/googleapis/gnostic/OpenAPIv2: module github.com/googleapis/gnostic@latest found (v0.5.5), but does not contain package github.com/googleapis/gnostic/OpenAPIv2
main imports
k8s.io/client-go/kubernetes imports
k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1 imports
k8s.io/api/auditregistration/v1alpha1: module k8s.io/api@latest found (v0.21.1), but does not contain package k8s.io/api/auditregistration/v1alpha1
main imports
k8s.io/client-go/kubernetes imports
k8s.io/client-go/kubernetes/typed/settings/v1alpha1 imports
k8s.io/api/settings/v1alpha1: module k8s.io/api@latest found (v0.21.1), but does not contain package k8s.io/api/settings/v1alpha1
go mod edit -require k8s.io/apimachinery@v0.20.2
と、いろいろやっていたのだけど、同じことをしている方がいた!
結論 go get k8s.io/client-go@v0.20.4
とするといいみたい