Kubernetes源码-SchemeBuilder

SchemeBuilder

用于存放处理 Scheme 的函数

type SchemeBuilder []func(*Scheme) error 

NewSchemeBuilder

创建并初始化 SchemeBuilder

func NewSchemeBuilder(funcs ...func(*Scheme) error) SchemeBuilder {
    var sb SchemeBuilder
    sb.Register(funcs...)
    return sb
}

Register

向 SchemeBuilder 注册处理 Scheme 的函数

func (sb *SchemeBuilder) Register(funcs ...func(*Scheme) error) {
    for _, f := range funcs {
        *sb = append(*sb, f)
    }
}

AddToScheme

将 SchemeBuilder 中的函数作用于 Scheme

func (sb *SchemeBuilder) AddToScheme(s *Scheme) error {
    for _, f := range *sb {
        if err := f(s); err != nil {
            return err
        }
    }
    return nil
}

Usage

v1

package SchemeBuilderV1

import "k8s.io/apimachinery/pkg/runtime"

var (
    SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
    AddToScheme = SchemeBuilder.AddToScheme
)

func addKnownTypes(scheme *runtime.Scheme) error { ... }

v2

package SchemeBuilderV2

import "k8s.io/apimachinery/pkg/runtime"

var (
    SchemeBuilder = runtime.NewSchemeBuilder()
    AddToScheme = SchemeBuilder.AddToScheme
)

func init() { SchemeBuilder.Register(addKnownTypes) }

func addKnownTypes(scheme *runtime.Scheme) error { ... }

AddToScheme

scheme := runtime.NewScheme()
if err := SchemeBuilderV1.AddToScheme(scheme); err != nil { ... }
if err := SchemeBuilderV2.AddToScheme(scheme); err != nil { ... } 
posted @ 2021-04-06 14:46  人艰不拆_zmc  阅读(598)  评论(0)    收藏  举报