LoginSignup
0
0

More than 1 year has passed since last update.

go modへ移行したときに依存性ではまった

Posted at
  • いままでは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で指定する
image.png

指定

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とするといいみたい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0