1 回答
TA贡献1789条经验 获得超10个赞
您曾经如此接近,但问题很小:您需要包含以下额外导入:
import _ "github.com/openshift/origin/pkg/api/install"
我不完全清楚导入的实际作用,但显然它会导致将必要的附加功能链接到二进制文件中,否则 OpenShift 客户端将无法工作(返回空列表)。
所有 OpenShift 命令行工具都包含该导入,在撰写本文时,许多命令行工具还包含以下部分/全部内容:
import (
_ "github.com/openshift/origin/pkg/api/install"
_ "k8s.io/kubernetes/pkg/api/install"
_ "k8s.io/kubernetes/pkg/apis/autoscaling/install"
_ "k8s.io/kubernetes/pkg/apis/batch/install"
_ "k8s.io/kubernetes/pkg/apis/extensions/install"
)
最后,这是一个对我有用的完整代码示例(针对 origin v3.6.0-alpha 更新):
package main
import (
"fmt"
_ "github.com/openshift/origin/pkg/api/install"
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
"github.com/spf13/pflag"
"k8s.io/apimachinery/pkg/apis/meta/v1"
)
func main() {
factory := clientcmd.New(pflag.CommandLine)
pflag.Parse()
oc, kc, err := factory.Clients()
if err != nil {
panic(err)
}
namespace, _, err := factory.DefaultNamespace()
if err != nil {
panic(err)
}
pods, err := kc.Core().Pods(namespace).List(v1.ListOptions{})
if err != nil {
panic(err)
}
for _, pod := range pods.Items {
fmt.Printf("Pod: %s\n", pod.Name)
}
buildconfigs, err := oc.BuildConfigs(namespace).List(v1.ListOptions{})
if err != nil {
panic(err)
}
for _, buildconfig := range buildconfigs.Items {
fmt.Printf("BuildConfig: %s\n", buildconfig.Name)
}
}
要运行此示例,您当前需要供应 OpenShift 及其依赖项。一种非常hacky的方法如下:
rm -rf vendor
mkdir -p vendor/github.com/openshift/origin
ln -s $GOPATH/src/github.com/openshift/origin/vendor/* vendor
ln -s $GOPATH/src/github.com/openshift/origin/vendor/github.com/* vendor/github.com
ln -s $GOPATH/src/github.com/openshift/origin/vendor/github.com/openshift/* vendor/github.com/openshift
ln -s $GOPATH/src/github.com/openshift/origin/pkg vendor/github.com/openshift/origin
最后,它旨在为 OpenShift 制作一个合适的独立 Go 客户端 - 积压卡位于https://trello.com/c/PTDrY0GF/794-13-client-provide-go-client-similar-to- Kubernetes。
- 1 回答
- 0 关注
- 158 浏览
添加回答
举报