試圖編寫一個微服務來管理我的Openshift集羣上的圖像流。我閱讀了oc
客戶端代碼,以瞭解如何閱讀我的kubeconfig
並創建了Client
。通過Go客戶端API列出Openshift對象
我可以使用Kubernetes Client
來獲得Kubernetes對象的請求,例如,豆莢,但我使用Openshift Client
的任何請求返回一個空列表。
我還是Go的新手,所以我敢肯定我做錯了什麼。這是我到目前爲止:
package main
import (
"fmt"
"log"
"github.com/spf13/pflag"
kapi "k8s.io/kubernetes/pkg/api"
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
)
func main() {
flags := pflag.FlagSet{}
factory := clientcmd.New(&flags)
osclient, kclient, err := factory.Clients()
if err != nil {
log.Fatalln("Error:", err)
}
config, _ := factory.ClientConfig()
fmt.Println("KClient config", config)
config, _ = factory.OpenShiftClientConfig.ClientConfig()
fmt.Println("OSClient config", config)
// Empty list!
projects, err := osclient.Projects().List(kapi.ListOptions{})
if err != nil {
log.Println("Error:", err)
} else {
fmt.Println("Projects", projects, len(projects.Items))
}
// Also empty list
buildconfigs, err := osclient.BuildConfigs("my-project").List(kapi.ListOptions{})
if err != nil {
log.Println("Error:", err)
} else {
fmt.Println("Buildconfigs", buildconfigs, len(buildconfigs.Items))
}
// Works!
pods, err := kclient.Pods("my-project").List(kapi.ListOptions{})
if err != nil {
log.Println("Error:", err)
} else {
fmt.Println("Pods", len(pods.Items))
for _, pod := range pods.Items {
fmt.Println(pod.ObjectMeta.Name)
}
}
// Permission error, as expected
namespaces, err := kclient.Namespaces().List(kapi.ListOptions{})
if err != nil {
log.Println("Error:", err)
} else {
fmt.Println("Namespaces", namespaces, len(namespaces.Items))
}
}
上面的例子對於'go version go1.8.1 darwin/amd64'來說是失敗的。有這些錯誤:'#command-line-arguments ./load.go:14:不能使用「github.com/spf13/pflag".CommandLine(類型*」github.com/spf13/pflag「.FlagSet)作爲類型*「github.com/openshift/origin/vendor/github.com/spf13/pflag」.Flag設置參數爲「github.com/openshift/origin/pkg/cmd/util/clientcmd」。新增 ./load.go :17:分配計數不匹配:4 = 3' – Dan
@丹,我已經更新了我的答案a)針對原始版本v3.6.0-alpha(解決了您的分配計數不匹配錯誤),以及b)給出了一種怪異的方式圍繞售貨問題開展工作。 HTH。 –
謝謝。 Golang的出售部分仍然令我煩惱。這對臨時過程很有幫助! – Dan