Im trying to list all the build configs in openshift with help of openshift/client-go
import (
"context"
"flag"
"fmt"
"os"
"path/filepath"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/clientcmd"
buildv1 "github.com/openshift/client-go/build/clientset/versioned/typed/build/v1"
)
func main() {
err := start()
if err != nil {
fmt.Fprintf(os.Stderr, "error: %v", err)
os.Exit(1)
}
}
func start() error {
var kubeconfig *string
if home := homeDir(); home != "" {
kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
} else {
kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
}
flag.Parse()
// use the current context in kubeconfig
config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
if err != nil {
return err
}
buildV1Client, err := buildv1.NewForConfig(config)
if err != nil {
return err
}
namespace := "testproject"
// get all builds
builds, err := buildV1Client.Builds(namespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
return err
}
fmt.Printf("There are %d builds in project %s\n", len(builds.Items), namespace)
// List names of all builds
for i, build := range builds.Items {
fmt.Printf("index %d: Name of the build: %s", i, build.Name)
}
return nil
}
func homeDir() string {
if h := os.Getenv("HOME"); h != "" {
return h
}
return os.Getenv("USERPROFILE") // windows
}
I have got all the dependencies via glide. glide.yaml glide update -v
package: .
import:
- package: github.com/openshift/client-go
subpackages:
- build/clientset/versioned/typed/build/v1
- package: k8s.io/apimachinery
subpackages:
- pkg/apis/meta/v1
- package: k8s.io/client-go
subpackages:
- tools/clientcmd
I see that all my packages are part of vendor. But I cant get the type changed to vendor config.
go run main.go
# command-line-arguments
./main.go:39:44: cannot use config (type *"k8s.io/client-go/rest".Config) as type *"github.com/openshift/client-go/vendor/k8s.io/client-go/rest".Config in argument to "github.com/openshift/client-go/build/clientset/versioned/typed/build/v1".NewForConfig
./main.go:46:88: cannot use "k8s.io/apimachinery/pkg/apis/meta/v1".ListOptions literal (type "k8s.io/apimachinery/pkg/apis/meta/v1".ListOptions) as type "github.com/openshift/client-go/vendor/k8s.io/apimachinery/pkg/apis/meta/v1".ListOptions in argument to buildV1Client.Builds(namespace).List
I have deleted the vendor directory in the current directory and made sure gopath have all the required dependencies as an alternative try, But that doesnt work. I also tried to link ~/go/src/github.com/openshift/client-go/vendor/* vendor but that doesnt seem to work.
I also tried the solution https://stackoverflow.com/questions/35760596/list-openshift-objects-via-go-client-api. Which did not work.
glide is a bit outdated as of this writing. Its last release was 07/10/2019.
Since version 1.11
Golang came up with its native package management called go modules and that has become the more preferred way to manage dependencies. That's what manages your vendor
directory and this is what github.com/openshift/client-go
uses. I'm also assuming that you started from this main.go
file.
Since everything under github.com/openshift/client-go
has the dependencies already managed. I recommend 🎬:
go get github.com/openshift/client-go
cd $GOPATH/src/github.com/mygihubusername/myrepo
cp -R ../../openshift/client-go/* .
# put main.go here with your code or any of the subdirectories
# cd subdir 👈 if you put the main.go file under a subdir.
go build -o buildclient .
# clean up any files you don't need
# create github repo
git add *
git commit -m 'My first commit'
git push origin master
Works for me. ✌️