Comments (2)
package client
import (
"fmt"
"git.xfyun.cn/container/genesis/modules/authentication"
"git.xfyun.cn/container/genesis/utils"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"github.com/pkg/errors"
)
//KubeClientFromInClusterConfig is
func KubeClientFromInClusterConfig() (clientSet *kubernetes.Clientset, err error) {
config, err := rest.InClusterConfig()
if err != nil {
return clientSet, err
}
// creates the clientset
clientSet, err = kubernetes.NewForConfig(config)
if err != nil {
return clientSet, err
}
return clientSet, nil
}
//KubeClientFromKubeconfigPath is
func KubeClientFromKubeconfigPath(path string) (clientSet *kubernetes.Clientset, err error) {
cfg, err := clientcmd.BuildConfigFromFlags("", path)
if err != nil {
return nil, fmt.Errorf("new kube config error: %s", err)
}
if clientSet, err = kubernetes.NewForConfig(cfg); err != nil {
return nil, fmt.Errorf("new kube config error: %s", err)
}
return clientSet, nil
}
//KubeClientFromKubeconfigStringBody is
func KubeClientFromKubeconfigStringBody(body string) (*kubernetes.Clientset, error) {
b, err := utils.Base64Decode(body)
if err != nil {
return nil, err
}
clientConfig, err := clientcmd.NewClientConfigFromBytes(b)
if err != nil {
return nil, fmt.Errorf("new client config from body error: %s", err)
}
cfg, err := clientConfig.ClientConfig()
if err != nil {
return nil, fmt.Errorf("new kube config from body error: %s", err)
}
clientSet, err := kubernetes.NewForConfig(cfg)
if err != nil {
return nil, fmt.Errorf("new kube config from body error: %s", err)
}
return clientSet, nil
}
客户端创建可参考
from fist.
yaml切分处理:
package utils
import (
"bytes"
"fmt"
"io"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/yaml"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
)
var bs = []byte(`
kind: Namespace
metadata:
name: test
---
kind: bbb
name: aaa`)
/* Out put
{"kind":"Namespace","metadata":{"name":"test"}}
{"kind":"bbb","name":"aaa"}
*/
func example() {
reader := bytes.NewReader(bs)
ext := runtime.RawExtension{}
d := yaml.NewYAMLOrJSONDecoder(reader, 4096)
for {
if err := d.Decode(&ext); err != nil {
if err == io.EOF {
return
}
return
}
fmt.Println(string(ext.Raw))
}
}
//YamlCallback is
type YamlCallback func([]byte) error
//YamlHandler is
func YamlHandler(rawBytes []byte, fn YamlCallback) (err error) {
reader := bytes.NewReader(rawBytes)
d := yaml.NewYAMLOrJSONDecoder(reader, 4096)
for {
ext := runtime.RawExtension{}
if err = d.Decode(&ext); err != nil {
if err == io.EOF {
return nil
}
return fmt.Errorf("decode yaml json failed: %v", err)
}
// TODO: This needs to be able to handle object in other encodings and schemas.
ext.Raw = bytes.TrimSpace(ext.Raw)
if len(ext.Raw) == 0 || bytes.Equal(ext.Raw, []byte("null")) {
continue
}
kubeConfigFlags := genericclioptions.NewConfigFlags()
matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(kubeConfigFlags)
f := cmdutil.NewFactory(matchVersionKubeConfigFlags)
schema, err := f.Validator(true)
if err != nil {
return err
}
//if err := resource.ValidateSchema(ext.Raw, validation.NullSchema{}); err != nil {
if err := resource.ValidateSchema(ext.Raw, schema); err != nil {
return fmt.Errorf("error validating yaml: %v", err)
}
//Raw is already to json
if err = fn(ext.Raw); err != nil {
return fmt.Errorf("handler yaml callback fn failed: %v", err)
}
}
}
from fist.
Related Issues (20)
- Ingress代理tty解决安全问题
- auth模块密钥对生成从文件读取 HOT 2
- 时间太短,干个100年
- 获取终端列表 HOT 2
- cors has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource
- x509: certificate has expired or is not yet valid
- template从文件读取模板功能 HOT 1
- template模块,templates元数据列表查询接口
- webterminal访问入口
- 官网调整完新版页面后,会员登录出现了问题
- RBAC模块的验证功能 HOT 1
- RBAC模块以及重构功能 HOT 2
- token接口使用http
- oidc增加prefix参数 HOT 1
- tty清理功能无效 HOT 2
- Render 功能 HOT 1
- Namespace管理与PSP
- APP store功能
- pipeline功能
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fist.